From 65b5765858e67e12f6648839a49e5cb996ef84fd Mon Sep 17 00:00:00 2001 From: Jules Blok Date: Tue, 27 Dec 2016 20:25:40 +0100 Subject: [PATCH] VideoBackends: Clamp the range to the maximum depth value supported in the z buffer. --- Source/Core/VideoBackends/D3D/Render.cpp | 2 +- Source/Core/VideoBackends/D3D12/Render.cpp | 2 +- Source/Core/VideoBackends/OGL/Render.cpp | 2 +- Source/Core/VideoBackends/Vulkan/Renderer.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Source/Core/VideoBackends/D3D/Render.cpp b/Source/Core/VideoBackends/D3D/Render.cpp index 35fd561e5e..31eea38d9c 100644 --- a/Source/Core/VideoBackends/D3D/Render.cpp +++ b/Source/Core/VideoBackends/D3D/Render.cpp @@ -559,7 +559,7 @@ void Renderer::SetViewport() float Y = Renderer::EFBToScaledYf(xfmem.viewport.yOrig + xfmem.viewport.ht - scissorYOff); float Wd = Renderer::EFBToScaledXf(2.0f * xfmem.viewport.wd); float Ht = Renderer::EFBToScaledYf(-2.0f * xfmem.viewport.ht); - float range = MathUtil::Clamp(xfmem.viewport.zRange, 0.0f, 16777216.0f); + float range = MathUtil::Clamp(xfmem.viewport.zRange, 0.0f, 16777215.0f); float min_depth = MathUtil::Clamp(xfmem.viewport.farZ - range, 0.0f, 16777215.0f) / 16777216.0f; float max_depth = MathUtil::Clamp(xfmem.viewport.farZ, 0.0f, 16777215.0f) / 16777216.0f; diff --git a/Source/Core/VideoBackends/D3D12/Render.cpp b/Source/Core/VideoBackends/D3D12/Render.cpp index 2b8e204ee2..9016cb8e8d 100644 --- a/Source/Core/VideoBackends/D3D12/Render.cpp +++ b/Source/Core/VideoBackends/D3D12/Render.cpp @@ -464,7 +464,7 @@ void Renderer::SetViewport() float y = Renderer::EFBToScaledYf(xfmem.viewport.yOrig + xfmem.viewport.ht - scissor_y_offset); float width = Renderer::EFBToScaledXf(2.0f * xfmem.viewport.wd); float height = Renderer::EFBToScaledYf(-2.0f * xfmem.viewport.ht); - float range = MathUtil::Clamp(xfmem.viewport.zRange, 0.0f, 16777216.0f); + float range = MathUtil::Clamp(xfmem.viewport.zRange, 0.0f, 16777215.0f); float min_depth = MathUtil::Clamp(xfmem.viewport.farZ - range, 0.0f, 16777215.0f) / 16777216.0f; float max_depth = MathUtil::Clamp(xfmem.viewport.farZ, 0.0f, 16777215.0f) / 16777216.0f; diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index f49e501ff0..f1a0a50897 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -1122,7 +1122,7 @@ void Renderer::SetViewport() (float)scissorYOff); float Width = EFBToScaledXf(2.0f * xfmem.viewport.wd); float Height = EFBToScaledYf(-2.0f * xfmem.viewport.ht); - float range = MathUtil::Clamp(xfmem.viewport.zRange, -16777216.0f, 16777216.0f); + float range = MathUtil::Clamp(xfmem.viewport.zRange, -16777215.0f, 16777215.0f); float min_depth = MathUtil::Clamp(xfmem.viewport.farZ - range, 0.0f, 16777215.0f) / 16777216.0f; float max_depth = MathUtil::Clamp(xfmem.viewport.farZ, 0.0f, 16777215.0f) / 16777216.0f; diff --git a/Source/Core/VideoBackends/Vulkan/Renderer.cpp b/Source/Core/VideoBackends/Vulkan/Renderer.cpp index 43d3f5e280..1407a4fbec 100644 --- a/Source/Core/VideoBackends/Vulkan/Renderer.cpp +++ b/Source/Core/VideoBackends/Vulkan/Renderer.cpp @@ -1635,7 +1635,7 @@ void Renderer::SetViewport() float y = Renderer::EFBToScaledYf(xfmem.viewport.yOrig + xfmem.viewport.ht - scissor_y_offset); float width = Renderer::EFBToScaledXf(2.0f * xfmem.viewport.wd); float height = Renderer::EFBToScaledYf(-2.0f * xfmem.viewport.ht); - float range = MathUtil::Clamp(xfmem.viewport.zRange, -16777216.0f, 16777216.0f); + float range = MathUtil::Clamp(xfmem.viewport.zRange, -16777215.0f, 16777215.0f); float min_depth = MathUtil::Clamp(xfmem.viewport.farZ - range, 0.0f, 16777215.0f) / 16777216.0f; float max_depth = MathUtil::Clamp(xfmem.viewport.farZ, 0.0f, 16777215.0f) / 16777216.0f;