diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 16e46d3e5..7e40c2df1 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
| @@ -69,10 +69,17 @@ VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t in | |||
| 69 | const float width = conv(src.scale_x * 2.0f); | 69 | const float width = conv(src.scale_x * 2.0f); |
| 70 | float y = conv(src.translate_y - src.scale_y); | 70 | float y = conv(src.translate_y - src.scale_y); |
| 71 | float height = conv(src.scale_y * 2.0f); | 71 | float height = conv(src.scale_y * 2.0f); |
| 72 | if (regs.screen_y_control.y_negate) { | 72 | bool y_negate = regs.screen_y_control.y_negate; |
| 73 | |||
| 74 | if (!device.IsNvViewportSwizzleSupported()) { | ||
| 75 | y_negate = y_negate != (src.swizzle.y == Maxwell::ViewportSwizzle::NegativeY); | ||
| 76 | } | ||
| 77 | |||
| 78 | if (y_negate) { | ||
| 73 | y += height; | 79 | y += height; |
| 74 | height = -height; | 80 | height = -height; |
| 75 | } | 81 | } |
| 82 | |||
| 76 | const float reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne ? 1.0f : 0.0f; | 83 | const float reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne ? 1.0f : 0.0f; |
| 77 | VkViewport viewport{ | 84 | VkViewport viewport{ |
| 78 | .x = x, | 85 | .x = x, |