r600g: avoid recursion in rv670 flush workaround
authorAlex Deucher <alexdeucher@gmail.com>
Fri, 6 May 2011 17:18:00 +0000 (13:18 -0400)
committerAlex Deucher <alexdeucher@gmail.com>
Fri, 6 May 2011 17:19:21 +0000 (13:19 -0400)
Should fix:
https://bugs.freedesktop.org/show_bug.cgi?id=36914

Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
src/gallium/winsys/r600/drm/r600_hw_context.c

index 24538825273b2bca962006cde987d908bea8917d..0514bbeaba3b088d7af45c7afc5e37b00dd79ec1 100644 (file)
@@ -810,8 +810,13 @@ void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
             G_0085F0_DB_ACTION_ENA(flush_flags))) {
                if (ctx->flags & R600_CONTEXT_CHECK_EVENT_FLUSH) {
                        /* the rv670 seems to fail fbo-generatemipmap unless we flush the CB1 dest base ena */
-                       if (ctx->radeon->family == CHIP_RV670)
-                               r600_context_flush_all(ctx, S_0085F0_CB1_DEST_BASE_ENA(1));
+                       if (ctx->radeon->family == CHIP_RV670) {
+                               ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, ctx->predicate_drawing);
+                               ctx->pm4[ctx->pm4_cdwords++] = S_0085F0_CB1_DEST_BASE_ENA(1);     /* CP_COHER_CNTL */
+                               ctx->pm4[ctx->pm4_cdwords++] = 0xffffffff;      /* CP_COHER_SIZE */
+                               ctx->pm4[ctx->pm4_cdwords++] = 0;               /* CP_COHER_BASE */
+                               ctx->pm4[ctx->pm4_cdwords++] = 0x0000000A;      /* POLL_INTERVAL */
+                       }
 
                        ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_EVENT_WRITE, 0, ctx->predicate_drawing);
                        ctx->pm4[ctx->pm4_cdwords++] = EVENT_TYPE(EVENT_TYPE_CACHE_FLUSH_AND_INV_EVENT) | EVENT_INDEX(0);