i965/vec4: Remove broken vector size deduction in setup_builtin_uniform_values().
authorFrancisco Jerez <currojerez@riseup.net>
Wed, 18 Mar 2015 13:26:10 +0000 (15:26 +0200)
committerFrancisco Jerez <currojerez@riseup.net>
Mon, 23 Mar 2015 12:09:32 +0000 (14:09 +0200)
This seemed to be trying to deduce the number of uniform vector
components from the parameter swizzle, but the algorithm would always
give 4 as result.  Instead grab the correct number of components from
the GLSL type.

Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp

index af909a156b4daf89c5d34b38bba9fdfd78818004..e8dab02423989a1106c47b160fb3c48b5b38185e 100644 (file)
@@ -756,20 +756,15 @@ vec4_visitor::setup_builtin_uniform_values(ir_variable *ir)
          &this->prog->Parameters->ParameterValues[index][0];
 
       assert(this->uniforms < uniform_array_size);
-      this->uniform_vector_size[this->uniforms] = 0;
-      /* Add each of the unique swizzled channels of the element.
-       * This will end up matching the size of the glsl_type of this field.
-       */
-      int last_swiz = -1;
-      for (unsigned int j = 0; j < 4; j++) {
-        int swiz = GET_SWZ(slots[i].swizzle, j);
-        last_swiz = swiz;
-
-        stage_prog_data->param[this->uniforms * 4 + j] = &values[swiz];
-        assert(this->uniforms < uniform_array_size);
-        if (swiz <= last_swiz)
-           this->uniform_vector_size[this->uniforms]++;
-      }
+
+      for (unsigned j = 0; j < 4; j++)
+        stage_prog_data->param[this->uniforms * 4 + j] =
+            &values[GET_SWZ(slots[i].swizzle, j)];
+
+      this->uniform_vector_size[this->uniforms] =
+         (ir->type->is_scalar() || ir->type->is_vector() ||
+          ir->type->is_matrix() ? ir->type->vector_elements : 4);
+
       this->uniforms++;
    }
 }