TextureWriter.cs 979 B

1234567891011121314151617181920212223242526272829303132333435
  1. using ChocolArm64.Memory;
  2. using Ryujinx.Graphics.Gal;
  3. using Ryujinx.Graphics.Memory;
  4. namespace Ryujinx.Graphics.Texture
  5. {
  6. static class TextureWriter
  7. {
  8. public unsafe static void Write(IAMemory Memory, TextureInfo Texture, byte[] Data)
  9. {
  10. ISwizzle Swizzle = TextureHelper.GetSwizzle(Texture, 1, 4);
  11. (AMemory CpuMem, long Position) = TextureHelper.GetMemoryAndPosition(
  12. Memory,
  13. Texture.Position);
  14. fixed (byte* BuffPtr = Data)
  15. {
  16. long InOffs = 0;
  17. for (int Y = 0; Y < Texture.Height; Y++)
  18. for (int X = 0; X < Texture.Width; X++)
  19. {
  20. long Offset = (uint)Swizzle.GetSwizzleOffset(X, Y);
  21. int Pixel = *(int*)(BuffPtr + InOffs);
  22. CpuMem.WriteInt32(Position + Offset, Pixel);
  23. InOffs += 4;
  24. }
  25. }
  26. }
  27. }
  28. }