From: Rob Clark Date: Mon, 4 Dec 2017 16:01:52 +0000 (-0500) Subject: freedreno: mark stencil buffer valid too in case of z32x24s8 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1ec1ae47f73cc948e05c1a49d55b90887d1fe15b;p=mesa.git freedreno: mark stencil buffer valid too in case of z32x24s8 The separate stencil buffer was not also getting marked as valid if written by a draw/clear, resulting in gmem2mem getting skipped. Move this into fd_batch_resource_used() which also handles the separate stencil case. Also fix restore_buffers typo. Fixes: 4ab6ab80365 freedreno: avoid mem2gmem for invalidated buffers Signed-off-by: Rob Clark --- diff --git a/src/gallium/drivers/freedreno/freedreno_batch.c b/src/gallium/drivers/freedreno/freedreno_batch.c index 9c66dc98bc7..6e208d350ea 100644 --- a/src/gallium/drivers/freedreno/freedreno_batch.c +++ b/src/gallium/drivers/freedreno/freedreno_batch.c @@ -382,6 +382,9 @@ fd_batch_resource_used(struct fd_batch *batch, struct fd_resource *rsc, bool wri DBG("%p: %s %p", batch, write ? "write" : "read", rsc); + if (write) + rsc->valid = true; + /* note, invalidate write batch, to avoid further writes to rsc * resulting in a write-after-read hazard. */ diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c index fc24776e4a9..d3bf3165276 100644 --- a/src/gallium/drivers/freedreno/freedreno_draw.c +++ b/src/gallium/drivers/freedreno/freedreno_draw.c @@ -55,7 +55,6 @@ resource_written(struct fd_batch *batch, struct pipe_resource *prsc) { if (!prsc) return; - fd_resource(prsc)->valid = true; fd_batch_resource_used(batch, fd_resource(prsc), true); } @@ -147,7 +146,7 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info) if (fd_stencil_enabled(ctx)) { if (fd_resource(pfb->zsbuf->texture)->valid) - restore_buffers |= FD_BUFFER_DEPTH; + restore_buffers |= FD_BUFFER_STENCIL; buffers |= FD_BUFFER_STENCIL; resource_written(batch, pfb->zsbuf->texture); batch->gmem_reason |= FD_GMEM_STENCIL_ENABLED;