From 3ed3f8469be7c102fa79dc706e6f03b6b6fd8a5f Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Mon, 16 Feb 2026 04:36:40 -0400 Subject: [PATCH] [vulkan] Adjustment for Viewport and Scissor counts within EDS --- src/video_core/renderer_vulkan/vk_rasterizer.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index c18027b5cf..c3d4ad798a 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1160,7 +1160,9 @@ void RasterizerVulkan::UpdateViewportsState(Tegra::Engines::Maxwell3D::Regs& reg .minDepth = 0.0f, .maxDepth = 1.0f, }; - const bool use_viewport_with_count = device.IsExtExtendedDynamicStateSupported(); + 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}; @@ -1183,7 +1185,9 @@ 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), }; - const bool use_viewport_with_count = device.IsExtExtendedDynamicStateSupported(); + 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) { const u32 num_viewports = std::min(device.GetMaxViewports(), Maxwell::NumViewports); const vk::Span viewports(viewport_list.data(), num_viewports); @@ -1212,7 +1216,9 @@ void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D::Regs& regs scissor.offset.y = static_cast(y); scissor.extent.width = width; scissor.extent.height = height; - const bool use_scissor_with_count = device.IsExtExtendedDynamicStateSupported(); + 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}; @@ -1247,7 +1253,9 @@ void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D::Regs& regs GetScissorState(regs, 14, up_scale, down_shift), GetScissorState(regs, 15, up_scale, down_shift), }; - const bool use_scissor_with_count = device.IsExtExtendedDynamicStateSupported(); + 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) { const u32 num_scissors = std::min(device.GetMaxViewports(), Maxwell::NumViewports); const vk::Span scissors(scissor_list.data(), num_scissors);