diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2021-08-04 17:20:58 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-04 22:20:58 +0200 |
| commit | ff5df5d8a1fec6947f7feed3ec3ca0889cd892a5 (patch) | |
| tree | 0a26c48d35bbfd88637ecccc7e837e0d2461a029 /Ryujinx.Graphics.Gpu/Engine/Dma | |
| parent | ff8849671af5ac14fc9cc9d37da30f53d3f13d89 (diff) | |
Support non-contiguous copies on I2M and DMA engines (#2473)
* Support non-contiguous copies on I2M and DMA engines
* Vector copy should start aligned on I2M
* Nits
* Zero extend the offset
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/Dma')
| -rw-r--r-- | Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs b/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs index 70909168..3078cc8a 100644 --- a/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs +++ b/Ryujinx.Graphics.Gpu/Engine/Dma/DmaClass.cs @@ -152,14 +152,11 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma dst.MemoryLayout.UnpackGobBlocksInZ(), dstBpp); - ulong srcBaseAddress = memoryManager.Translate(srcGpuVa); - ulong dstBaseAddress = memoryManager.Translate(dstGpuVa); - (int srcBaseOffset, int srcSize) = srcCalculator.GetRectangleRange(src.RegionX, src.RegionY, xCount, yCount); (int dstBaseOffset, int dstSize) = dstCalculator.GetRectangleRange(dst.RegionX, dst.RegionY, xCount, yCount); - ReadOnlySpan<byte> srcSpan = memoryManager.Physical.GetSpan(srcBaseAddress + (ulong)srcBaseOffset, srcSize, true); - Span<byte> dstSpan = memoryManager.Physical.GetSpan(dstBaseAddress + (ulong)dstBaseOffset, dstSize).ToArray(); + ReadOnlySpan<byte> srcSpan = memoryManager.GetSpan(srcGpuVa + (uint)srcBaseOffset, srcSize, true); + Span<byte> dstSpan = memoryManager.GetSpan(dstGpuVa + (uint)dstBaseOffset, dstSize).ToArray(); bool completeSource = IsTextureCopyComplete(src, srcLinear, srcBpp, srcStride, xCount, yCount); bool completeDest = IsTextureCopyComplete(dst, dstLinear, dstBpp, dstStride, xCount, yCount); @@ -217,7 +214,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma { srcSpan.CopyTo(dstSpan); // No layout conversion has to be performed, just copy the data entirely. - memoryManager.Physical.Write(dstBaseAddress + (ulong)dstBaseOffset, dstSpan); + memoryManager.Write(dstGpuVa + (uint)dstBaseOffset, dstSpan); return; } @@ -258,7 +255,7 @@ namespace Ryujinx.Graphics.Gpu.Engine.Dma _ => throw new NotSupportedException($"Unable to copy ${srcBpp} bpp pixel format.") }; - memoryManager.Physical.Write(dstBaseAddress + (ulong)dstBaseOffset, dstSpan); + memoryManager.Write(dstGpuVa + (uint)dstBaseOffset, dstSpan); } else { |
