diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 85430f678d..9923acdac4 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -692,9 +692,9 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, .pNext = nullptr, .flags = 0, - .viewportCount = key.state.extended_dynamic_state ? 0u : num_viewports, + .viewportCount = num_viewports, .pViewports = nullptr, - .scissorCount = key.state.extended_dynamic_state ? 0u : num_viewports, + .scissorCount = num_viewports, .pScissors = nullptr, }; if (device.IsNvViewportSwizzleSupported()) { @@ -906,8 +906,6 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { } if (key.state.extended_dynamic_state) { static constexpr std::array extended{ - VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT, - VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT, VK_DYNAMIC_STATE_CULL_MODE_EXT, VK_DYNAMIC_STATE_FRONT_FACE_EXT, VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT, @@ -923,6 +921,11 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { dynamic_states.push_back(VK_DYNAMIC_STATE_SCISSOR); } + if (key.state.extended_dynamic_state) { + dynamic_states.push_back(VK_DYNAMIC_STATE_VIEWPORT); + dynamic_states.push_back(VK_DYNAMIC_STATE_SCISSOR); + } + // EDS2 - Core (3 states) if (key.state.extended_dynamic_state_2) { static constexpr std::array extended2{ diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index c79c74e2d9..0d1f2f75bd 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1159,16 +1159,8 @@ void RasterizerVulkan::UpdateViewportsState(Tegra::Engines::Maxwell3D::Regs& reg .minDepth = 0.0f, .maxDepth = 1.0f, }; - GraphicsPipeline* pipeline = pipeline_cache.CurrentGraphicsPipeline(); - const bool use_viewport_with_count = device.IsExtExtendedDynamicStateSupported() && - (!pipeline || pipeline->UsesExtendedDynamicState()); - scheduler.Record([viewport, use_viewport_with_count](vk::CommandBuffer cmdbuf) { - if (use_viewport_with_count) { - std::array viewports{viewport}; - cmdbuf.SetViewportWithCountEXT(viewports); - } else { - cmdbuf.SetViewport(0, viewport); - } + scheduler.Record([viewport](vk::CommandBuffer cmdbuf) { + cmdbuf.SetViewport(0, viewport); }); return; } @@ -1184,17 +1176,10 @@ void RasterizerVulkan::UpdateViewportsState(Tegra::Engines::Maxwell3D::Regs& reg GetViewportState(device, regs, 12, scale), GetViewportState(device, regs, 13, scale), GetViewportState(device, regs, 14, scale), GetViewportState(device, regs, 15, scale), }; - GraphicsPipeline* pipeline = pipeline_cache.CurrentGraphicsPipeline(); - const bool use_viewport_with_count = device.IsExtExtendedDynamicStateSupported() && - (!pipeline || pipeline->UsesExtendedDynamicState()); - scheduler.Record([this, viewport_list, use_viewport_with_count](vk::CommandBuffer cmdbuf) { + scheduler.Record([this, viewport_list](vk::CommandBuffer cmdbuf) { const u32 num_viewports = std::min(device.GetMaxViewports(), Maxwell::NumViewports); const vk::Span viewports(viewport_list.data(), num_viewports); - if (use_viewport_with_count) { - cmdbuf.SetViewportWithCountEXT(viewports); - } else { - cmdbuf.SetViewport(0, viewports); - } + cmdbuf.SetViewport(0, viewports); }); } @@ -1215,16 +1200,8 @@ void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D::Regs& regs scissor.offset.y = static_cast(y); scissor.extent.width = width; scissor.extent.height = height; - GraphicsPipeline* pipeline = pipeline_cache.CurrentGraphicsPipeline(); - const bool use_scissor_with_count = device.IsExtExtendedDynamicStateSupported() && - (!pipeline || pipeline->UsesExtendedDynamicState()); - scheduler.Record([scissor, use_scissor_with_count](vk::CommandBuffer cmdbuf) { - if (use_scissor_with_count) { - std::array scissors{scissor}; - cmdbuf.SetScissorWithCountEXT(scissors); - } else { - cmdbuf.SetScissor(0, scissor); - } + scheduler.Record([scissor](vk::CommandBuffer cmdbuf) { + cmdbuf.SetScissor(0, scissor); }); return; } @@ -1252,17 +1229,10 @@ void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D::Regs& regs GetScissorState(regs, 14, up_scale, down_shift), GetScissorState(regs, 15, up_scale, down_shift), }; - GraphicsPipeline* pipeline = pipeline_cache.CurrentGraphicsPipeline(); - const bool use_scissor_with_count = device.IsExtExtendedDynamicStateSupported() && - (!pipeline || pipeline->UsesExtendedDynamicState()); - scheduler.Record([this, scissor_list, use_scissor_with_count](vk::CommandBuffer cmdbuf) { + scheduler.Record([this, scissor_list](vk::CommandBuffer cmdbuf) { const u32 num_scissors = std::min(device.GetMaxViewports(), Maxwell::NumViewports); const vk::Span scissors(scissor_list.data(), num_scissors); - if (use_scissor_with_count) { - cmdbuf.SetScissorWithCountEXT(scissors); - } else { - cmdbuf.SetScissor(0, scissors); - } + cmdbuf.SetScissor(0, scissors); }); }