[Mesa-dev] [PATCH 09/16] swr/rast: fix early z / query interaction
Tim Rowley
timothy.o.rowley at intel.com
Thu Jun 15 18:37:10 UTC 2017
For certain cases, we perform early z for optimization. The GL_SAMPLES_PASSED
query was providing erroneous results because we were counting the number
of samples passed before the fragment shader, which did not work if the
fragment shader contained a discard.
Account properly for discard and early z, by anding the zpass mask with
the post fragment shader active mask, after the fragment shader.
Fixes the following piglit tests:
- occlusion-query-discard
- occlusion_query_meta_fragments
---
src/gallium/drivers/swr/rasterizer/core/backend.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/gallium/drivers/swr/rasterizer/core/backend.cpp b/src/gallium/drivers/swr/rasterizer/core/backend.cpp
index 16698ef..ca9a8b4 100644
--- a/src/gallium/drivers/swr/rasterizer/core/backend.cpp
+++ b/src/gallium/drivers/swr/rasterizer/core/backend.cpp
@@ -593,6 +593,10 @@ void BackendSingleSample(DRAW_CONTEXT *pDC, uint32_t workerId, uint32_t x, uint3
pDepthBuffer, depthPassMask, vCoverageMask, pStencilBuffer, stencilPassMask);
goto Endtile;
}
+ } else {
+ // for early z, consolidate discards from shader
+ // into depthPassMask
+ depthPassMask = _simd_and_ps(depthPassMask, vCoverageMask);
}
uint32_t statMask = _simd_movemask_ps(depthPassMask);
--
2.7.4
More information about the mesa-dev
mailing list