gallium/u_blitter: use TEX_LZ if it's supported
authorMarek Olšák <marek.olsak@amd.com>
Tue, 30 May 2017 15:07:47 +0000 (17:07 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 7 Jun 2017 16:10:50 +0000 (18:10 +0200)
The sampler views always have first_level == last_level.
Now radeonsi doesn't have to use the WQM. (a few SALU removed)

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/auxiliary/util/u_blitter.c

index 1aef01376eefa445c05fef1e9a528cedf840d39e..21f0686175852265922bc4152b1cf5df5b6d5385 100644 (file)
@@ -132,6 +132,7 @@ struct blitter_context_priv
    boolean has_stream_out;
    boolean has_stencil_export;
    boolean has_texture_multisample;
+   boolean has_tex_lz;
    boolean cached_all_shaders;
 
    /* The Draw module overrides these functions.
@@ -197,6 +198,9 @@ struct blitter_context *util_blitter_create(struct pipe_context *pipe)
    ctx->has_texture_multisample =
       pipe->screen->get_param(pipe->screen, PIPE_CAP_TEXTURE_MULTISAMPLE);
 
+   ctx->has_tex_lz = pipe->screen->get_param(pipe->screen,
+                                             PIPE_CAP_TGSI_TEX_TXF_LZ);
+
    /* blend state objects */
    memset(&blend, 0, sizeof(blend));
 
@@ -953,7 +957,7 @@ static void *blitter_get_fs_texfetch_col(struct blitter_context_priv *ctx,
          *shader = util_make_fragment_tex_shader(pipe, tgsi_tex,
                                                  TGSI_INTERPOLATE_LINEAR,
                                                  stype, dtype,
-                                                 false, false);
+                                                 ctx->has_tex_lz, false);
       }
 
       return *shader;
@@ -992,7 +996,7 @@ void *blitter_get_fs_texfetch_depth(struct blitter_context_priv *ctx,
          *shader =
             util_make_fragment_tex_shader_writedepth(pipe, tgsi_tex,
                                                      TGSI_INTERPOLATE_LINEAR,
-                                                     false, false);
+                                                     ctx->has_tex_lz, false);
       }
 
       return *shader;
@@ -1031,7 +1035,7 @@ void *blitter_get_fs_texfetch_depthstencil(struct blitter_context_priv *ctx,
          *shader =
             util_make_fragment_tex_shader_writedepthstencil(pipe, tgsi_tex,
                                                             TGSI_INTERPOLATE_LINEAR,
-                                                            false,
+                                                            ctx->has_tex_lz,
                                                             false);
       }
 
@@ -1071,7 +1075,7 @@ void *blitter_get_fs_texfetch_stencil(struct blitter_context_priv *ctx,
          *shader =
             util_make_fragment_tex_shader_writestencil(pipe, tgsi_tex,
                                                        TGSI_INTERPOLATE_LINEAR,
-                                                       false, false);
+                                                       ctx->has_tex_lz, false);
       }
 
       return *shader;