glsl: Check that integer vertex outputs are qualified with flat
authorChad Versace <chad.versace@intel.com>
Thu, 16 Dec 2010 19:06:19 +0000 (11:06 -0800)
committerChad Versace <chad.versace@intel.com>
Tue, 4 Jan 2011 18:49:10 +0000 (10:49 -0800)
Perform this check in ast_declarator_list::hir().

From section 4.3.6 of the GLSL 1.30 spec:
   "If a vertex output is a signed or unsigned integer or integer
   vector, then it must be qualified with the interpolation
   qualifier
   flat."

src/glsl/ast_to_hir.cpp

index 6770eed34337dd38bcf1e710b77ab28dba6fe6c2..67202dfc3c9f097e183430903d330971e683c38a 100644 (file)
@@ -2158,6 +2158,25 @@ ast_declarator_list::hir(exec_list *instructions,
         }
       }
 
+      /* Integer vertex outputs must be qualified with 'flat'.
+       *
+       * From section 4.3.6 of the GLSL 1.30 spec:
+       *    "If a vertex output is a signed or unsigned integer or integer
+       *    vector, then it must be qualified with the interpolation qualifier
+       *    flat."
+       */
+      if (state->language_version >= 130
+          && state->target == vertex_shader
+          && state->current_function == NULL
+          && var->type->is_integer()
+          && var->mode == ir_var_out
+          && var->interpolation != ir_var_flat) {
+
+         _mesa_glsl_error(&loc, state, "If a vertex output is an integer, "
+                          "then it must be qualified with 'flat'");
+      }
+
+
       /* Process the initializer and add its instructions to a temporary
        * list.  This list will be added to the instruction stream (below) after
        * the declaration is added.  This is done because in some cases (such as