-void r600_context_reg(struct r600_context *ctx,
- unsigned offset, unsigned value,
- unsigned mask)
-{
- struct r600_range *range;
- struct r600_block *block;
- unsigned id;
- unsigned new_val;
- int dirty;
-
- range = &ctx->range[CTX_RANGE_ID(offset)];
- block = range->blocks[CTX_BLOCK_ID(offset)];
- id = (offset - block->start_offset) >> 2;
-
- 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;
- }
- if (dirty)
- r600_context_dirty_block(ctx, block, dirty, id);
-}
-