Mesa (master): glsl: Disallow interpolation qualifiers on non-input/ output variables.

Kenneth Graunke kwg at kemper.freedesktop.org
Fri Aug 2 15:24:58 UTC 2013


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

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Fri Aug  2 01:28:58 2013 -0700

glsl: Disallow interpolation qualifiers on non-input/output variables.

Commit 2548092ad8015 switched the sense of interpolation qualifier
checks in order to permit them on geometry shader in/out variables.

In doing so, it accidentally allowed interpolation qualifiers to be
applied to ordinary variables and function parameters.

Fixes a regression in Piglit's local-smooth-01.frag.

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
Reviewed-by: Paul Berry <stereotype441 at gmail.com>

---

 src/glsl/ast_to_hir.cpp |   25 ++++++++++++++++++-------
 1 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 39d0b76..482ab3c 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -2059,13 +2059,24 @@ 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_shader_in) ||
-        (state->target == fragment_shader && var->mode == ir_var_shader_out))) {
-      _mesa_glsl_error(loc, state,
-                       "interpolation qualifier `%s' cannot be applied to "
-                       "vertex shader inputs or fragment shader outputs",
-                       var->interpolation_string());
+   if (var->interpolation != INTERP_QUALIFIER_NONE) {
+      ir_variable_mode mode = (ir_variable_mode) var->mode;
+
+      if (mode != ir_var_shader_in && mode != ir_var_shader_out) {
+         _mesa_glsl_error(loc, state,
+                          "interpolation qualifier `%s' can only be applied to "
+                          "shader inputs or outputs.",
+                          var->interpolation_string());
+
+      }
+
+      if ((state->target == vertex_shader && mode == ir_var_shader_in) ||
+          (state->target == fragment_shader && mode == ir_var_shader_out)) {
+         _mesa_glsl_error(loc, state,
+                          "interpolation qualifier `%s' cannot be applied to "
+                          "vertex shader inputs or fragment shader outputs",
+                          var->interpolation_string());
+      }
    }
 
    var->pixel_center_integer = qual->flags.q.pixel_center_integer;




More information about the mesa-commit mailing list