From: Marek Olšák Date: Mon, 29 Dec 2014 12:27:46 +0000 (+0100) Subject: r600g: move r6xx-specific streamout flush flagging into r600g X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d14f2ab4ad34536d46d0033117a859c53db0c976;p=mesa.git r600g: move r6xx-specific streamout flush flagging into r600g Reviewed-by: Michel Dänzer --- 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