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

Author: Kenneth Graunke <[email protected]>
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 <[email protected]>
Reviewed-by: Paul Berry <[email protected]>

---

 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;

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to