Mesa (master): r600g: fix streamout cache flush for r600

Marek Olšák mareko at kemper.freedesktop.org
Mon Feb 27 15:26:28 UTC 2012


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Sun Feb 26 17:07:52 2012 +0100

r600g: fix streamout cache flush for r600

Figured out by trial and error.

---

 src/gallium/drivers/r600/r600_hw_context.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_hw_context.c b/src/gallium/drivers/r600/r600_hw_context.c
index 8c2e183..d0ef25f 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -1915,13 +1915,21 @@ void r600_context_streamout_end(struct r600_context *ctx)
 		r600_set_streamout_enable(ctx, 0);
 	}
 
-	if (ctx->chip_class < R700) {
+	/* This is needed to fix cache flushes on r600. */
+	if (ctx->chip_class == R600) {
+		if (ctx->family == CHIP_RV670 ||
+		    ctx->family == CHIP_RS780 ||
+		    ctx->family == CHIP_RS880) {
+			flush_flags |= S_0085F0_DEST_BASE_0_ENA(1);
+		}
+
 		r600_atom_dirty(ctx, &ctx->atom_r6xx_flush_and_inv);
-	} else {
-		ctx->atom_surface_sync.flush_flags |= flush_flags;
-		r600_atom_dirty(ctx, &ctx->atom_surface_sync.atom);
 	}
 
+	/* Flush streamout caches. */
+	ctx->atom_surface_sync.flush_flags |= flush_flags;
+	r600_atom_dirty(ctx, &ctx->atom_surface_sync.atom);
+
 	ctx->num_cs_dw_streamout_end = 0;
 
 #if 0




More information about the mesa-commit mailing list