TextureWriter.cs 919 B

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