Implement support for multi-range buffers using Vulkan sparse mappings (#5427)
* Pass MultiRange to BufferManager * Implement support for multi-range buffers using Vulkan sparse mappings * Use multi-range for remaining buffers, delete old methods * Assume that more buffers are contiguous * Dispose multi-range buffers after they are removed from the list * Properly init BufferBounds for constant and storage buffers * Do not try reading zero bytes data from an unmapped address on the shader cache + PR feedback * Fix misaligned sparse buffer offsets * Null check can be simplified * PR feedback
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
using Ryujinx.Graphics.GAL.Multithreading.Model;
|
||||
using System;
|
||||
|
||||
namespace Ryujinx.Graphics.GAL.Multithreading.Commands.Renderer
|
||||
{
|
||||
struct CreateBufferSparseCommand : IGALCommand, IGALCommand<CreateBufferSparseCommand>
|
||||
{
|
||||
public readonly CommandType CommandType => CommandType.CreateBufferSparse;
|
||||
private BufferHandle _threadedHandle;
|
||||
private SpanRef<BufferRange> _buffers;
|
||||
|
||||
public void Set(BufferHandle threadedHandle, SpanRef<BufferRange> buffers)
|
||||
{
|
||||
_threadedHandle = threadedHandle;
|
||||
_buffers = buffers;
|
||||
}
|
||||
|
||||
public static void Run(ref CreateBufferSparseCommand command, ThreadedRenderer threaded, IRenderer renderer)
|
||||
{
|
||||
Span<BufferRange> buffers = command._buffers.Get(threaded);
|
||||
threaded.Buffers.AssignBuffer(command._threadedHandle, renderer.CreateBufferSparse(threaded.Buffers.MapBufferRanges(buffers)));
|
||||
command._buffers.Dispose(threaded);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user