diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index facd03d1..1ab628fb 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -5624,12 +5624,16 @@ namespace dxvk { // Originally we did this only for powers of two // resolutions but since NEAREST filtering fixed to // truncate, we need to do this all the time now. - float cf = 0.5f - (1.0f / 128.0f); + constexpr float cf = 0.5f - (1.0f / 128.0f); + + // How much to bias MinZ by to avoid a depth + // degenerate viewport. + constexpr float zBias = 0.001f; viewport = VkViewport{ float(vp.X) + cf, float(vp.Height + vp.Y) + cf, float(vp.Width), -float(vp.Height), - vp.MinZ, vp.MaxZ, + vp.MinZ, std::max(vp.MaxZ, vp.MinZ + zBias), }; // Scissor rectangles. Vulkan does not provide an easy way