aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs20
1 files changed, 18 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs b/Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs
index 6f03dc5d..15ebb236 100644
--- a/Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs
+++ b/Ryujinx.Graphics.Gpu/Engine/MethodCopyBuffer.cs
@@ -200,8 +200,24 @@ namespace Ryujinx.Graphics.Gpu.Engine
}
else
{
- // Buffer to buffer copy.
- BufferManager.CopyBuffer(cbp.SrcAddress, cbp.DstAddress, (uint)size);
+ if (remap &&
+ swizzle.UnpackDstX() == BufferSwizzleComponent.ConstA &&
+ swizzle.UnpackDstY() == BufferSwizzleComponent.ConstA &&
+ swizzle.UnpackDstZ() == BufferSwizzleComponent.ConstA &&
+ swizzle.UnpackDstW() == BufferSwizzleComponent.ConstA &&
+ swizzle.UnpackSrcComponentsCount() == 1 &&
+ swizzle.UnpackDstComponentsCount() == 1 &&
+ swizzle.UnpackComponentSize() == 4)
+ {
+ // Fast path for clears when remap is enabled.
+ BufferManager.ClearBuffer(cbp.DstAddress, (uint)size * 4, state.Get<uint>(MethodOffset.CopyBufferConstA));
+ }
+ else
+ {
+ // TODO: Implement remap functionality.
+ // Buffer to buffer copy.
+ BufferManager.CopyBuffer(cbp.SrcAddress, cbp.DstAddress, (uint)size);
+ }
}
}
}