From 597137e8b19aa86d64710cd38064bb14a7ca3e44 Mon Sep 17 00:00:00 2001 From: LloydNicholson <34131158+LloydNicholson@users.noreply.github.com> Date: Mon, 26 Oct 2026 03:08:43 +0200 Subject: [PATCH] vulkan: enable VK_EXT_extended_dynamic_state when available (#1906) --- src/graphics/presentation/window/vulkanWindow.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/graphics/presentation/window/vulkanWindow.cpp b/src/graphics/presentation/window/vulkanWindow.cpp index c1704ed8c..8a9fe9cf3 100644 --- a/src/graphics/presentation/window/vulkanWindow.cpp +++ b/src/graphics/presentation/window/vulkanWindow.cpp @@ -733,6 +733,15 @@ static vk::Device VulkanCreateDevice(GraphicContext& graphics, conditional_rendering.pNext = const_cast(create_info.pNext); create_info.pNext = &conditional_rendering; } + // The renderer only uses the Vulkan 1.3 core dynamic states, but RADV (Mesa 26.3) creates its + // PS epilog cache only when this EXT feature is enabled and crashes in vkCmdDraw when a + // depth- or stencil-writing fragment shader needs an epilog. + vk::PhysicalDeviceExtendedDynamicStateFeaturesEXT extended_dynamic_state {}; + extended_dynamic_state.extendedDynamicState = VK_TRUE; + if (HasExtension(device_extensions, VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME)) { + extended_dynamic_state.pNext = const_cast(create_info.pNext); + create_info.pNext = &extended_dynamic_state; + } create_info.pQueueCreateInfos = &queue_create_info; create_info.queueCreateInfoCount = 1; create_info.enabledExtensionCount = static_cast(device_extensions.size()); @@ -1111,7 +1120,8 @@ void WindowContext::CreateVulkan() { VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME, VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME, VK_KHR_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME, - VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME}) { + VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME, + VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME}) { if (HasExtension(available_extensions, extension)) { device_extensions.push_back(extension); }