[Mesa-dev] [PATCH 01/13] r600g: move r6xx-specific streamout flush flagging into r600g

Marek Olšák maraeo at gmail.com
Mon Jan 5 12:20:51 PST 2015


From: Marek Olšák <marek.olsak at amd.com>

---
 src/gallium/drivers/r600/r600_hw_context.c  | 9 ++++++---
 src/gallium/drivers/radeon/r600_streamout.c | 7 +------
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_hw_context.c b/src/gallium/drivers/r600/r600_hw_context.c
index b6fa3b0..ccc5a8b 100644
--- a/src/gallium/drivers/r600/r600_hw_context.c
+++ b/src/gallium/drivers/r600/r600_hw_context.c
@@ -147,7 +147,8 @@ void r600_flush_emit(struct r600_context *rctx)
 		cp_coher_cntl |= S_0085F0_FULL_CACHE_ENA(1);
 	}
 
-	if (rctx->b.flags & R600_CONTEXT_FLUSH_AND_INV) {
+	if (rctx->b.flags & R600_CONTEXT_FLUSH_AND_INV ||
+	    (rctx->b.chip_class == R600 && rctx->b.flags & R600_CONTEXT_STREAMOUT_FLUSH)) {
 		cs->buf[cs->cdw++] = PKT3(PKT3_EVENT_WRITE, 0, 0);
 		cs->buf[cs->cdw++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT) | EVENT_INDEX(0);
 	}
@@ -202,7 +203,8 @@ void r600_flush_emit(struct r600_context *rctx)
 					S_0085F0_CB11_DEST_BASE_ENA(1);
 	}
 
-	if (rctx->b.flags & R600_CONTEXT_STREAMOUT_FLUSH) {
+	if (rctx->b.chip_class >= R700 &&
+	    rctx->b.flags & R600_CONTEXT_STREAMOUT_FLUSH) {
 		cp_coher_cntl |= S_0085F0_SO0_DEST_BASE_ENA(1) |
 				S_0085F0_SO1_DEST_BASE_ENA(1) |
 				S_0085F0_SO2_DEST_BASE_ENA(1) |
@@ -211,7 +213,8 @@ void r600_flush_emit(struct r600_context *rctx)
 	}
 
 	/* Workaround for buggy flushing on some R6xx chipsets. */
-	if (rctx->b.flags & R600_CONTEXT_FLUSH_AND_INV &&
+	if ((rctx->b.flags & (R600_CONTEXT_FLUSH_AND_INV |
+			      R600_CONTEXT_STREAMOUT_FLUSH)) &&
 	    (rctx->b.family == CHIP_RV670 ||
 	     rctx->b.family == CHIP_RS780 ||
 	     rctx->b.family == CHIP_RS880)) {
diff --git a/src/gallium/drivers/radeon/r600_streamout.c b/src/gallium/drivers/radeon/r600_streamout.c
index e2413c2..c44f0f2 100644
--- a/src/gallium/drivers/radeon/r600_streamout.c
+++ b/src/gallium/drivers/radeon/r600_streamout.c
@@ -305,12 +305,7 @@ void r600_emit_streamout_end(struct r600_common_context *rctx)
 	}
 
 	rctx->streamout.begin_emitted = false;
-
-	if (rctx->chip_class >= R700) {
-		rctx->flags |= R600_CONTEXT_STREAMOUT_FLUSH;
-	} else {
-		rctx->flags |= R600_CONTEXT_FLUSH_AND_INV;
-	}
+	rctx->flags |= R600_CONTEXT_STREAMOUT_FLUSH;
 }
 
 /* STREAMOUT CONFIG DERIVED STATE
-- 
2.1.0



More information about the mesa-dev mailing list