From 1df6c07f78c4c3b8c7fc679d7466f79a10c2d496 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Mon, 4 Dec 2023 16:30:19 -0300 Subject: 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 --- src/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'src/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs') diff --git a/src/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs b/src/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs index a9ea04ce..aed3268a 100644 --- a/src/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs +++ b/src/Ryujinx.Graphics.Gpu/Memory/BufferBounds.cs @@ -1,4 +1,5 @@ using Ryujinx.Graphics.Shader; +using Ryujinx.Memory.Range; namespace Ryujinx.Graphics.Gpu.Memory { @@ -8,30 +9,28 @@ namespace Ryujinx.Graphics.Gpu.Memory readonly struct BufferBounds { /// - /// Region virtual address. + /// Physical memory ranges where the buffer is mapped. /// - public ulong Address { get; } + public MultiRange Range { get; } /// - /// Region size in bytes. + /// Buffer usage flags. /// - public ulong Size { get; } + public BufferUsageFlags Flags { get; } /// - /// Buffer usage flags. + /// Indicates that the backing memory for the buffer does not exist. /// - public BufferUsageFlags Flags { get; } + public bool IsUnmapped => Range.IsUnmapped; /// /// Creates a new buffer region. /// - /// Region address - /// Region size + /// Physical memory ranges where the buffer is mapped /// Buffer usage flags - public BufferBounds(ulong address, ulong size, BufferUsageFlags flags = BufferUsageFlags.None) + public BufferBounds(MultiRange range, BufferUsageFlags flags = BufferUsageFlags.None) { - Address = address; - Size = size; + Range = range; Flags = flags; } } -- cgit v1.2.3