diff options
author | Eric Anholt <[email protected]> | 2018-03-30 16:39:14 -0700 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2018-04-12 11:20:50 -0700 |
commit | ec60559f97dc13d85fb197e2dd99827e12fff371 (patch) | |
tree | 8eb593c6352f47e78c91940ec2171d9bc1c6ddf2 | |
parent | 8f2999120de83845b1c0098170356819c5a6e439 (diff) |
broadcom/vc5: Emit missing TILE_COORDINATES_IMPLICIT in separate z/s stores.
Fixes a simulator assertion failure in
KHR-GLES3.packed_depth_stencil.blit.depth32f_stencil8
-rw-r--r-- | src/gallium/drivers/vc5/vc5_rcl.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/src/gallium/drivers/vc5/vc5_rcl.c b/src/gallium/drivers/vc5/vc5_rcl.c index 83593a86d2e..5ffdfd9ca39 100644 --- a/src/gallium/drivers/vc5/vc5_rcl.c +++ b/src/gallium/drivers/vc5/vc5_rcl.c @@ -291,31 +291,42 @@ vc5_rcl_emit_stores(struct vc5_job *job, struct vc5_cl *cl) if (job->resolve & PIPE_CLEAR_DEPTHSTENCIL && job->zsbuf && !(V3D_VERSION < 40 && job->zsbuf->texture->nr_samples <= 1)) { - stores_pending &= ~PIPE_CLEAR_DEPTHSTENCIL; - struct vc5_resource *rsc = vc5_resource(job->zsbuf->texture); if (rsc->separate_stencil) { if (job->resolve & PIPE_CLEAR_DEPTH) { + stores_pending &= ~PIPE_CLEAR_DEPTH; store_general(job, cl, job->zsbuf, Z, PIPE_CLEAR_DEPTH, !stores_pending, general_color_clear); + if (V3D_VERSION < 40 && stores_pending) { + cl_emit(cl, TILE_COORDINATES_IMPLICIT, + coords); + } } + if (job->resolve & PIPE_CLEAR_STENCIL) { + stores_pending &= ~PIPE_CLEAR_STENCIL; store_general(job, cl, job->zsbuf, STENCIL, PIPE_CLEAR_STENCIL, !stores_pending, general_color_clear); + if (V3D_VERSION < 40 && stores_pending) { + cl_emit(cl, TILE_COORDINATES_IMPLICIT, + coords); + } } } else { + stores_pending &= ~PIPE_CLEAR_DEPTHSTENCIL; store_general(job, cl, job->zsbuf, zs_buffer_from_pipe_bits(job->resolve), job->resolve & PIPE_CLEAR_DEPTHSTENCIL, !stores_pending, general_color_clear); + if (V3D_VERSION < 40 && stores_pending) { + cl_emit(cl, TILE_COORDINATES_IMPLICIT, + coords); + } } - - if (V3D_VERSION < 40 && stores_pending) - cl_emit(cl, TILE_COORDINATES_IMPLICIT, coords); } if (stores_pending) { |