video_core: vulkan: rasterizer: Workaround on viewport swizzle on AMD

merge-requests/60/head
Narr the Reg 2022-08-23 18:37:40 +07:00
parent 7fab7b829c
commit 0c8aeb09d2
1 changed files with 8 additions and 1 deletions

@ -69,10 +69,17 @@ VkViewport GetViewportState(const Device& device, const Maxwell& regs, size_t in
const float width = conv(src.scale_x * 2.0f); const float width = conv(src.scale_x * 2.0f);
float y = conv(src.translate_y - src.scale_y); float y = conv(src.translate_y - src.scale_y);
float height = conv(src.scale_y * 2.0f); float height = conv(src.scale_y * 2.0f);
if (regs.screen_y_control.y_negate) { bool y_negate = regs.screen_y_control.y_negate;
if (!device.IsNvViewportSwizzleSupported()) {
y_negate = y_negate != (src.swizzle.y == Maxwell::ViewportSwizzle::NegativeY);
}
if (y_negate) {
y += height; y += height;
height = -height; height = -height;
} }
const float reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne ? 1.0f : 0.0f; const float reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne ? 1.0f : 0.0f;
VkViewport viewport{ VkViewport viewport{
.x = x, .x = x,