diff options
author | Timothy Arceri <timothy.arceri@collabora.com> | 2015-11-10 12:47:46 +1100 |
---|---|---|
committer | Timothy Arceri <timothy.arceri@collabora.com> | 2016-05-01 23:12:52 +1000 |
commit | daa8df590b68926c3fbde897ebae7d5f0a92bf45 (patch) | |
tree | 8c8693181fed2e3be6b8f12516ef44afafcb10d7 /src/compiler/glsl | |
parent | ea4c1afd050fbfab4bd4d3d79cf7784e0fd0825f (diff) |
glsl: parse component layout qualifier
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/compiler/glsl')
-rw-r--r-- | src/compiler/glsl/ast.h | 14 | ||||
-rw-r--r-- | src/compiler/glsl/ast_type.cpp | 3 | ||||
-rw-r--r-- | src/compiler/glsl/glsl_parser.yy | 11 |
3 files changed, 28 insertions, 0 deletions
diff --git a/src/compiler/glsl/ast.h b/src/compiler/glsl/ast.h index 92aa39e64b8..fb25bb357a3 100644 --- a/src/compiler/glsl/ast.h +++ b/src/compiler/glsl/ast.h @@ -502,6 +502,12 @@ struct ast_type_qualifier { */ unsigned explicit_index:1; + /** + * Flag set if GL_ARB_enhanced_layouts "component" layout + * qualifier is used. + */ + unsigned explicit_component:1; + /** * Flag set if GL_ARB_shading_language_420pack "binding" layout * qualifier is used. @@ -621,6 +627,14 @@ struct ast_type_qualifier { */ ast_expression *index; + /** + * Component specified via GL_ARB_enhaced_layouts + * + * \note + * This field is only valid if \c explicit_component is set. + */ + ast_expression *component; + /** Maximum output vertices in GLSL 1.50 geometry shaders. */ ast_layout_expression *max_vertices; diff --git a/src/compiler/glsl/ast_type.cpp b/src/compiler/glsl/ast_type.cpp index 7a0014b5d7f..6d230797ea7 100644 --- a/src/compiler/glsl/ast_type.cpp +++ b/src/compiler/glsl/ast_type.cpp @@ -337,6 +337,9 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc, if (q.flags.q.explicit_index) this->index = q.index; + if (q.flags.q.explicit_component) + this->component = q.component; + if (q.flags.q.explicit_binding) this->binding = q.binding; diff --git a/src/compiler/glsl/glsl_parser.yy b/src/compiler/glsl/glsl_parser.yy index 1cecc09b8c8..09e346da164 100644 --- a/src/compiler/glsl/glsl_parser.yy +++ b/src/compiler/glsl/glsl_parser.yy @@ -1497,6 +1497,17 @@ layout_qualifier_id: $$.location = $3; } + if (match_layout_qualifier("component", $1, state) == 0) { + if (!state->has_enhanced_layouts()) { + _mesa_glsl_error(& @1, state, + "component qualifier requires " + "GLSL 4.40 or ARB_enhanced_layouts"); + } else { + $$.flags.q.explicit_component = 1; + $$.component = $3; + } + } + if (match_layout_qualifier("index", $1, state) == 0) { if (state->es_shader && !state->EXT_blend_func_extended_enable) { _mesa_glsl_error(& @3, state, "index layout qualifier requires EXT_blend_func_extended"); |