radeonsi: Fix sampler views for depth textures.
authorMichel Dänzer <michel.daenzer@amd.com>
Tue, 20 Nov 2012 16:33:19 +0000 (17:33 +0100)
committerMichel Dänzer <michel@daenzer.net>
Wed, 28 Nov 2012 12:35:16 +0000 (13:35 +0100)
Consistently reference the flushed depth texture in the sampler view, not the
original one.

Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeonsi/radeonsi_pipe.h
src/gallium/drivers/radeonsi/si_state.c

index 1bd8bfbbcfd00c9b6d06de86d81022a225b8ed7f..1ccf95274dc127d8ff88461541cd7a684cae097b 100644 (file)
@@ -71,6 +71,7 @@ struct r600_screen {
 
 struct si_pipe_sampler_view {
        struct pipe_sampler_view        base;
+       struct si_resource              *resource;
        uint32_t                        state[8];
 };
 
index 0683b676599d3c4ea6a56238cb483e9fc971972f..09948618b939af04185f53e44b9e4f6635620d82 100644 (file)
@@ -2086,8 +2086,11 @@ static struct pipe_sampler_view *si_create_sampler_view(struct pipe_context *ctx
        if (tmp->depth && !tmp->is_flushing_texture) {
                r600_texture_depth_flush(ctx, texture, TRUE);
                tmp = tmp->flushed_depth_texture;
+               texture = &tmp->resource.b.b;
        }
 
+       view->resource = &tmp->resource;
+
        /* not supported any more */
        //endian = si_colorformat_endian_swap(format);
 
@@ -2252,11 +2255,8 @@ 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]) {
-                       struct r600_resource_texture *tex = (void *)resource[i]->base.texture;
-
-                       si_pm4_add_bo(pm4, &tex->resource, RADEON_USAGE_READ);
-               }
+               if (views[i])
+                       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);