Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>tags/12.0-branchpoint
@@ -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. | |||
@@ -577,6 +583,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; | |||
@@ -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_location | |||
|| this->flags.q.explicit_image_format | |||
|| this->flags.q.explicit_index | |||
@@ -287,6 +288,9 @@ ast_type_qualifier::merge_qualifier(YYLTYPE *loc, | |||
return false; | |||
} | |||
if (q.flags.q.explicit_align) | |||
this->align = q.align; | |||
if (q.flags.q.explicit_location) | |||
this->location = q.location; | |||
@@ -1468,6 +1468,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; | |||