diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index d2f314995e..ca58e3fb4c 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -845,10 +845,9 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { VK_DYNAMIC_STATE_LINE_WIDTH, }; if (key.state.extended_dynamic_state) { - static constexpr std::array extended{ + std::vector extended{ VK_DYNAMIC_STATE_CULL_MODE_EXT, VK_DYNAMIC_STATE_FRONT_FACE_EXT, - VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT, VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT, VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT, VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT, @@ -856,6 +855,9 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT, VK_DYNAMIC_STATE_STENCIL_OP_EXT, }; + if (!device.IsExtVertexInputDynamicStateSupported()) { + extended.push_back(VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT); + } if (key.state.dynamic_vertex_input) { dynamic_states.push_back(VK_DYNAMIC_STATE_VERTEX_INPUT_EXT); } diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 01fc3a4eda..7bd8c57118 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -971,8 +971,6 @@ void RasterizerVulkan::UpdateDynamicStates() { } UpdateLogicOpEnable(regs); UpdateDepthClampEnable(regs); - UpdateLineStippleEnable(regs); - UpdateConservativeRasterizationMode(regs); } } if (device.IsExtExtendedDynamicState2ExtrasSupported()) { @@ -981,6 +979,10 @@ void RasterizerVulkan::UpdateDynamicStates() { if (device.IsExtExtendedDynamicState3BlendingSupported()) { UpdateBlending(regs); } + if (device.IsExtExtendedDynamicState3EnablesSupported()) { + UpdateLineStippleEnable(regs); + UpdateConservativeRasterizationMode(regs); + } } if (device.IsExtVertexInputDynamicStateSupported()) { if (auto* gp = pipeline_cache.CurrentGraphicsPipeline(); gp && gp->HasDynamicVertexInput()) {