[Mesa-dev] [PATCH 3/5] glsl: move default layout qualifier rules out of the parser
Timothy Arceri
timothy.arceri at collabora.com
Mon Jan 18 00:29:39 PST 2016
Cc: Matt Turner <mattst88 at gmail.com>
---
src/glsl/ast_type.cpp | 22 +++++++++++++++++++++-
src/glsl/glsl_parser.yy | 29 ++---------------------------
2 files changed, 23 insertions(+), 28 deletions(-)
diff --git a/src/glsl/ast_type.cpp b/src/glsl/ast_type.cpp
index 4e75016..e59d1b2 100644
--- a/src/glsl/ast_type.cpp
+++ b/src/glsl/ast_type.cpp
@@ -296,8 +296,28 @@ ast_type_qualifier::merge_out_qualifier(YYLTYPE *loc,
void *mem_ctx = state;
const bool r = this->merge_qualifier(loc, state, q);
- if (state->stage == MESA_SHADER_TESS_CTRL) {
+ if (state->stage == MESA_SHADER_GEOMETRY) {
+ if (q.flags.q.prim_type) {
+ /* Make sure this is a valid output primitive type. */
+ switch (q.prim_type) {
+ case GL_POINTS:
+ case GL_LINE_STRIP:
+ case GL_TRIANGLE_STRIP:
+ break;
+ default:
+ _mesa_glsl_error(loc, state, "invalid geometry shader output "
+ "primitive type");
+ break;
+ }
+ }
+
+ /* Allow future assigments of global out's stream id value */
+ this->flags.q.explicit_stream = 0;
+ } else if (state->stage == MESA_SHADER_TESS_CTRL) {
node = new(mem_ctx) ast_tcs_output_layout(*loc);
+ } else {
+ _mesa_glsl_error(loc, state, "out layout qualifiers only valid in "
+ "tessellation control or geometry shaders");
}
return r;
diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index 462ca45..925cb82 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -2786,33 +2786,8 @@ layout_out_defaults:
layout_qualifier OUT_TOK ';'
{
$$ = NULL;
- if (state->stage == MESA_SHADER_GEOMETRY) {
- if ($1.flags.q.prim_type) {
- /* Make sure this is a valid output primitive type. */
- switch ($1.prim_type) {
- case GL_POINTS:
- case GL_LINE_STRIP:
- case GL_TRIANGLE_STRIP:
- break;
- default:
- _mesa_glsl_error(&@1, state, "invalid geometry shader output "
- "primitive type");
- break;
- }
- }
- if (!state->out_qualifier->merge_qualifier(& @1, state, $1))
- YYERROR;
-
- /* Allow future assigments of global out's stream id value */
- state->out_qualifier->flags.q.explicit_stream = 0;
- } else if (state->stage == MESA_SHADER_TESS_CTRL) {
- if (!state->out_qualifier->merge_out_qualifier(& @1, state, $1, $$))
- YYERROR;
- } else {
- _mesa_glsl_error(& @1, state,
- "out layout qualifiers only valid in "
- "tessellation control or geometry shaders");
- }
+ if (!state->out_qualifier->merge_out_qualifier(& @1, state, $1, $$))
+ YYERROR;
}
;
--
2.4.3
More information about the mesa-dev
mailing list