Test that invalid quailfiers aren't used on variables in GLSL 1.10.
authorEric Anholt <eric@anholt.net>
Fri, 2 Apr 2010 11:53:57 +0000 (01:53 -1000)
committerIan Romanick <ian.d.romanick@intel.com>
Fri, 2 Apr 2010 18:22:41 +0000 (11:22 -0700)
ast_to_hir.cpp

index 8ed56d5800b1d130291e4b0352b34675671914cf..5e0dcaae22739bffe6efa1649adc4e4df3acca2f 100644 (file)
@@ -1332,6 +1332,32 @@ ast_declarator_list::hir(exec_list *instructions,
 
       var = new ir_variable(var_type, decl->identifier);
 
+      /* From page 22 (page 28 of the PDF) of the GLSL 1.10 specification;
+       *
+       *     "Global variables can only use the qualifiers const,
+       *     attribute, uni form, or varying. Only one may be
+       *     specified.
+       *
+       *     Local variables can only use the qualifier const."
+       *
+       * This is relaxed in GLSL 1.30.
+       */
+      if (state->language_version < 120) {
+        if (this->type->qualifier.out) {
+           _mesa_glsl_error(& loc, state,
+                            "`out' qualifier in declaration of `%s' "
+                            "only valid for function parameters in GLSL 1.10.",
+                            decl->identifier);
+        }
+        if (this->type->qualifier.in) {
+           _mesa_glsl_error(& loc, state,
+                            "`in' qualifier in declaration of `%s' "
+                            "only valid for function parameters in GLSL 1.10.",
+                            decl->identifier);
+        }
+        /* FINISHME: Test for other invalid qualifiers. */
+      }
+
       apply_type_qualifier_to_variable(& this->type->qualifier, var, state,
                                       & loc);