From 9e950c695943223e76b0b97e78b18a1f5f6da1dc Mon Sep 17 00:00:00 2001 From: Patrick Ferry <8967997+PatrickFerry@users.noreply.github.com> Date: Thu, 28 Sep 2023 03:00:04 +0100 Subject: [PATCH] Use Vertex Depth Range when zRange Exceeds farZ When the inverted depth range is unsupported and zRange is greater than farZ then min_depth becomes a negative value and far_depth will then exceed a depth of 1.0 (which is outside the scope of most backends and greater than GX_MAX_DEPTH of the console). This happens when the backend supports depth clamping the min_depth is not clamped to zero. --- Source/Core/VideoCommon/VertexShaderManager.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/Core/VideoCommon/VertexShaderManager.cpp b/Source/Core/VideoCommon/VertexShaderManager.cpp index 41c06ad4ba..ce5ebdbb00 100644 --- a/Source/Core/VideoCommon/VertexShaderManager.cpp +++ b/Source/Core/VideoCommon/VertexShaderManager.cpp @@ -168,8 +168,14 @@ bool VertexShaderManager::UseVertexDepthRange() return true; // If an inverted depth range is unsupported, we also need to check if the range is inverted. - if (!g_ActiveConfig.backend_info.bSupportsReversedDepthRange && xfmem.viewport.zRange < 0.0f) - return true; + if (!g_ActiveConfig.backend_info.bSupportsReversedDepthRange) + { + if (xfmem.viewport.zRange < 0.0f) + return true; + + if (xfmem.viewport.zRange > xfmem.viewport.farZ) + return true; + } // If an oversized depth range or a ztexture is used, we need to calculate the depth range // in the vertex shader.