r600g: further r6xx cache flush fixes
authorAlex Deucher <alexdeucher@gmail.com>
Thu, 5 May 2011 22:45:55 +0000 (18:45 -0400)
committerAlex Deucher <alexdeucher@gmail.com>
Thu, 5 May 2011 22:45:55 +0000 (18:45 -0400)
Don't emit sync packets for additional CBs or DB.
Spotted by Fredrik Höglund.

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

index ff99143485b4e8230596a8f5cf768a3ead9870b9..24538825273b2bca962006cde987d908bea8917d 100644 (file)
@@ -797,7 +797,6 @@ void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
                                unsigned flush_mask, struct r600_bo *rbo)
 {
        struct radeon_bo *bo;
-       boolean use_event_flush = FALSE;
 
        bo = rbo->bo;
        /* if bo has already been flushed */
@@ -808,17 +807,16 @@ void r600_context_bo_flush(struct r600_context *ctx, unsigned flush_flags,
 
        if ((ctx->radeon->family < CHIP_RV770) &&
            (G_0085F0_CB_ACTION_ENA(flush_flags) ||
-            G_0085F0_DB_ACTION_ENA(flush_flags)))
-               use_event_flush = TRUE;
-
-       if (use_event_flush && (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));
-
-               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);
-               ctx->flags &= ~R600_CONTEXT_CHECK_EVENT_FLUSH;
+            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));
+
+                       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);
+                       ctx->flags &= ~R600_CONTEXT_CHECK_EVENT_FLUSH;
+               }
        } else {
                ctx->pm4[ctx->pm4_cdwords++] = PKT3(PKT3_SURFACE_SYNC, 3, ctx->predicate_drawing);
                ctx->pm4[ctx->pm4_cdwords++] = flush_flags;