glsl/lower_distance: only set max_array_access for 1D clip dist arrays
authorDave Airlie <airlied@redhat.com>
Sun, 11 Jun 2017 23:45:36 +0000 (00:45 +0100)
committerDave Airlie <airlied@redhat.com>
Mon, 12 Jun 2017 19:37:06 +0000 (20:37 +0100)
The max_array_access field applies to the first dimension, which means
we only want to set it for the 1D clip dist arrays.

This fixes an ir_validate assert seen with
KHR-GL44.cull_distance.functional
on nouveau and radeon with debug builds.

Fixes: a08c4ebbe (glsl: rewrite clip/cull distance lowering pass)
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Tested-by: Tobias Klausmann <tobias.johannes.klausmann@mni.thm.de>
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/compiler/glsl/lower_distance.cpp

index 9858503e028ab0136b841becd6c255deee748e10..ff04e9a26d8417a48198e5acf54c063ee08daf68 100644 (file)
@@ -167,7 +167,6 @@ lower_distance_visitor::visit(ir_variable *ir)
       /* Clone the old var so that we inherit all of its properties */
       *new_var = ir->clone(ralloc_parent(ir), NULL);
       (*new_var)->name = ralloc_strdup(*new_var, GLSL_CLIP_VAR_NAME);
-      (*new_var)->data.max_array_access = new_size - 1;
       (*new_var)->data.location = VARYING_SLOT_CLIP_DIST0;
 
       if (!ir->type->fields.array->is_array()) {
@@ -182,6 +181,7 @@ lower_distance_visitor::visit(ir_variable *ir)
                   this->shader_stage == MESA_SHADER_GEOMETRY)));
 
          assert (ir->type->fields.array == glsl_type::float_type);
+         (*new_var)->data.max_array_access = new_size - 1;
 
          /* And change the properties that we need to change */
          (*new_var)->type = glsl_type::get_array_instance(glsl_type::vec4_type,