diff options
| author | Jules Blok <jules.blok@gmail.com> | 2015-05-16 21:25:52 +0200 |
|---|---|---|
| committer | Jules Blok <jules.blok@gmail.com> | 2015-05-18 23:22:28 +0200 |
| commit | ef789410429d0fc20a68fd8f7aca0ecc42695bf6 (patch) | |
| tree | 45ee30ba01e5e56d29d04dea9423b0e91f666634 /Source/Core/VideoBackends | |
| parent | 7e6ec5fa869a9d62699639f6775ccccbd52b3c2a (diff) | |
VideoBackends: Clamp depth to uint24 range.
Diffstat (limited to 'Source/Core/VideoBackends')
| -rw-r--r-- | Source/Core/VideoBackends/D3D/Render.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/Render.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/Rasterizer.cpp | 4 |
3 files changed, 5 insertions, 7 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) { |
