diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 1d67601ab4..647fdc5e22 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1027,19 +1027,15 @@ void RasterizerVulkan::UpdateViewportsState(Tegra::Engines::Maxwell3D::Regs& reg return; } if (!regs.viewport_scale_offset_enabled) { - float x = static_cast(regs.surface_clip.x); - float y = static_cast(regs.surface_clip.y); - float width = std::max(1.0f, static_cast(regs.surface_clip.width)); - float height = std::max(1.0f, static_cast(regs.surface_clip.height)); - if (regs.window_origin.mode != Maxwell::WindowOrigin::Mode::UpperLeft) { - y += height; - height = -height; - } + const auto x = static_cast(regs.surface_clip.x); + 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); VkViewport viewport{ .x = x, .y = y, - .width = width, - .height = height, + .width = width != 0.0f ? width : 1.0f, + .height = height != 0.0f ? height : 1.0f, .minDepth = 0.0f, .maxDepth = 1.0f, }; @@ -1072,18 +1068,15 @@ void RasterizerVulkan::UpdateScissorsState(Tegra::Engines::Maxwell3D::Regs& regs return; } if (!regs.viewport_scale_offset_enabled) { - u32 x = regs.surface_clip.x; - u32 y = regs.surface_clip.y; - u32 width = std::max(1u, static_cast(regs.surface_clip.width)); - u32 height = std::max(1u, static_cast(regs.surface_clip.height)); - if (regs.window_origin.mode != Maxwell::WindowOrigin::Mode::UpperLeft) { - y = regs.surface_clip.height - (y + height); - } - VkRect2D scissor{}; - scissor.offset.x = static_cast(x); - scissor.offset.y = static_cast(y); - scissor.extent.width = width; - scissor.extent.height = height; + const auto x = static_cast(regs.surface_clip.x); + 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); + VkRect2D scissor; + scissor.offset.x = static_cast(x); + scissor.offset.y = static_cast(y); + scissor.extent.width = static_cast(width != 0.0f ? width : 1.0f); + scissor.extent.height = static_cast(height != 0.0f ? height : 1.0f); scheduler.Record([scissor](vk::CommandBuffer cmdbuf) { cmdbuf.SetScissor(0, scissor); });