From 2a3069d9a1bfae44bc076b7ab40e11fa67494d0d Mon Sep 17 00:00:00 2001 From: sunshineinabox Date: Mon, 9 Sep 2024 11:02:07 -0700 Subject: [PATCH] Enable Vertex Input Binding Stride extended state when available on newer MVK --- src/Ryujinx.Graphics.Vulkan/PipelineState.cs | 5 +++-- src/Ryujinx.Graphics.Vulkan/VertexBufferUpdater.cs | 2 +- src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs index 4b37fb9b0..fe2349ae9 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs @@ -632,9 +632,10 @@ namespace Ryujinx.Graphics.Vulkan if (_supportsExtDynamicState) { - if (!isMoltenVk) + if (gd.SupportsMTL31 || gd.IsMoltenVk) { - //Requires Metal 3.1 and new MoltenVK + //Requires Metal 3.1 and new MoltenVK however extended dynamic states extension is not + //available on older verrsion of MVK so we can safely check only OS version dynamicStates[dynamicStatesCount++] = DynamicState.VertexInputBindingStrideExt; } dynamicStates[0] = DynamicState.ViewportWithCountExt; diff --git a/src/Ryujinx.Graphics.Vulkan/VertexBufferUpdater.cs b/src/Ryujinx.Graphics.Vulkan/VertexBufferUpdater.cs index 44063da70..7dbdfcb05 100644 --- a/src/Ryujinx.Graphics.Vulkan/VertexBufferUpdater.cs +++ b/src/Ryujinx.Graphics.Vulkan/VertexBufferUpdater.cs @@ -51,7 +51,7 @@ namespace Ryujinx.Graphics.Vulkan { if (_count != 0) { - if (_gd.Capabilities.SupportsExtendedDynamicState && !_gd.IsMoltenVk) + if (_gd.Capabilities.SupportsExtendedDynamicState && (_gd.SupportsMTL31 || !_gd.IsMoltenVk)) { _gd.ExtendedDynamicStateApi.CmdBindVertexBuffers2( cbs.CommandBuffer, diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs index 1e9403ba0..010d24942 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs @@ -91,6 +91,7 @@ namespace Ryujinx.Graphics.Vulkan internal bool IsIntelArc { get; private set; } internal bool IsQualcommProprietary { get; private set; } internal bool IsMoltenVk { get; private set; } + internal bool SupportsMTL31 { get; private set; } internal bool IsTBDR { get; private set; } internal bool IsSharedMemory { get; private set; } @@ -119,6 +120,8 @@ namespace Ryujinx.Graphics.Vulkan // Any device running on MacOS is using MoltenVK, even Intel and AMD vendors. IsMoltenVk = true; + + SupportsMTL31 = OperatingSystem.IsMacOSVersionAtLeast(14); } }