r600g: only add blocks once to the dirty/enabled lists.
authorDave Airlie <airlied@redhat.com>
Wed, 8 Jun 2011 04:02:00 +0000 (14:02 +1000)
committerDave Airlie <airlied@redhat.com>
Wed, 8 Jun 2011 04:04:26 +0000 (14:04 +1000)
This caused a loop in some tests.

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

index 50a6dec38ba21a5c89d7f53a53f37f36c4a88eab..42492997df91a51957fd327546ea61c7dc70da7f 100644 (file)
@@ -110,9 +110,11 @@ static void r600_init_block(struct r600_context *ctx,
                        block->flags |= REG_FLAG_DIRTY_ALWAYS;
                }
                if (reg[i+j].flags & REG_FLAG_ENABLE_ALWAYS) {
-                       block->status |= R600_BLOCK_STATUS_ENABLED;
-                       LIST_ADDTAIL(&block->enable_list, &ctx->enable_list);
-                       LIST_ADDTAIL(&block->list,&ctx->dirty);
+                       if (!(block->status & R600_BLOCK_STATUS_ENABLED)) {
+                               block->status |= R600_BLOCK_STATUS_ENABLED;
+                               LIST_ADDTAIL(&block->enable_list, &ctx->enable_list);
+                               LIST_ADDTAIL(&block->list,&ctx->dirty);
+                       }
                }
 
                if (reg[i+j].flags & REG_FLAG_NEED_BO) {