glsl: Disallow auxiliary storage qualifiers on FS outputs.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 27 Jul 2013 04:18:56 +0000 (21:18 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 27 Jul 2013 17:31:40 +0000 (10:31 -0700)
This has always been an error; we just forgot to check for it.

Fixes Piglit's no-aux-qual-on-fs-output.frag.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67333
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Cc: mesa-stable@lists.freedesktop.org
src/glsl/ast_to_hir.cpp

index 2569cdeb10831c30dcce08c63501c4ef9916b04b..598da92f8fbd00ba6526f13248ab50ccf4efab69 100644 (file)
@@ -2927,6 +2927,20 @@ ast_declarator_list::hir(exec_list *instructions,
                           "'centroid in' cannot be used in a vertex shader");
       }
 
+      /* Section 4.3.6 of the GLSL 1.30 specification states:
+       * "It is an error to use centroid out in a fragment shader."
+       *
+       * The GL_ARB_shading_language_420pack extension specification states:
+       * "It is an error to use auxiliary storage qualifiers or interpolation
+       *  qualifiers on an output in a fragment shader."
+       */
+      if (state->target == fragment_shader &&
+          this->type->qualifier.flags.q.out &&
+          this->type->qualifier.has_auxiliary_storage()) {
+         _mesa_glsl_error(&loc, state,
+                          "auxiliary storage qualifiers cannot be used on "
+                          "fragment shader outputs");
+      }
 
       /* Precision qualifiers exists only in GLSL versions 1.00 and >= 1.30.
        */