diff options
-rw-r--r-- | 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 8c2e1837ff4..d0ef25f4119 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 |