On Tue, Dec 3, 2013 at 9:33 PM, Andreas Hartmetz <ahartm...@gmail.com> wrote: > --- > src/gallium/drivers/radeonsi/si_state.c | 28 +++++++++++++++++++++++++++- > 1 file changed, 27 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/drivers/radeonsi/si_state.c > b/src/gallium/drivers/radeonsi/si_state.c > index 24c9cf3..7b1a6df 100644 > --- a/src/gallium/drivers/radeonsi/si_state.c > +++ b/src/gallium/drivers/radeonsi/si_state.c > @@ -757,7 +757,19 @@ static void *si_create_dsa_state(struct pipe_context > *ctx, > db_depth_control |= S_028800_Z_ENABLE(state->depth.enabled) | > S_028800_Z_WRITE_ENABLE(state->depth.writemask) | > S_028800_ZFUNC(state->depth.func); > - db_render_override |= > S_02800C_FORCE_HIZ_ENABLE(V_02800C_FORCE_DISABLE); > + > + struct r600_context *rctx = (struct r600_context *)ctx; > + struct pipe_surface *surf = rctx->framebuffer.zsbuf; > + struct r600_texture *rtex = 0; > + if (surf) { > + rtex = (struct r600_texture*)surf->texture; > + } > + if (rtex && rtex->htile_buffer) { > + /* Force off means no force, DB_SHADER_CONTROL decides */ > + db_render_override |= > S_02800C_FORCE_HIZ_ENABLE(V_02800C_FORCE_OFF); > + } else { > + db_render_override |= > S_02800C_FORCE_HIZ_ENABLE(V_02800C_FORCE_DISABLE); > + }
This won't work. create_dsa_state is called only once when that state object is created. The other states may get changed before the state object is used. You shouldn't use mutable variables of pipe_context and r600_context in any of the create functions. DB_RENDER_OVERRIDE should probably be set by set_framebuffer_state. Marek _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev