r600g: add rv670 flushing workaround.
authorDave Airlie <airlied@redhat.com>
Thu, 5 May 2011 22:40:08 +0000 (08:40 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 5 May 2011 22:41:13 +0000 (08:41 +1000)
Hopefully we can find out the proper fix for this, but for now
this makes the fbo mipmap tests pass on my rv670 (x2 card).

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/winsys/r600/drm/r600_hw_context.c

index b8a8108fb1228c171b41d93b2c53f31a141f140e..ff99143485b4e8230596a8f5cf768a3ead9870b9 100644 (file)
@@ -812,6 +812,10 @@ void r600_context_bo_flush(struct r600_context *ctx, unsigned 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;