diff options
Diffstat (limited to 'src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs')
-rw-r--r-- | src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs index 7240bcad..893ecf1a 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs @@ -392,6 +392,8 @@ namespace Ryujinx.Graphics.Vulkan LoadFeatures(maxQueueCount, queueFamilyIndex); + QueueFamilyIndex = queueFamilyIndex; + _window = new Window(this, _surface, _physicalDevice.PhysicalDevice, _device); _initialized = true; @@ -399,12 +401,12 @@ namespace Ryujinx.Graphics.Vulkan public BufferHandle CreateBuffer(int size, BufferAccess access) { - return BufferManager.CreateWithHandle(this, size, access.Convert(), default, access == BufferAccess.Stream); + return BufferManager.CreateWithHandle(this, size, access.HasFlag(BufferAccess.SparseCompatible), access.Convert(), default, access == BufferAccess.Stream); } - public BufferHandle CreateBuffer(int size, BufferHandle storageHint) + public BufferHandle CreateBuffer(int size, BufferAccess access, BufferHandle storageHint) { - return BufferManager.CreateWithHandle(this, size, BufferAllocationType.Auto, storageHint); + return BufferManager.CreateWithHandle(this, size, access.HasFlag(BufferAccess.SparseCompatible), access.Convert(), storageHint); } public BufferHandle CreateBuffer(nint pointer, int size) @@ -412,6 +414,11 @@ namespace Ryujinx.Graphics.Vulkan return BufferManager.CreateHostImported(this, pointer, size); } + public BufferHandle CreateBufferSparse(ReadOnlySpan<BufferRange> storageBuffers) + { + return BufferManager.CreateSparse(this, storageBuffers); + } + public IProgram CreateProgram(ShaderSource[] sources, ShaderInfo info) { bool isCompute = sources.Length == 1 && sources[0].Stage == ShaderStage.Compute; @@ -571,6 +578,7 @@ namespace Ryujinx.Graphics.Vulkan Api.GetPhysicalDeviceFeatures2(_physicalDevice.PhysicalDevice, &features2); var limits = _physicalDevice.PhysicalDeviceProperties.Limits; + var mainQueueProperties = _physicalDevice.QueueFamilyProperties[QueueFamilyIndex]; return new Capabilities( api: TargetApi.Vulkan, @@ -590,6 +598,7 @@ namespace Ryujinx.Graphics.Vulkan supportsR4G4B4A4Format: supportsR4G4B4A4Format, supportsSnormBufferTextureFormat: true, supports5BitComponentFormat: supports5BitComponentFormat, + supportsSparseBuffer: features2.Features.SparseBinding && mainQueueProperties.QueueFlags.HasFlag(QueueFlags.SparseBindingBit), supportsBlendEquationAdvanced: Capabilities.SupportsBlendEquationAdvanced, supportsFragmentShaderInterlock: Capabilities.SupportsFragmentShaderInterlock, supportsFragmentShaderOrderingIntel: false, |