Allow arrays of floats as varyings.
authorEric Anholt <eric@anholt.net>
Wed, 19 May 2010 20:38:15 +0000 (13:38 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 1 Jun 2010 22:15:04 +0000 (15:15 -0700)
The comment just above the code said arrays were OK, then it didn't
handle arrays.  Whoops.  Partially fixes CorrectUnsizedArray.frat.

ast_to_hir.cpp

index 8945bce6ee6e87ff3851a4ab17a2172cf596fed9..307e44836960c481b946699fc919969e9fff2c86 100644 (file)
@@ -1426,10 +1426,19 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
     *     float, vec2, vec3, vec4, mat2, mat3, and mat4, or arrays of
     *     these."
     */
-   if (qual->varying && var->type->base_type != GLSL_TYPE_FLOAT) {
-      var->type = glsl_type::error_type;
-      _mesa_glsl_error(loc, state,
-                      "varying variables must be of base type float");
+   if (qual->varying) {
+      const glsl_type *non_array_type;
+
+      if (var->type && var->type->is_array())
+        non_array_type = var->type->fields.array;
+      else
+        non_array_type = var->type;
+
+      if (non_array_type && non_array_type->base_type != GLSL_TYPE_FLOAT) {
+        var->type = glsl_type::error_type;
+        _mesa_glsl_error(loc, state,
+                         "varying variables must be of base type float");
+      }
    }
 
    if (qual->in && qual->out)