aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.GAL/Multithreading/Commands/SetUniformBuffersCommand.cs
diff options
context:
space:
mode:
authorriperiperi <rhy3756547@hotmail.com>2022-11-24 07:50:59 +0000
committerGitHub <noreply@github.com>2022-11-24 07:50:59 +0000
commitece36b274da3957d727387d2f7c96adbd0f29bc3 (patch)
treee4f024265342c69eba254083a4308c32a5aad83d /Ryujinx.Graphics.GAL/Multithreading/Commands/SetUniformBuffersCommand.cs
parentf3cc2e5703e5df5c359ce1789a4fb0d73fb9a637 (diff)
GAL: Send all buffer assignments at once rather than individually (#3881)1.1.377
* GAL: Send all buffer assignments at once rather than individually The `(int first, BufferRange[] ranges)` method call has very significant performance implications when the bindings are spread out, which they generally always are in Vulkan. This change makes it so that these methods are only called a maximum of one time per draw. Significantly improves GPU thread performance in Pokemon Scarlet/Violet. * Address Feedback Removed SetUniformBuffers(int first, ReadOnlySpan<BufferRange> buffers)
Diffstat (limited to 'Ryujinx.Graphics.GAL/Multithreading/Commands/SetUniformBuffersCommand.cs')
-rw-r--r--Ryujinx.Graphics.GAL/Multithreading/Commands/SetUniformBuffersCommand.cs10
1 files changed, 4 insertions, 6 deletions
diff --git a/Ryujinx.Graphics.GAL/Multithreading/Commands/SetUniformBuffersCommand.cs b/Ryujinx.Graphics.GAL/Multithreading/Commands/SetUniformBuffersCommand.cs
index 750d8dac..e4abb403 100644
--- a/Ryujinx.Graphics.GAL/Multithreading/Commands/SetUniformBuffersCommand.cs
+++ b/Ryujinx.Graphics.GAL/Multithreading/Commands/SetUniformBuffersCommand.cs
@@ -6,19 +6,17 @@ namespace Ryujinx.Graphics.GAL.Multithreading.Commands
struct SetUniformBuffersCommand : IGALCommand
{
public CommandType CommandType => CommandType.SetUniformBuffers;
- private int _first;
- private SpanRef<BufferRange> _buffers;
+ private SpanRef<BufferAssignment> _buffers;
- public void Set(int first, SpanRef<BufferRange> buffers)
+ public void Set(SpanRef<BufferAssignment> buffers)
{
- _first = first;
_buffers = buffers;
}
public static void Run(ref SetUniformBuffersCommand command, ThreadedRenderer threaded, IRenderer renderer)
{
- Span<BufferRange> buffers = command._buffers.Get(threaded);
- renderer.Pipeline.SetUniformBuffers(command._first, threaded.Buffers.MapBufferRanges(buffers));
+ Span<BufferAssignment> buffers = command._buffers.Get(threaded);
+ renderer.Pipeline.SetUniformBuffers(threaded.Buffers.MapBufferRanges(buffers));
command._buffers.Dispose(threaded);
}
}