Mesa (master): r600g: further r6xx cache flush fixes

Alex Deucher agd5f at kemper.freedesktop.org
Thu May 5 22:47:33 UTC 2011


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

Author: Alex Deucher <alexdeucher at gmail.com>
Date:   Thu May  5 18:45:55 2011 -0400

r600g: further r6xx cache flush fixes

Don't emit sync packets for additional CBs or DB.
Spotted by Fredrik Höglund.

Signed-off-by: Alex Deucher <alexdeucher at gmail.com>

---

 src/gallium/winsys/r600/drm/r600_hw_context.c |   22 ++++++++++------------
 1 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c b/src/gallium/winsys/r600/drm/r600_hw_context.c
index ff99143..2453882 100644
--- a/src/gallium/winsys/r600/drm/r600_hw_context.c
+++ b/src/gallium/winsys/r600/drm/r600_hw_context.c
@@ -797,7 +797,6 @@ void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
 				unsigned flush_mask, struct r600_bo *rbo)
 {
 	struct radeon_bo *bo;
-	boolean use_event_flush = FALSE;
 
 	bo = rbo->bo;
 	/* if bo has already been flushed */
@@ -808,17 +807,16 @@ void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
 
 	if ((ctx->radeon->family < CHIP_RV770) &&
 	    (G_0085F0_CB_ACTION_ENA(flush_flags) ||
-	     G_0085F0_DB_ACTION_ENA(flush_flags)))
-		use_event_flush = TRUE;
-
-	if (use_event_flush && (ctx->flags & R600_CONTEXT_CHECK_EVENT_FLUSH)) {
-		/* the rv670 seems to fail fbo-generatemipmap unless we flush the CB1 dest base ena */
-		if (ctx->radeon->family == CHIP_RV670)
-			r600_context_flush_all(ctx, S_0085F0_CB1_DEST_BASE_ENA(1));
-
-		ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, ctx->predicate_drawing);
-		ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT) | EVENT_INDEX(0);
-		ctx->flags &= ~R600_CONTEXT_CHECK_EVENT_FLUSH;
+	     G_0085F0_DB_ACTION_ENA(flush_flags))) {
+		if (ctx->flags & R600_CONTEXT_CHECK_EVENT_FLUSH) {
+			/* the rv670 seems to fail fbo-generatemipmap unless we flush the CB1 dest base ena */
+			if (ctx->radeon->family == CHIP_RV670)
+				r600_context_flush_all(ctx, S_0085F0_CB1_DEST_BASE_ENA(1));
+
+			ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, ctx->predicate_drawing);
+			ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT) | EVENT_INDEX(0);
+			ctx->flags &= ~R600_CONTEXT_CHECK_EVENT_FLUSH;
+		}
 	} else {
 		ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, ctx->predicate_drawing);
 		ctx->pm4[ctx->pm4_cdwords++] = flush_flags;




More information about the mesa-commit mailing list