summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2014-12-29 13:27:46 +0100
committerMarek Olšák <[email protected]>2015-01-07 12:06:43 +0100
commitd14f2ab4ad34536d46d0033117a859c53db0c976 (patch)
treefbc8583a35b6d07af8aa6d5b86ecddd1f6309b3a /src/gallium
parent0543630d0b0d9d9f6eefbc14fbd3385d4de37ba0 (diff)
r600g: move r6xx-specific streamout flush flagging into r600g
Reviewed-by: Michel Dänzer <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/r600/r600_hw_context.c9
-rw-r--r--src/gallium/drivers/radeon/r600_streamout.c7
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 b6fa3b0ada0..ccc5a8b2946 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 e2413c250ea..c44f0f2171d 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