mesa: glsl: disallow initializers for varying vars
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 6 Aug 2008 17:58:52 +0000 (11:58 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Wed, 6 Aug 2008 17:58:52 +0000 (11:58 -0600)
src/mesa/shader/slang/slang_codegen.c

index 13cad6a412b024a0add783f7df9dc20384c3d030..e36b689b70427b15807806c84d804f4482b072f0 100644 (file)
@@ -3647,7 +3647,7 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
       const GLuint swizzle = _slang_var_swizzle(totalSize, 0);
 
       if (var->initializer) {
-         slang_info_log_error(A->log, "illegal assignment to '%s'", varName);
+         slang_info_log_error(A->log, "illegal initializer for uniform '%s'", varName);
          return GL_FALSE;
       }
 
@@ -3695,13 +3695,21 @@ _slang_codegen_global_variable(slang_assemble_ctx *A, slang_variable *var,
       if (dbg) printf("UNIFORM (sz %d) ", totalSize);
    }
    else if (var->type.qualifier == SLANG_QUAL_VARYING) {
-      if (!_slang_type_is_float_vec_mat(var->type.specifier.type)) {
+      /* varyings must be float, vec or mat */
+      if (!_slang_type_is_float_vec_mat(var->type.specifier.type) &&
+          var->type.specifier.type != SLANG_SPEC_ARRAY) {
          slang_info_log_error(A->log,
                               "varying '%s' must be float/vector/matrix",
                               varName);
          return GL_FALSE;
       }
 
+      if (var->initializer) {
+         slang_info_log_error(A->log, "illegal initializer for varying '%s'",
+                              varName);
+         return GL_FALSE;
+      }
+
       if (prog) {
          /* user-defined varying */
          GLint varyingLoc = _mesa_add_varying(prog->Varying, varName, size);