diff --git a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs index 75fff2034..0c779b694 100644 --- a/src/Ryujinx.Graphics.Vulkan/PipelineState.cs +++ b/src/Ryujinx.Graphics.Vulkan/PipelineState.cs @@ -588,8 +588,10 @@ namespace Ryujinx.Graphics.Vulkan dynamicStates[5] = DynamicState.StencilReference; dynamicStates[6] = DynamicState.BlendConstants; - if (supportsExtDynamicState) + if (supportsExtDynamicState && (gd.SupportsMTL31 || !gd.IsMoltenVk)) { + // Requires Metal 3.1 and new MoltenVK, however extended dynamic states extension is not + // available on older versions of MVK, so we can safely check only OS version. dynamicStates[dynamicStatesCount++] = DynamicState.VertexInputBindingStrideExt; } diff --git a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs index a0b764158..653129ac7 100644 --- a/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs +++ b/src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs @@ -98,6 +98,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; } @@ -123,6 +124,8 @@ namespace Ryujinx.Graphics.Vulkan // Any device running on MacOS is using MoltenVK, even Intel and AMD vendors. if (IsMoltenVk = OperatingSystem.IsMacOS()) MVKInitialization.Initialize(); + + SupportsMTL31 = OperatingSystem.IsMacOSVersionAtLeast(14); } public static VulkanRenderer Create(