Mesa (master): glsl: Add error checking for applying interpolation qualifiers to other vars.

Eric Anholt anholt at kemper.freedesktop.org
Wed Jan 11 00:44:50 UTC 2012


Module: Mesa
Branch: master
Commit: 916e206ef0cbcc5fa6c4026135e92079e1d73ec2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=916e206ef0cbcc5fa6c4026135e92079e1d73ec2

Author: Eric Anholt <eric at anholt.net>
Date:   Mon Jan  9 16:40:20 2012 -0800

glsl: Add error checking for applying interpolation qualifiers to other vars.

Fixes piglit
glsl-1.30/compiler/interpolation-qualifiers/local-smooth-01.frag.

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/glsl/ast_to_hir.cpp |   23 +++++++++++++++++++++++
 1 files changed, 23 insertions(+), 0 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 1aebca4..cde7052 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -2010,6 +2010,29 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
    else
       var->interpolation = INTERP_QUALIFIER_NONE;
 
+   if (var->interpolation != INTERP_QUALIFIER_NONE &&
+       !(state->target == vertex_shader && var->mode == ir_var_out) &&
+       !(state->target == fragment_shader && var->mode == ir_var_in)) {
+      const char *qual_string = NULL;
+      switch (var->interpolation) {
+      case INTERP_QUALIFIER_FLAT:
+	 qual_string = "flat";
+	 break;
+      case INTERP_QUALIFIER_NOPERSPECTIVE:
+	 qual_string = "noperspective";
+	 break;
+      case INTERP_QUALIFIER_SMOOTH:
+	 qual_string = "smooth";
+	 break;
+      }
+
+      _mesa_glsl_error(loc, state,
+		       "interpolation qualifier `%s' can only be applied to "
+		       "vertex shader outputs and fragment shader inputs.",
+		       qual_string);
+
+   }
+
    var->pixel_center_integer = qual->flags.q.pixel_center_integer;
    var->origin_upper_left = qual->flags.q.origin_upper_left;
    if ((qual->flags.q.origin_upper_left || qual->flags.q.pixel_center_integer)




More information about the mesa-commit mailing list