diff options
| author | 2021-09-19 00:03:14 -0400 | |
|---|---|---|
| committer | 2021-11-16 22:11:30 +0100 | |
| commit | 122ddeb7ff948a607b0bee9bae968dc4d9c72188 (patch) | |
| tree | 0d5936d0666e01cf292e86ace197e754116e500c /src | |
| parent | vk_texture_cache: Use nearest neighbor scaling when available (diff) | |
| download | yuzu-122ddeb7ff948a607b0bee9bae968dc4d9c72188.tar.gz yuzu-122ddeb7ff948a607b0bee9bae968dc4d9c72188.tar.xz yuzu-122ddeb7ff948a607b0bee9bae968dc4d9c72188.zip | |
vk_rasterizer: Fix scaling on Y_NEGATE
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 20bb05e7d..87f265e09 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
| @@ -60,12 +60,18 @@ struct DrawParams { | |||
| 60 | 60 | ||
| 61 | VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index, float scale) { | 61 | VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t index, float scale) { |
| 62 | const auto& src = regs.viewport_transform[index]; | 62 | const auto& src = regs.viewport_transform[index]; |
| 63 | const float x = (src.translate_x - src.scale_x) * scale; | ||
| 63 | const float width = src.scale_x * 2.0f * scale; | 64 | const float width = src.scale_x * 2.0f * scale; |
| 64 | const float height = src.scale_y * 2.0f * scale; | 65 | float y = (src.translate_y - src.scale_y) * scale; |
| 66 | float height = src.scale_y * 2.0f * scale; | ||
| 67 | if (regs.screen_y_control.y_negate) { | ||
| 68 | y += height; | ||
| 69 | height = -height; | ||
| 70 | } | ||
| 65 | const float reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne ? 1.0f : 0.0f; | 71 | const float reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne ? 1.0f : 0.0f; |
| 66 | VkViewport viewport{ | 72 | VkViewport viewport{ |
| 67 | .x = (src.translate_x - src.scale_x) * scale, | 73 | .x = x, |
| 68 | .y = (src.translate_y - src.scale_y) * scale, | 74 | .y = y, |
| 69 | .width = width != 0.0f ? width : 1.0f, | 75 | .width = width != 0.0f ? width : 1.0f, |
| 70 | .height = height != 0.0f ? height : 1.0f, | 76 | .height = height != 0.0f ? height : 1.0f, |
| 71 | .minDepth = src.translate_z - src.scale_z * reduce_z, | 77 | .minDepth = src.translate_z - src.scale_z * reduce_z, |