Patch provides new compiler option for backend to force unroll loops
that have non-constant expression indexing on sampler arrays.

This makes sure that we can never end up with a shader that uses loop
induction variable as sampler array index but does not unroll because
of having too much instructions. This would not work without dynamic
indexing support.

Signed-off-by: Tapani Pälli <tapani.pa...@intel.com>
---
 src/glsl/loop_unroll.cpp | 10 ++++++++++
 src/mesa/main/mtypes.h   |  6 ++++++
 2 files changed, 16 insertions(+)

diff --git a/src/glsl/loop_unroll.cpp b/src/glsl/loop_unroll.cpp
index 635e1dd..b9de51d 100644
--- a/src/glsl/loop_unroll.cpp
+++ b/src/glsl/loop_unroll.cpp
@@ -100,6 +100,16 @@ public:
 
    virtual ir_visitor_status visit_enter(ir_dereference_array *ir)
    {
+      /* Force unroll in case of dynamic indexing with sampler arrays. */
+      if (options->UnrollSamplerArrayDynamicIndexing) {
+         if ((ir->array->type->is_array() &&
+              ir->array->type->contains_sampler()) &&
+             !ir->array_index->constant_expression_value()) {
+            unsupported_variable_indexing = true;
+            return visit_continue;
+         }
+      }
+
       /* Check for arrays variably-indexed by a loop induction variable.
        * Unrolling the loop may convert that access into constant-indexing.
        *
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 1598e2c..61d1dfb 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2896,6 +2896,12 @@ struct gl_shader_compiler_options
     */
    GLboolean OptimizeForAOS;
 
+   /**
+    * Unroll any loops with dynamic indexing to sampler array. This can be used
+    * to force loop unroll from the backend for GLSL <= 1.20 and GLSL ES 1.00.
+    */
+   GLboolean UnrollSamplerArrayDynamicIndexing;
+
    const struct nir_shader_compiler_options *NirOptions;
 };
 
-- 
2.1.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to