glsl: parse align layout qualifier
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user