Require that 'uniform' and 'varying' variables be declared at global scope
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 31 Mar 2010 19:31:18 +0000 (12:31 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 31 Mar 2010 19:31:18 +0000 (12:31 -0700)
This causes the following tests to pass:

    glslparsertest/shaders/uniform.frag
    glslparsertest/shaders/varying.frag

ast_to_hir.cpp

index 7525461..874c11a 100644 (file)
@@ -1208,13 +1208,22 @@ ast_declarator_list::hir(exec_list *instructions,
       instructions->push_tail(var);
 
       if (state->current_function != NULL) {
-        /* FINISHME: Variables that are uniform, varying, in, or
-         * FINISHME: out varibles must be declared either at global scope or
-         * FINISHME: in a parameter list (in and out only).
+        const char *mode = NULL;
+
+        /* FINISHME: Variables that are in or out must be declared either at
+         * FINISHME: global scope or FINISHME: in a parameter list.
          */
         if (this->type->qualifier.attribute) {
+           mode = "attribute";
+        } else if (this->type->qualifier.uniform) {
+           mode = "uniform";
+        } else if (this->type->qualifier.varying) {
+           mode = "varying";
+        }
+
+        if (mode) {
            _mesa_glsl_error(& loc, state,
-                            "attribute variable `%s' must be declared at "
+                            "%s variable `%s' must be declared at "
                             "global scope",
                             var->name);
         }