From de70f66a27efe3969faca11e756aeafa805b999d Mon Sep 17 00:00:00 2001 From: KeatonTheBot Date: Wed, 27 May 2026 12:24:41 +0000 Subject: [PATCH] macOS: Fix black screen on Metal versions older than 3.1 (#114) Fixes a black screen on Metal versions older than 3.1 by disabling `VK_EXT_extended_dynamic_state` (and `VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE`). Fix imported from [@sunshineinabox](https://github.com/sunshineinabox)'s unpublished extended dynamic states branch. Co-authored-by: sunshineinabox Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/114 --- src/Ryujinx.Graphics.Vulkan/PipelineState.cs | 4 +++- src/Ryujinx.Graphics.Vulkan/VulkanRenderer.cs | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) 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(