summaryrefslogtreecommitdiff
path: root/src/gallium/winsys/r600/drm/r600_priv.h
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2010-09-26 12:06:46 -0400
committerJerome Glisse <jglisse@redhat.com>2010-09-26 12:06:46 -0400
commita852615946b98de2d832d4907f09649803577db7 (patch)
tree2d5def85d8c6c573d9f839cbf28673e24783fb7a /src/gallium/winsys/r600/drm/r600_priv.h
parent6f16e497af9bf5938541d2088e91cc79f1641a19 (diff)
r600g: disable early cull optimization when occlusion query running
When occlusion query are running we want to have accurate fragment count thus disable any early culling optimization GPU has. Based on work from Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Signed-off-by: Jerome Glisse <jglisse@redhat.com>
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