Mesa (master): freedreno: fix invalidate logic

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jan 29 20:23:23 UTC 2019


Module: Mesa
Branch: master
Commit: bcefa0f1cb99229b6dc241ff50b2c88da1dad950
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bcefa0f1cb99229b6dc241ff50b2c88da1dad950

Author: Jonathan Marek <jonathan at marek.ca>
Date:   Mon Jan 21 11:32:30 2019 -0500

freedreno: fix invalidate logic

Set dirty bits on invalidate to trigger invalidate logic in fd_draw_vbo.

Also, resource_written for color needs to be after the invalidate logic.

Signed-off-by: Jonathan Marek <jonathan at marek.ca>

---

 src/gallium/drivers/freedreno/freedreno_draw.c     | 12 +++---------
 src/gallium/drivers/freedreno/freedreno_resource.c |  8 +++++++-
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c
index 8b4073da47..c35b0d9f4a 100644
--- a/src/gallium/drivers/freedreno/freedreno_draw.c
+++ b/src/gallium/drivers/freedreno/freedreno_draw.c
@@ -165,15 +165,6 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
 		}
 	}
 
-	if (ctx->dirty & FD_DIRTY_FRAMEBUFFER) {
-		for (i = 0; i < pfb->nr_cbufs; i++) {
-			if (!pfb->cbufs[i])
-				continue;
-
-			resource_written(batch, pfb->cbufs[i]->texture);
-		}
-	}
-
 	if (fd_logicop_enabled(ctx))
 		batch->gmem_reason |= FD_GMEM_LOGICOP_ENABLED;
 
@@ -195,6 +186,9 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
 
 		if (fd_blend_enabled(ctx, i))
 			batch->gmem_reason |= FD_GMEM_BLEND_ENABLED;
+
+		if (ctx->dirty & FD_DIRTY_FRAMEBUFFER)
+			resource_written(batch, pfb->cbufs[i]->texture);
 	}
 
 	/* Mark SSBOs as being written.. we don't actually know which ones are
diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c
index 9adc3ce1d1..ce8e4480be 100644
--- a/src/gallium/drivers/freedreno/freedreno_resource.c
+++ b/src/gallium/drivers/freedreno/freedreno_resource.c
@@ -1188,24 +1188,30 @@ fd_blitter_pipe_end(struct fd_context *ctx)
 static void
 fd_invalidate_resource(struct pipe_context *pctx, struct pipe_resource *prsc)
 {
+	struct fd_context *ctx = fd_context(pctx);
 	struct fd_resource *rsc = fd_resource(prsc);
 
 	/*
 	 * TODO I guess we could track that the resource is invalidated and
 	 * use that as a hint to realloc rather than stall in _transfer_map(),
 	 * even in the non-DISCARD_WHOLE_RESOURCE case?
+	 *
+	 * Note: we set dirty bits to trigger invalidate logic fd_draw_vbo
 	 */
 
 	if (rsc->write_batch) {
 		struct fd_batch *batch = rsc->write_batch;
 		struct pipe_framebuffer_state *pfb = &batch->framebuffer;
 
-		if (pfb->zsbuf && pfb->zsbuf->texture == prsc)
+		if (pfb->zsbuf && pfb->zsbuf->texture == prsc) {
 			batch->resolve &= ~(FD_BUFFER_DEPTH | FD_BUFFER_STENCIL);
+			ctx->dirty |= FD_DIRTY_ZSA;
+		}
 
 		for (unsigned i = 0; i < pfb->nr_cbufs; i++) {
 			if (pfb->cbufs[i] && pfb->cbufs[i]->texture == prsc) {
 				batch->resolve &= ~(PIPE_CLEAR_COLOR0 << i);
+				ctx->dirty |= FD_DIRTY_FRAMEBUFFER;
 			}
 		}
 	}




More information about the mesa-commit mailing list