summaryrefslogtreecommitdiff
path: root/src/gallium
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/r300/r300_state_derived.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/gallium/drivers/r300/r300_state_derived.c b/src/gallium/drivers/r300/r300_state_derived.c
index e82aa07a62..4396978fd1 100644
--- a/src/gallium/drivers/r300/r300_state_derived.c
+++ b/src/gallium/drivers/r300/r300_state_derived.c
@@ -510,7 +510,6 @@ static void r300_update_ztop(struct r300_context* r300)
{
struct r300_ztop_state* ztop_state =
(struct r300_ztop_state*)r300->ztop_state.state;
- uint32_t ztop = ztop_state->z_buffer_top;
/* This is important enough that I felt it warranted a comment.
*
@@ -532,6 +531,10 @@ static void r300_update_ztop(struct r300_context* r300)
* 5) Depth writes in fragment shader
* 6) Outstanding occlusion queries
*
+ * This register causes stalls all the way from SC to CB when changed,
+ * but it is buffered on-chip so it does not hurt to write it if it has
+ * not changed.
+ *
* ~C.
*/
@@ -539,19 +542,16 @@ static void r300_update_ztop(struct r300_context* r300)
if (r300_dsa_writes_depth_stencil(r300->dsa_state.state) &&
(r300_dsa_alpha_test_enabled(r300->dsa_state.state) ||/* (1) */
r300->fs->info.uses_kill)) { /* (2) */
- ztop = R300_ZTOP_DISABLE;
+ ztop_state->z_buffer_top = R300_ZTOP_DISABLE;
} else if (r300_fragment_shader_writes_depth(r300->fs)) { /* (5) */
- ztop = R300_ZTOP_DISABLE;
+ ztop_state->z_buffer_top = R300_ZTOP_DISABLE;
} else if (r300->query_current) { /* (6) */
- ztop = R300_ZTOP_DISABLE;
+ ztop_state->z_buffer_top = R300_ZTOP_DISABLE;
} else {
- ztop = R300_ZTOP_ENABLE;
+ ztop_state->z_buffer_top = R300_ZTOP_ENABLE;
}
- if (ztop_state->z_buffer_top != ztop) {
- ztop_state->z_buffer_top = ztop;
- r300->ztop_state.dirty = TRUE;
- }
+ r300->ztop_state.dirty = TRUE;
}
void r300_update_derived_state(struct r300_context* r300)