aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Engine/Dma
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2021-08-04 17:20:58 -0300
committerGitHub <noreply@github.com>2021-08-04 22:20:58 +0200
commitff5df5d8a1fec6947f7feed3ec3ca0889cd892a5 (patch)
tree0a26c48d35bbfd88637ecccc7e837e0d2461a029 /Ryujinx.Graphics.Gpu/Engine/Dma
parentff8849671af5ac14fc9cc9d37da30f53d3f13d89 (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.cs11
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
{