[Mesa-dev] [PATCH 2/4] glsl: parse align layout qualifier
Timothy Arceri
timothy.arceri at collabora.com
Tue Jan 12 01:34:02 PST 2016
---
src/glsl/ast.h | 11 +++++++++++
src/glsl/ast_type.cpp | 4 ++++
src/glsl/glsl_parser.yy | 11 +++++++++++
3 files changed, 26 insertions(+)
diff --git a/src/glsl/ast.h b/src/glsl/ast.h
index e22deed..0b6871a 100644
--- a/src/glsl/ast.h
+++ b/src/glsl/ast.h
@@ -479,6 +479,12 @@ struct ast_type_qualifier {
unsigned pixel_center_integer:1;
/*@}*/
+ /**
+ * Flag set if GL_ARB_enhanced_layouts "align" layout qualifier is
+ * used.
+ */
+ unsigned explicit_align:1;
+
/**
* Flag set if GL_ARB_explicit_attrib_location "location" layout
* qualifier is used.
@@ -583,6 +589,11 @@ struct ast_type_qualifier {
/** Precision of the type (highp/medium/lowp). */
unsigned precision:2;
+ /**
+ * Alignment specified via GL_ARB_enhanced_layouts "align" layout qualifier
+ */
+ ast_expression *align;
+
/** Geometry shader invocations for GL_ARB_gpu_shader5. */
ast_layout_expression *invocations;
diff --git a/src/glsl/ast_type.cpp b/src/glsl/ast_type.cpp
index 6d6f88f..f4e51b8 100644
--- a/src/glsl/ast_type.cpp
+++ b/src/glsl/ast_type.cpp
@@ -73,6 +73,7 @@ ast_type_qualifier::has_layout() const
|| this->flags.q.column_major
|| this->flags.q.row_major
|| this->flags.q.packed
+ || this->flags.q.explicit_align
|| this->flags.q.explicit_component
|| this->flags.q.explicit_location
|| this->flags.q.explicit_index
@@ -268,6 +269,9 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc,
this->flags.i |= q.flags.i;
+ if (q.flags.q.explicit_align)
+ this->align = q.align;
+
if (q.flags.q.explicit_location)
this->location = q.location;
diff --git a/src/glsl/glsl_parser.yy b/src/glsl/glsl_parser.yy
index b2b94f4..83bebe9 100644
--- a/src/glsl/glsl_parser.yy
+++ b/src/glsl/glsl_parser.yy
@@ -1464,6 +1464,17 @@ layout_qualifier_id:
"GLSL 4.40 or ARB_enhanced_layouts");
}
+ if (match_layout_qualifier("align", $1, state) == 0) {
+ if (!state->has_enhanced_layouts()) {
+ _mesa_glsl_error(& @1, state,
+ "align qualifier requires "
+ "GLSL 4.40 or ARB_enhanced_layouts");
+ } else {
+ $$.flags.q.explicit_align = 1;
+ $$.align = $3;
+ }
+ }
+
if (match_layout_qualifier("location", $1, state) == 0) {
$$.flags.q.explicit_location = 1;
--
2.4.3
More information about the mesa-dev
mailing list