r600g: fix flushing on RV670, RS780, RS880 again
authorMarek Olšák <marek.olsak@amd.com>
Sat, 19 Apr 2014 21:39:13 +0000 (23:39 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 24 Apr 2014 23:33:12 +0000 (01:33 +0200)
Cc: 10.0 10.1 mesa-stable@lists.freedesktop.org
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
src/gallium/drivers/r600/r600_hw_context.c

index 5ecc73daed1ada9b83b0ccc857312ed1633ebf14..0aa7f45796077a18beec7f7faab3f9fad71874fd 100644 (file)
@@ -210,6 +210,15 @@ void r600_flush_emit(struct r600_context *rctx)
                                S_0085F0_SMX_ACTION_ENA(1);
        }
 
+       /* Workaround for buggy flushing on some R6xx chipsets. */
+       if (rctx->b.flags & R600_CONTEXT_FLUSH_AND_INV &&
+           (rctx->b.family == CHIP_RV670 ||
+            rctx->b.family == CHIP_RS780 ||
+            rctx->b.family == CHIP_RS880)) {
+               cp_coher_cntl |=  S_0085F0_CB1_DEST_BASE_ENA(1) |
+                                 S_0085F0_DEST_BASE_0_ENA(1);
+       }
+
        if (cp_coher_cntl) {
                cs->buf[cs->cdw++] = PKT3(PKT3_SURFACE_SYNC, 3, 0);
                cs->buf[cs->cdw++] = cp_coher_cntl;   /* CP_COHER_CNTL */