[Mesa-dev] [PATCH regression-fix 2/2] glsl: Disallow interpolation qualifiers on non-input/output variables.

Kenneth Graunke kenneth at whitecape.org
Fri Aug 2 01:39:09 PDT 2013


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>
Cc: Paul Berry <stereotype441 at gmail.com>
---
 src/glsl/ast_to_hir.cpp | 25 ++++++++++++++++++-------
 1 file 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;
-- 
1.8.3.4



More information about the mesa-dev mailing list