diff options
author | Dave Airlie <[email protected]> | 2011-04-19 10:08:18 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2011-04-19 10:12:20 +1000 |
commit | f05adb83f5fed4b406670585ac42c290bf88bc0d (patch) | |
tree | e937e72e2e3ab0e62ec0f13adbf96225b29902d6 /src/gallium/winsys | |
parent | 5b5a16e3203379d7a54d4657df7c1357d14df058 (diff) |
r600g: add dirty tracking to context reg.
just makes the code more consistent.
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium/winsys')
-rw-r--r-- | src/gallium/winsys/r600/drm/r600_hw_context.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/gallium/winsys/r600/drm/r600_hw_context.c b/src/gallium/winsys/r600/drm/r600_hw_context.c index 63258d65c24..403dc241b54 100644 --- a/src/gallium/winsys/r600/drm/r600_hw_context.c +++ b/src/gallium/winsys/r600/drm/r600_hw_context.c @@ -845,18 +845,23 @@ void r600_context_reg(struct r600_context *ctx, struct r600_range *range; struct r600_block *block; unsigned id; + unsigned new_val; + int dirty; range = &ctx->range[CTX_RANGE_ID(ctx, offset)]; block = range->blocks[CTX_BLOCK_ID(ctx, offset)]; id = (offset - block->start_offset) >> 2; - block->reg[id] &= ~mask; - block->reg[id] |= value; - if (!(block->status & R600_BLOCK_STATUS_DIRTY)) { - ctx->pm4_dirty_cdwords += block->pm4_ndwords; - block->status |= R600_BLOCK_STATUS_ENABLED; - block->status |= R600_BLOCK_STATUS_DIRTY; - LIST_ADDTAIL(&block->list,&ctx->dirty); + + dirty = block->status & R600_BLOCK_STATUS_DIRTY; + + new_val = block->reg[id]; + new_val &= ~mask; + new_val |= value; + if (new_val != block->reg[id]) { + dirty |= R600_BLOCK_STATUS_DIRTY; + block->reg[id] = new_val; } + r600_context_dirty_block(ctx, block, dirty, id); } void r600_context_dirty_block(struct r600_context *ctx, struct r600_block *block, |