radeonsi: expand the compressed color and depth texture masks to 64 bits
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 6 Apr 2016 16:58:42 +0000 (11:58 -0500)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Thu, 7 Apr 2016 18:15:06 +0000 (13:15 -0500)
This is in preparation of raising the number of exposed sampler views to 32
bits, which will raise the total number of sampler views to 33 for the
polygon stipple texture. That texture should never be compressed (and it's
certainly not a depth texture), but this approach seems cleaner to me than
special-casing the last slot in all affected code paths.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/radeonsi/si_blit.c
src/gallium/drivers/radeonsi/si_descriptors.c
src/gallium/drivers/radeonsi/si_pipe.h

index e0dbec5fb7905ea5545cf67e1cdd3f263f5d4bf3..c5ea8b171195a55681fa10b7752216bb86f4a78e 100644 (file)
@@ -246,14 +246,14 @@ si_flush_depth_textures(struct si_context *sctx,
                        struct si_textures_info *textures)
 {
        unsigned i;
-       unsigned mask = textures->depth_texture_mask;
+       uint64_t mask = textures->depth_texture_mask;
 
        while (mask) {
                struct pipe_sampler_view *view;
                struct si_sampler_view *sview;
                struct r600_texture *tex;
 
-               i = u_bit_scan(&mask);
+               i = u_bit_scan64(&mask);
 
                view = textures->views.views[i];
                assert(view);
@@ -329,13 +329,13 @@ si_decompress_sampler_color_textures(struct si_context *sctx,
                                     struct si_textures_info *textures)
 {
        unsigned i;
-       unsigned mask = textures->compressed_colortex_mask;
+       uint64_t mask = textures->compressed_colortex_mask;
 
        while (mask) {
                struct pipe_sampler_view *view;
                struct r600_texture *tex;
 
-               i = u_bit_scan(&mask);
+               i = u_bit_scan64(&mask);
 
                view = textures->views.views[i];
                assert(view);
@@ -355,13 +355,13 @@ si_decompress_image_color_textures(struct si_context *sctx,
                                   struct si_images_info *images)
 {
        unsigned i;
-       unsigned mask = images->compressed_colortex_mask;
+       uint64_t mask = images->compressed_colortex_mask;
 
        while (mask) {
                const struct pipe_image_view *view;
                struct r600_texture *tex;
 
-               i = u_bit_scan(&mask);
+               i = u_bit_scan64(&mask);
 
                view = &images->views[i];
                assert(view->resource->target != PIPE_BUFFER);
index 815b87bbd7e3b9be6076817882c2144153810466..6dd2e4fd89d52df773dabdfc216f2fa757800d63 100644 (file)
@@ -264,8 +264,8 @@ static void si_set_sampler_views(struct pipe_context *ctx,
                unsigned slot = start + i;
 
                if (!views || !views[i]) {
-                       samplers->depth_texture_mask &= ~(1 << slot);
-                       samplers->compressed_colortex_mask &= ~(1 << slot);
+                       samplers->depth_texture_mask &= ~(1llu << slot);
+                       samplers->compressed_colortex_mask &= ~(1llu << slot);
                        si_set_sampler_view(sctx, &samplers->views, slot, NULL);
                        continue;
                }
@@ -277,18 +277,18 @@ static void si_set_sampler_views(struct pipe_context *ctx,
                                (struct r600_texture*)views[i]->texture;
 
                        if (rtex->is_depth && !rtex->is_flushing_texture) {
-                               samplers->depth_texture_mask |= 1 << slot;
+                               samplers->depth_texture_mask |= 1llu << slot;
                        } else {
-                               samplers->depth_texture_mask &= ~(1 << slot);
+                               samplers->depth_texture_mask &= ~(1llu << slot);
                        }
                        if (is_compressed_colortex(rtex)) {
-                               samplers->compressed_colortex_mask |= 1 << slot;
+                               samplers->compressed_colortex_mask |= 1llu << slot;
                        } else {
-                               samplers->compressed_colortex_mask &= ~(1 << slot);
+                               samplers->compressed_colortex_mask &= ~(1llu << slot);
                        }
                } else {
-                       samplers->depth_texture_mask &= ~(1 << slot);
-                       samplers->compressed_colortex_mask &= ~(1 << slot);
+                       samplers->depth_texture_mask &= ~(1llu << slot);
+                       samplers->compressed_colortex_mask &= ~(1llu << slot);
                }
        }
 }
@@ -306,9 +306,9 @@ si_samplers_update_compressed_colortex_mask(struct si_textures_info *samplers)
                        struct r600_texture *rtex = (struct r600_texture *)res;
 
                        if (is_compressed_colortex(rtex)) {
-                               samplers->compressed_colortex_mask |= 1 << i;
+                               samplers->compressed_colortex_mask |= 1llu << i;
                        } else {
-                               samplers->compressed_colortex_mask &= ~(1 << i);
+                               samplers->compressed_colortex_mask &= ~(1llu << i);
                        }
                }
        }
index 6d0d687fe4c1591c3d5a138b68f4b357c30fae4a..4158fc5461e8310f3f59732793a802fdf3f4da5d 100644 (file)
@@ -137,8 +137,8 @@ struct si_cs_shader_state {
 
 struct si_textures_info {
        struct si_sampler_views         views;
-       uint32_t                        depth_texture_mask; /* which textures are depth */
-       uint32_t                        compressed_colortex_mask;
+       uint64_t                        depth_texture_mask; /* which textures are depth */
+       uint64_t                        compressed_colortex_mask;
 };
 
 struct si_images_info {