Mesa (master): glsl parser: reject VS+in & FS+out interface blocks

Jordan Justen jljusten at kemper.freedesktop.org
Thu May 23 18:23:43 UTC 2013


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

Author: Jordan Justen <jordan.l.justen at intel.com>
Date:   Sat Mar  9 13:01:13 2013 -0800

glsl parser: reject VS+in & FS+out interface blocks

Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
Reviewed-by: Eric Anholt <eric at anholt.net>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/glsl/glsl_parser.yy |   14 ++++++++++++++
 1 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index 0a2a77b..dbc25a4 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -1935,6 +1935,20 @@ basic_interface_block:
 	      }
 	   }
 
+	   /* From the GLSL 1.50.11 spec, section 4.3.7 ("Interface Blocks"):
+	    * "It is illegal to have an input block in a vertex shader
+	    *  or an output block in a fragment shader"
+	    */
+	   if ((state->target == vertex_shader) && $1.flags.q.in) {
+	      _mesa_glsl_error(& @1, state,
+	                       "`in' interface block is not allowed for "
+	                       "a vertex shader\n");
+	   } else if ((state->target == fragment_shader) && $1.flags.q.out) {
+	      _mesa_glsl_error(& @1, state,
+	                       "`out' interface block is not allowed for "
+	                       "a fragment shader\n");
+	   }
+
 	   /* Since block arrays require names, and both features are added in
 	    * the same language versions, we don't have to explicitly
 	    * version-check both things.




More information about the mesa-commit mailing list