forked from Mirror/Ryujinx
ece36b274d
* 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)
23 lines
779 B
C#
23 lines
779 B
C#
using Ryujinx.Graphics.GAL.Multithreading.Model;
|
|
using System;
|
|
|
|
namespace Ryujinx.Graphics.GAL.Multithreading.Commands
|
|
{
|
|
struct SetUniformBuffersCommand : IGALCommand
|
|
{
|
|
public CommandType CommandType => CommandType.SetUniformBuffers;
|
|
private SpanRef<BufferAssignment> _buffers;
|
|
|
|
public void Set(SpanRef<BufferAssignment> buffers)
|
|
{
|
|
_buffers = buffers;
|
|
}
|
|
|
|
public static void Run(ref SetUniformBuffersCommand command, ThreadedRenderer threaded, IRenderer renderer)
|
|
{
|
|
Span<BufferAssignment> buffers = command._buffers.Get(threaded);
|
|
renderer.Pipeline.SetUniformBuffers(threaded.Buffers.MapBufferRanges(buffers));
|
|
command._buffers.Dispose(threaded);
|
|
}
|
|
}
|
|
}
|