summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/r600/drm/r600_priv.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/winsys/r600/drm/r600_priv.h')
-rw-r--r--src/gallium/winsys/r600/drm/r600_priv.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/gallium/winsys/r600/drm/r600_priv.h b/src/gallium/winsys/r600/drm/r600_priv.h
index 92b2eb1dff..25a65c6a10 100644
--- a/src/gallium/winsys/r600/drm/r600_priv.h
+++ b/src/gallium/winsys/r600/drm/r600_priv.h
@@ -54,4 +54,25 @@ struct r600_reg {
/* radeon_pciid.c */
unsigned radeon_family_from_device(unsigned device);
+
+static void inline r600_context_reg(struct r600_context *ctx, unsigned group_id,
+ unsigned offset, unsigned value,
+ unsigned mask)
+{
+ struct r600_group *group = &ctx->groups[group_id];
+ struct r600_group_block *block;
+ unsigned id;
+
+ id = group->offset_block_id[(offset - group->start_offset) >> 2];
+ block = &group->blocks[id];
+ id = (offset - block->start_offset) >> 2;
+ block->pm4[id] &= ~mask;
+ block->pm4[id] |= value;
+ if (!(block->status & R600_BLOCK_STATUS_DIRTY)) {
+ ctx->pm4_dirty_cdwords += 2 + block->pm4_ndwords;
+ }
+ block->status |= R600_BLOCK_STATUS_ENABLED;
+ block->status |= R600_BLOCK_STATUS_DIRTY;
+}
+
#endif