radeonsi: Actually keep track if we are using depth textures for samplers.
authorMichel Dänzer <michel.daenzer@amd.com>
Wed, 5 Dec 2012 17:35:22 +0000 (18:35 +0100)
committerMichel Dänzer <michel@daenzer.net>
Thu, 17 Jan 2013 15:57:21 +0000 (16:57 +0100)
20-odd more piglits.

Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeonsi/si_state.c

index cc9f7ae3e1b01f315c1f24e96d1aa555a5af93fe..f7fe603f115bbf613acf4ebdd5e08375e2102f84 100644 (file)
@@ -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;
        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;
 
        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]);
 
                        (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);
                        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);
 
                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:
        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;
 }
        rctx->ps_samplers.n_views = count;
        return pm4;
 }