Reject uniform initializers in GLSL 1.10 mode
authorIan Romanick <ian.d.romanick@intel.com>
Sat, 27 Mar 2010 01:05:27 +0000 (18:05 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Sat, 27 Mar 2010 01:05:27 +0000 (18:05 -0700)
Now both glslparsertest/dataType3.frag and glslparsertest/dataType2.frag pass.

ast_to_hir.cpp

index d7bfb307a7f5ab0b0dc89a31d43e5bf9692590e5..c5d60b87b82c602a42c516884cd6e643159fafc1 100644 (file)
@@ -980,6 +980,21 @@ ast_declarator_list::hir(exec_list *instructions,
 
       instructions->push_tail(var);
 
+      /* From page 24 (page 30 of the PDF) of the GLSL 1.10 spec:
+       *
+       *    "All uniform variables are read-only and are initialized either
+       *    directly by an application via API commands, or indirectly by
+       *    OpenGL."
+       */
+      if ((state->language_version <= 110)
+         && (var->mode == ir_var_uniform)
+         && (decl->initializer != NULL)) {
+        YYLTYPE loc = decl->initializer->get_location();
+
+        _mesa_glsl_error(& loc, state, "uniform initializers forbidden in "
+                         "GLSL 1.10");
+      }
+
       /* FINISHME: Process the declaration initializer. */
    }