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

Author: Samuel Iglesias Gonsálvez <[email protected]>
Date:   Thu Feb 11 07:15:50 2016 +0100

glsl: Allow invariant qualifer in block members in desktop OpenGL.

Feedback from Khronos is that 'invariant' should be allowed on block
members for desktop OpenGL. Fix piglit regression added by fe1e89a0:
invariant-qualifier-in-out-block-01.vert

v2:
- Allow it for in/out blocks in OpenGL ES too, so when OES_shader_io_blocks
is supported we don't need to do any change (Timothy)

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89330
Signed-off-by: Samuel Iglesias Gonsálvez <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>

---

 src/compiler/glsl/glsl_parser_extras.cpp | 24 ++++--------------------
 1 file changed, 4 insertions(+), 20 deletions(-)

diff --git a/src/compiler/glsl/glsl_parser_extras.cpp 
b/src/compiler/glsl/glsl_parser_extras.cpp
index 99a0428..f020e80 100644
--- a/src/compiler/glsl/glsl_parser_extras.cpp
+++ b/src/compiler/glsl/glsl_parser_extras.cpp
@@ -944,27 +944,11 @@ _mesa_ast_process_interface_block(YYLTYPE *locp,
                           "the interface block");
       }
 
-      /* From GLSL ES 3.0, chapter 4.3.7 "Interface Blocks":
-       *
-       * "GLSL ES 3.0 does not support interface blocks for shader inputs or
-       * outputs."
-       *
-       * And from GLSL ES 3.0, chapter 4.6.1 "The invariant qualifier":.
-       *
-       * "Only variables output from a shader can be candidates for
-       * invariance."
-       *
-       * From GLSL 4.40 and GLSL 1.50, section "Interface Blocks":
-       *
-       * "If optional qualifiers are used, they can include interpolation
-       * qualifiers, auxiliary storage qualifiers, and storage qualifiers
-       * and they must declare an input, output, or uniform member
-       * consistent with the interface qualifier of the block"
-       */
-      if (qualifier.flags.q.invariant)
+      if (!(q.flags.q.in || q.flags.q.out) && qualifier.flags.q.invariant)
          _mesa_glsl_error(locp, state,
-                          "invariant qualifiers cannot be used "
-                          "with interface blocks members");
+                          "invariant qualifiers can be used only "
+                          "in interface block members for shader "
+                          "inputs or outputs");
    }
 }
 

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

Reply via email to