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?
{