diff options
author | Marek Olšák <[email protected]> | 2009-12-24 14:23:57 +0100 |
---|---|---|
committer | Corbin Simpson <[email protected]> | 2010-01-06 12:49:15 -0800 |
commit | 1a4f242be60237fb1f1acf346b1e641167bc6cee (patch) | |
tree | 5d5e37690dd23aa795bd788dbaf767562454c590 | |
parent | 26f67a272b6668258fe3552a675414502e077dd9 (diff) |
r300g: if no DS buffer is set, disable reading from and writing to it
It fixes another "Bad CS" issue.
-rw-r--r-- | src/gallium/drivers/r300/r300_emit.c | 11 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_state.c | 1 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c index 30a1000c294..f8bfa714fef 100644 --- a/src/gallium/drivers/r300/r300_emit.c +++ b/src/gallium/drivers/r300/r300_emit.c @@ -121,8 +121,15 @@ void r300_emit_dsa_state(struct r300_context* r300, }*/ OUT_CS_REG_SEQ(R300_ZB_CNTL, 3); - OUT_CS(dsa->z_buffer_control); - OUT_CS(dsa->z_stencil_control); + + if (r300->framebuffer_state.zsbuf) { + OUT_CS(dsa->z_buffer_control); + OUT_CS(dsa->z_stencil_control); + } else { + OUT_CS(0); + OUT_CS(0); + } + OUT_CS(dsa->stencil_ref_mask); OUT_CS_REG(R300_ZB_ZTOP, r300->ztop_state.z_buffer_top); diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c index affd0b45910..a145a7f18a5 100644 --- a/src/gallium/drivers/r300/r300_state.c +++ b/src/gallium/drivers/r300/r300_state.c @@ -522,6 +522,7 @@ static void } r300->dirty_state |= R300_NEW_FRAMEBUFFERS; r300->dirty_state |= R300_NEW_BLEND; + r300->dirty_state |= R300_NEW_DSA; } /* Create fragment shader state. */ |