v3d: Add missing reference to the separate stencil buffer.
authorEric Anholt <eric@anholt.net>
Tue, 19 Jun 2018 22:48:15 +0000 (15:48 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 20 Jun 2018 16:30:46 +0000 (09:30 -0700)
Noticed while debugging a missing flush of rendering in the z32f_s8 case.

src/gallium/drivers/v3d/v3dx_draw.c

index eb3afaa026d38f307dcc66392d414864243e9c9c..1cf4d803f68e3d3238bc7bc47f0813334a90c177 100644 (file)
@@ -563,21 +563,23 @@ v3d_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
         for (int i = 0; i < v3d->streamout.num_targets; i++)
                 v3d->streamout.offsets[i] += info->count;
 
-        if (v3d->zsa && job->zsbuf &&
-            (v3d->zsa->base.depth.enabled ||
-             v3d->zsa->base.stencil[0].enabled)) {
+        if (v3d->zsa && job->zsbuf && v3d->zsa->base.depth.enabled) {
                 struct v3d_resource *rsc = v3d_resource(job->zsbuf->texture);
                 v3d_job_add_bo(job, rsc->bo);
 
-                if (v3d->zsa->base.depth.enabled) {
-                        job->resolve |= PIPE_CLEAR_DEPTH;
-                        rsc->initialized_buffers = PIPE_CLEAR_DEPTH;
-                }
+                job->resolve |= PIPE_CLEAR_DEPTH;
+                rsc->initialized_buffers = PIPE_CLEAR_DEPTH;
+        }
 
-                if (v3d->zsa->base.stencil[0].enabled) {
-                        job->resolve |= PIPE_CLEAR_STENCIL;
-                        rsc->initialized_buffers |= PIPE_CLEAR_STENCIL;
-                }
+        if (v3d->zsa && job->zsbuf && v3d->zsa->base.stencil[0].enabled) {
+                struct v3d_resource *rsc = v3d_resource(job->zsbuf->texture);
+                if (rsc->separate_stencil)
+                        rsc = rsc->separate_stencil;
+
+                v3d_job_add_bo(job, rsc->bo);
+
+                job->resolve |= PIPE_CLEAR_STENCIL;
+                rsc->initialized_buffers |= PIPE_CLEAR_STENCIL;
         }
 
         for (int i = 0; i < VC5_MAX_DRAW_BUFFERS; i++) {