summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJules Blok <jules.blok@gmail.com>2015-05-16 21:25:52 +0200
committerJules Blok <jules.blok@gmail.com>2015-05-18 23:22:28 +0200
commitef789410429d0fc20a68fd8f7aca0ecc42695bf6 (patch)
tree45ee30ba01e5e56d29d04dea9423b0e91f666634
parent7e6ec5fa869a9d62699639f6775ccccbd52b3c2a (diff)
VideoBackends: Clamp depth to uint24 range.
-rw-r--r--Source/Core/VideoBackends/D3D/Render.cpp4
-rw-r--r--Source/Core/VideoBackends/OGL/Render.cpp4
-rw-r--r--Source/Core/VideoBackends/Software/Rasterizer.cpp4
-rw-r--r--Source/Core/VideoCommon/PixelShaderManager.cpp4
4 files changed, 7 insertions, 9 deletions
diff --git a/Source/Core/VideoBackends/D3D/Render.cpp b/Source/Core/VideoBackends/D3D/Render.cpp
index f11749d868..db841e5dd0 100644
--- a/Source/Core/VideoBackends/D3D/Render.cpp
+++ b/Source/Core/VideoBackends/D3D/Render.cpp
@@ -523,8 +523,8 @@ void Renderer::SetViewport()
Ht = (Y + Ht <= GetTargetHeight()) ? Ht : (GetTargetHeight() - Y);
D3D11_VIEWPORT vp = CD3D11_VIEWPORT(X, Y, Wd, Ht,
- std::max(0.0f, std::min(1.0f, (xfmem.viewport.farZ - xfmem.viewport.zRange) / 16777216.0f)),
- std::max(0.0f, std::min(1.0f, xfmem.viewport.farZ / 16777216.0f)));
+ MathUtil::Clamp<float>(xfmem.viewport.farZ - xfmem.viewport.zRange, 0.0f, 16777215.0f) / 16777216.0f,
+ MathUtil::Clamp<float>(xfmem.viewport.farZ, 0.0f, 16777215.0f) / 16777216.0f);
D3D::context->RSSetViewports(1, &vp);
}
diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp
index 5fe2711845..1b13595386 100644
--- a/Source/Core/VideoBackends/OGL/Render.cpp
+++ b/Source/Core/VideoBackends/OGL/Render.cpp
@@ -1217,8 +1217,8 @@ void Renderer::SetViewport()
float Y = EFBToScaledYf((float)EFB_HEIGHT - xfmem.viewport.yOrig + xfmem.viewport.ht + (float)scissorYOff);
float Width = EFBToScaledXf(2.0f * xfmem.viewport.wd);
float Height = EFBToScaledYf(-2.0f * xfmem.viewport.ht);
- float GLNear = (xfmem.viewport.farZ - xfmem.viewport.zRange) / 16777216.0f;
- float GLFar = xfmem.viewport.farZ / 16777216.0f;
+ float GLNear = MathUtil::Clamp<float>(xfmem.viewport.farZ - xfmem.viewport.zRange, 0.0f, 16777215.0f) / 16777216.0f;
+ float GLFar = MathUtil::Clamp<float>(xfmem.viewport.farZ, 0.0f, 16777215.0f) / 16777216.0f;
if (Width < 0)
{
X += Width;
diff --git a/Source/Core/VideoBackends/Software/Rasterizer.cpp b/Source/Core/VideoBackends/Software/Rasterizer.cpp
index c03062134b..b7877dcaaa 100644
--- a/Source/Core/VideoBackends/Software/Rasterizer.cpp
+++ b/Source/Core/VideoBackends/Software/Rasterizer.cpp
@@ -127,9 +127,7 @@ inline void Draw(s32 x, s32 y, s32 xi, s32 yi)
float dx = vertexOffsetX + (float)(x - vertex0X);
float dy = vertexOffsetY + (float)(y - vertex0Y);
- s32 z = (s32)ZSlope.GetValue(dx, dy);
- if (z < 0 || z > 0x00ffffff)
- return;
+ s32 z = (s32)MathUtil::Clamp<float>(ZSlope.GetValue(dx, dy), 0.0f, 16777215.0f);
if (!BoundingBox::active && bpmem.UseEarlyDepthTest() && g_SWVideoConfig.bZComploc)
{
diff --git a/Source/Core/VideoCommon/PixelShaderManager.cpp b/Source/Core/VideoCommon/PixelShaderManager.cpp
index 77d92d0156..ac9728b7cd 100644
--- a/Source/Core/VideoCommon/PixelShaderManager.cpp
+++ b/Source/Core/VideoCommon/PixelShaderManager.cpp
@@ -96,8 +96,8 @@ void PixelShaderManager::SetConstants()
if (s_bViewPortChanged)
{
- constants.zbias[1][0] = static_cast<u32>(xfmem.viewport.farZ);
- constants.zbias[1][1] = static_cast<u32>(xfmem.viewport.zRange);
+ constants.zbias[1][0] = MathUtil::Clamp<u32>((u32)xfmem.viewport.farZ, 0, 0xFFFFFF);
+ constants.zbias[1][1] = MathUtil::Clamp<u32>((u32)xfmem.viewport.zRange, 0, 0xFFFFFF);
dirty = true;
s_bViewPortChanged = false;
}