st/glsl_to_nir: use nir_lower_samplers_as_deref when requested by the driver
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Fri, 19 May 2017 20:42:12 +0000 (22:42 +0200)
committerNicolai Hähnle <nicolai.haehnle@amd.com>
Mon, 31 Jul 2017 12:55:29 +0000 (14:55 +0200)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
src/mesa/state_tracker/st_glsl_to_nir.cpp

index 5c4ae81305523ed7f343ba538fc8d3015825e1d6..c8a7464a0080ca3ddf3bef5bf38bd3654d7ce305 100644 (file)
@@ -317,6 +317,8 @@ sort_varyings(struct exec_list *var_list)
 void
 st_finalize_nir(struct st_context *st, struct gl_program *prog, nir_shader *nir)
 {
+   struct pipe_screen *screen = st->pipe->screen;
+
    NIR_PASS_V(nir, nir_split_var_copies);
    NIR_PASS_V(nir, nir_lower_var_copies);
    NIR_PASS_V(nir, nir_lower_io_types);
@@ -372,7 +374,10 @@ st_finalize_nir(struct st_context *st, struct gl_program *prog, nir_shader *nir)
    NIR_PASS_V(nir, nir_lower_system_values);
    NIR_PASS_V(nir, nir_lower_io, nir_var_all, st_glsl_type_size,
               (nir_lower_io_options)0);
-   NIR_PASS_V(nir, nir_lower_samplers, shader_program);
+   if (screen->get_param(screen, PIPE_CAP_NIR_SAMPLERS_AS_DEREF))
+      NIR_PASS_V(nir, nir_lower_samplers_as_deref, shader_program);
+   else
+      NIR_PASS_V(nir, nir_lower_samplers, shader_program);
 }
 
 struct gl_program *