[Mesa-dev] [PATCH 01/27] glsl: parse component layout qualifier
Timothy Arceri
timothy.arceri at collabora.com
Thu Mar 31 10:57:36 UTC 2016
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
Reviewed-by: Edward O'Callaghan <eocallaghan at alterapraxis.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
---
src/compiler/glsl/ast.h | 14 ++++++++++++++
src/compiler/glsl/ast_type.cpp | 3 +++
src/compiler/glsl/glsl_parser.yy | 11 +++++++++++
3 files changed, 28 insertions(+)
diff --git a/src/compiler/glsl/ast.h b/src/compiler/glsl/ast.h
index 7436edc..589b136 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 c3d38cb..30c9eff 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 1cecc09..09e346d 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");
--
2.5.5
More information about the mesa-dev
mailing list