[Mesa-dev] [PATCH] glsl: Make #pragma STDGL invariant(all) only modify outputs.

Kenneth Graunke kenneth at whitecape.org
Tue Nov 7 09:52:37 UTC 2017


According to the GLSL ES 3.20, GLSL 4.50, and GLSL 1.20 specs:

   "To force all output variables to be invariant, use the pragma

       #pragma STDGL invariant(all)

    before all declarations in a shader."

Notably, this is only supposed to affect output variables.  Furthermore,

   "Only variables output from a shader can be candidates for invariance."

It looks like this has been wrong since we first supported the pragma in
2011 (commit 86b4398cd158024f6be9fa830554a11c2a7ebe0c).

Fixes dEQP-GLES2.functional.shaders.preprocessor.pragmas.pragma_fragment
---
 src/compiler/glsl/ast_to_hir.cpp | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
index 441404f86d3..98af6bb7239 100644
--- a/src/compiler/glsl/ast_to_hir.cpp
+++ b/src/compiler/glsl/ast_to_hir.cpp
@@ -4086,12 +4086,11 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
       case MESA_SHADER_TESS_CTRL:
       case MESA_SHADER_TESS_EVAL:
       case MESA_SHADER_GEOMETRY:
-         if ((var->data.mode == ir_var_shader_in)
-             || (var->data.mode == ir_var_shader_out))
+         if (var->data.mode == ir_var_shader_out)
             var->data.invariant = true;
          break;
       case MESA_SHADER_FRAGMENT:
-         if (var->data.mode == ir_var_shader_in)
+         if (var->data.mode == ir_var_shader_out)
             var->data.invariant = true;
          break;
       case MESA_SHADER_COMPUTE:
-- 
2.15.0



More information about the mesa-dev mailing list