summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-03-22 03:26:07 -0300
committerGravatar ReinUsesLisp2020-03-22 03:26:07 -0300
commitbdcedc850602bd375caeb21c053426062b462c99 (patch)
tree6f9eac3aa2fc126c861decb3421203313b7333d7
parentMerge pull request #3531 from makigumo/yuzu_master (diff)
downloadyuzu-bdcedc850602bd375caeb21c053426062b462c99.tar.gz
yuzu-bdcedc850602bd375caeb21c053426062b462c99.tar.xz
yuzu-bdcedc850602bd375caeb21c053426062b462c99.zip
gl_rasterizer: Use transformed viewport for depth ranges
Implement depth ranges using the transformed viewport instead of the generic one. This matches the current Vulkan implementation but doesn't support negative depth ranges. An update to glad is required for this.
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 063f41327..826eee7df 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -933,13 +933,15 @@ void RasterizerOpenGL::SyncViewport() {
933 } 933 }
934 flags[Dirty::Viewport0 + i] = false; 934 flags[Dirty::Viewport0 + i] = false;
935 935
936 const Common::Rectangle<f32> rect{regs.viewport_transform[i].GetRect()}; 936 const auto& src = regs.viewport_transform[i];
937 const Common::Rectangle<f32> rect{src.GetRect()};
937 glViewportIndexedf(static_cast<GLuint>(i), rect.left, rect.bottom, rect.GetWidth(), 938 glViewportIndexedf(static_cast<GLuint>(i), rect.left, rect.bottom, rect.GetWidth(),
938 rect.GetHeight()); 939 rect.GetHeight());
939 940
940 const auto& src = regs.viewports[i]; 941 const GLdouble reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne;
941 glDepthRangeIndexed(static_cast<GLuint>(i), static_cast<GLdouble>(src.depth_range_near), 942 const GLdouble near_depth = src.translate_z - src.scale_z * reduce_z;
942 static_cast<GLdouble>(src.depth_range_far)); 943 const GLdouble far_depth = src.translate_z + src.scale_z;
944 glDepthRangeIndexed(static_cast<GLuint>(i), near_depth, far_depth);
943 } 945 }
944 } 946 }
945} 947}