r600: refactor out some compressed resource state code.
authorDave Airlie <airlied@redhat.com>
Mon, 5 Jun 2017 03:34:05 +0000 (13:34 +1000)
committerDave Airlie <airlied@redhat.com>
Mon, 5 Jun 2017 20:09:44 +0000 (06:09 +1000)
This just takes this out to a separate function as it will
get more complex with images.

Reviewed-by: Glenn Kennard <glenn.kennard@gmail.com>
src/gallium/drivers/r600/r600_state_common.c

index 3b24f36119ca68ca650c380555422e2bf7cffad7..8ace7793f0f277a5d19d7d4fe32dd5b652380ebe 100644 (file)
@@ -1400,6 +1400,32 @@ static void r600_generate_fixed_func_tcs(struct r600_context *rctx)
                ureg_create_shader_and_destroy(ureg, &rctx->b.b);
 }
 
+static void r600_update_compressed_resource_state(struct r600_context *rctx)
+{
+       unsigned i;
+       unsigned counter;
+
+       counter = p_atomic_read(&rctx->screen->b.compressed_colortex_counter);
+       if (counter != rctx->b.last_compressed_colortex_counter) {
+               rctx->b.last_compressed_colortex_counter = counter;
+
+               for (i = 0; i < PIPE_SHADER_TYPES; ++i) {
+                       r600_update_compressed_colortex_mask(&rctx->samplers[i].views);
+               }
+       }
+
+       /* Decompress textures if needed. */
+       for (i = 0; i < PIPE_SHADER_TYPES; i++) {
+               struct r600_samplerview_state *views = &rctx->samplers[i].views;
+               if (views->compressed_depthtex_mask) {
+                       r600_decompress_depth_textures(rctx, views);
+               }
+               if (views->compressed_colortex_mask) {
+                       r600_decompress_color_textures(rctx, views);
+               }
+       }
+}
+
 #define SELECT_SHADER_OR_FAIL(x) do {                                  \
                r600_shader_select(ctx, rctx->x##_shader, &x##_dirty);  \
                if (unlikely(!rctx->x##_shader->current))               \
@@ -1440,30 +1466,8 @@ static bool r600_update_derived_state(struct r600_context *rctx)
        bool need_buf_const;
        struct r600_pipe_shader *clip_so_current = NULL;
 
-       if (!rctx->blitter->running) {
-               unsigned i;
-               unsigned counter;
-
-               counter = p_atomic_read(&rctx->screen->b.compressed_colortex_counter);
-               if (counter != rctx->b.last_compressed_colortex_counter) {
-                       rctx->b.last_compressed_colortex_counter = counter;
-
-                       for (i = 0; i < PIPE_SHADER_TYPES; ++i) {
-                               r600_update_compressed_colortex_mask(&rctx->samplers[i].views);
-                       }
-               }
-
-               /* Decompress textures if needed. */
-               for (i = 0; i < PIPE_SHADER_TYPES; i++) {
-                       struct r600_samplerview_state *views = &rctx->samplers[i].views;
-                       if (views->compressed_depthtex_mask) {
-                               r600_decompress_depth_textures(rctx, views);
-                       }
-                       if (views->compressed_colortex_mask) {
-                               r600_decompress_color_textures(rctx, views);
-                       }
-               }
-       }
+       if (!rctx->blitter->running)
+               r600_update_compressed_resource_state(rctx);
 
        SELECT_SHADER_OR_FAIL(ps);