diff -pruN mesa/src/gallium/winsys/r600/drm/evergreen_hw_context.c mesa-fixed/src/gallium/winsys/r600/drm/evergreen_hw_context.c --- mesa/src/gallium/winsys/r600/drm/evergreen_hw_context.c Tue Dec 21 00:40:29 2010 +++ mesa-fixed/src/gallium/winsys/r600/drm/evergreen_hw_context.c Tue Dec 21 19:19:18 2010 @@ -887,6 +887,13 @@ static inline void evergreen_resource_se range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; block = range->blocks[CTX_BLOCK_ID(ctx, offset)]; + if (state == NULL) { + block->status &= ~(R600_BLOCK_STATUS_ENABLED | R600_BLOCK_STATUS_DIRTY); + r600_bo_reference(ctx->radeon, &block->reloc[1].bo, NULL); + r600_bo_reference(ctx->radeon , &block->reloc[2].bo, NULL); + LIST_DELINIT(&block->list); + return; + } block->reg[0] = state->regs[0].value; block->reg[1] = state->regs[1].value; block->reg[2] = state->regs[2].value;