glsl: skip tree grafting for sampler and image types
authorNicolai Hähnle <nicolai.haehnle@amd.com>
Wed, 26 Apr 2017 16:34:27 +0000 (18:34 +0200)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Sat, 6 May 2017 14:40:19 +0000 (16:40 +0200)
v2: - use is_sampler()/is_image() instead (Samuel Pitoiset)

Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/compiler/glsl/opt_tree_grafting.cpp

index 28b6e1856e8bd605d30f33532be729987fe57933..b0a16041918ad182b960e3c2aa8a07e3fd7f909e 100644 (file)
@@ -371,6 +371,17 @@ tree_grafting_basic_block(ir_instruction *bb_first,
       if (lhs_var->data.precise)
          continue;
 
+      /* Do not graft sampler and image variables. This is a workaround to
+       * st/glsl_to_tgsi being unable to handle expression parameters to image
+       * intrinsics.
+       *
+       * Note that if this is ever fixed, we still need to skip grafting when
+       * any image layout qualifiers (including the image format) are set,
+       * since we must not lose those.
+       */
+      if (lhs_var->type->is_sampler() || lhs_var->type->is_image())
+         continue;
+
       ir_variable_refcount_entry *entry = info->refs->get_variable_entry(lhs_var);
 
       if (!entry->declaration ||