summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/swr
diff options
context:
space:
mode:
authorTim Rowley <[email protected]>2017-06-07 13:32:11 -0500
committerTim Rowley <[email protected]>2017-06-16 16:20:16 -0500
commit3695c8ec1e9dc5d5a9bd834aad5d3dad0a22b01a (patch)
tree690df8c322f3d0b534578824d114b883e2e8aba2 /src/gallium/drivers/swr
parentb7eb86c617ee8f73b552dc64a6d776d26672c38f (diff)
swr/rast: Fix early z / query interaction
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 Reviewed-by: Bruce Cherniak <[email protected]>
Diffstat (limited to 'src/gallium/drivers/swr')
-rw-r--r--src/gallium/drivers/swr/rasterizer/core/backend.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/gallium/drivers/swr/rasterizer/core/backend.cpp b/src/gallium/drivers/swr/rasterizer/core/backend.cpp
index 16698ef08f9..ca9a8b40449 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);