From 6cb228596dc9f24074281f0e2e12b32d6e185bc8 Mon Sep 17 00:00:00 2001 From: Kelebek1 Date: Mon, 22 Feb 2021 23:28:57 +0000 Subject: [PATCH] Override depth if depth_range_0_1 is set --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 418644108b..cf5c21900b 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -862,9 +862,12 @@ void RasterizerOpenGL::SyncViewport() { if (regs.screen_y_control.y_negate != 0) { flip_y = !flip_y; } - const bool is_zero_to_one = regs.depth_mode == Maxwell::DepthMode::ZeroToOne; + const GLenum origin = flip_y ? GL_UPPER_LEFT : GL_LOWER_LEFT; - const GLenum depth = is_zero_to_one ? GL_ZERO_TO_ONE : GL_NEGATIVE_ONE_TO_ONE; + const GLenum depth = regs.view_volume_clip_control.depth_range_0_1 || + regs.depth_mode == Maxwell::DepthMode::ZeroToOne + ? GL_ZERO_TO_ONE + : GL_NEGATIVE_ONE_TO_ONE; state_tracker.ClipControl(origin, depth); state_tracker.SetYNegate(regs.screen_y_control.y_negate != 0); } @@ -889,6 +892,7 @@ void RasterizerOpenGL::SyncViewport() { const GLdouble reduce_z = regs.depth_mode == Maxwell::DepthMode::MinusOneToOne; const GLdouble near_depth = src.translate_z - src.scale_z * reduce_z; const GLdouble far_depth = src.translate_z + src.scale_z; + glDepthRangeIndexed(static_cast(i), near_depth, far_depth); if (!GLAD_GL_NV_viewport_swizzle) {