summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2018-03-30 16:39:14 -0700
committerEric Anholt <eric@anholt.net>2018-04-12 11:20:50 -0700
commitec60559f97dc13d85fb197e2dd99827e12fff371 (patch)
tree8eb593c6352f47e78c91940ec2171d9bc1c6ddf2
parent8f2999120de83845b1c0098170356819c5a6e439 (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.c21
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) {