diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 2e18a1d0c..82b645dc4 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1056,26 +1056,15 @@ void RasterizerVulkan::UpdateViewportsState(Tegra::Engines::Maxwell3D::Regs& reg const auto y = static_cast(regs.surface_clip.y); const auto width = static_cast(regs.surface_clip.width); const auto height = static_cast(regs.surface_clip.height); - // Ensure valid viewport dimensions to prevent vertex explosions - const float viewport_width = width > 0.0f ? width : 1.0f; - const float viewport_height = height > 0.0f ? height : 1.0f; - - std::array viewport_list; - for (size_t i = 0; i < Maxwell::NumViewports; ++i) { - viewport_list[i] = VkViewport{ - .x = x, - .y = y, - .width = viewport_width, - .height = viewport_height, - .minDepth = 0.0f, - .maxDepth = 1.0f, - }; - } - 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); - cmdbuf.SetViewport(0, viewports); - }); + VkViewport viewport{ + .x = x, + .y = y, + .width = width != 0.0f ? width : 1.0f, + .height = height != 0.0f ? height : 1.0f, + .minDepth = 0.0f, + .maxDepth = 1.0f, + }; + scheduler.Record([viewport](vk::CommandBuffer cmdbuf) { cmdbuf.SetViewport(0, viewport); }); return; } const bool is_rescaling{texture_cache.IsRescaling()};