r600g: fix streamout cache flush for r600

Figured out by trial and error.
This commit is contained in:
Marek Olšák 2012-02-26 17:07:52 +01:00
parent 15e60d9976
commit 4c02baade9
1 changed files with 12 additions and 4 deletions

View File

@ -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