Don't perform very early depth test when overridden by shader. When the pixel shader writes the depth value, we can't use the interpolated implicit depth to perform a depth buffer test before the pixel shader executes. Change-Id: Icf80de50f4aa79f73b43e341c18478e7fd928b8d Reviewed-on: https://swiftshader-review.googlesource.com/15608 Tested-by: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Alexis Hétu <sugoi@google.com> Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Renderer/PixelProcessor.hpp b/src/Renderer/PixelProcessor.hpp index bb0ae7e..f248cd5 100644 --- a/src/Renderer/PixelProcessor.hpp +++ b/src/Renderer/PixelProcessor.hpp
@@ -34,8 +34,8 @@ int shaderID; - bool depthOverride : 1; - bool shaderContainsKill : 1; + bool depthOverride : 1; // FIXME: Eliminate by querying shader. + bool shaderContainsKill : 1; // FIXME: Eliminate by querying shader. DepthCompareMode depthCompareMode : BITS(DEPTH_LAST); AlphaCompareMode alphaCompareMode : BITS(ALPHA_LAST);
diff --git a/src/Renderer/QuadRasterizer.cpp b/src/Renderer/QuadRasterizer.cpp index e54ba73..6b319b4 100644 --- a/src/Renderer/QuadRasterizer.cpp +++ b/src/Renderer/QuadRasterizer.cpp
@@ -159,7 +159,7 @@ } } - if(veryEarlyDepthTest && state.multiSample == 1) + if(veryEarlyDepthTest && state.multiSample == 1 && !state.depthOverride) { if(!state.stencilActive && state.depthTestActive && (state.depthCompareMode == DEPTH_LESSEQUAL || state.depthCompareMode == DEPTH_LESS)) // FIXME: Both modes ok? {