Reject non-float varyings.
authorEric Anholt <eric@anholt.net>
Thu, 1 Apr 2010 07:21:20 +0000 (21:21 -1000)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 18:22:41 +0000 (11:22 -0700)
Fixes varying2.frag.

ast_to_hir.cpp

index 79e04ee..456271d 100644 (file)
@@ -1252,6 +1252,18 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
                       "fragment shader");
    }
 
+   /* From page 25 (page 31 of the PDF) of the GLSL 1.10 spec:
+    *
+    *     "The varying qualifier can be used only with the data types
+    *     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->in && qual->out)
       var->mode = ir_var_inout;
    else if (qual->attribute || qual->in