* 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
25 lines
991 B
C#
25 lines
991 B
C#
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);
|
|
}
|
|
}
|
|
}
|