This is a pretty ugly hack. It won't work if a depth texture is set in a fragment shader and a non-depth texture is later set in a vertex shader. That will cause have_depth_texture to be false.
The proper solution is to port the depth-texture tracking from r600g, well, ideally the whole r600_textures_info structure and all code which uses it. The structure tracks all sampler views and states for each shader stage. For example: // set that the i-th vertex texture is depth: rctx->samplers[PIPE_SHADER_VERTEX].views.compressed_depthtex_mask |= 1 << i; The decompression code then knows it should decompress the i-th vertex texture. Forking r600g was obviously a bad idea, because now radeonsi is just as horrible as r600g used to be. Marek On Wed, Jan 16, 2013 at 11:55 AM, Michel Dänzer <mic...@daenzer.net> wrote: > From: Michel Dänzer <michel.daen...@amd.com> > > 20-odd more piglits. > > Signed-off-by: Michel Dänzer <michel.daen...@amd.com> > --- > src/gallium/drivers/radeonsi/si_state.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/src/gallium/drivers/radeonsi/si_state.c > b/src/gallium/drivers/radeonsi/si_state.c > index cc9f7ae..f7fe603 100644 > --- a/src/gallium/drivers/radeonsi/si_state.c > +++ b/src/gallium/drivers/radeonsi/si_state.c > @@ -2197,7 +2197,8 @@ static struct si_pm4_state *si_set_sampler_view(struct > r600_context *rctx, > struct si_pipe_sampler_view **resource = (struct si_pipe_sampler_view > **)views; > struct si_pm4_state *pm4 = CALLOC_STRUCT(si_pm4_state); > int i, j; > - int has_depth = 0; > + > + rctx->have_depth_texture = FALSE; > > if (!count) > goto out; > @@ -2210,8 +2211,12 @@ static struct si_pm4_state *si_set_sampler_view(struct > r600_context *rctx, > (struct pipe_sampler_view **)&samplers->views[i], > views[i]); > > - if (views[i]) > + if (resource[i]) { > + struct r600_resource_texture *rtex = > + (struct r600_resource_texture > *)views[i]->texture; > + rctx->have_depth_texture |= rtex->depth && > !rtex->is_flushing_texture; > si_pm4_add_bo(pm4, resource[i]->resource, > RADEON_USAGE_READ); > + } > > for (j = 0; j < Elements(resource[i]->state); ++j) { > si_pm4_sh_data_add(pm4, resource[i] ? > resource[i]->state[j] : 0); > @@ -2226,7 +2231,6 @@ static struct si_pm4_state *si_set_sampler_view(struct > r600_context *rctx, > si_pm4_sh_data_end(pm4, user_data_reg, SI_SGPR_RESOURCE); > > out: > - rctx->have_depth_texture = has_depth; > rctx->ps_samplers.n_views = count; > return pm4; > } > -- > 1.7.10.4 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev