mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 19:40:10 +01:00
glsl: Merge UBO layout qualifiers in a qualifier list.
Yes, you get to say things like "layout(row_major, column_major)" and get column major. Part of fixing piglit ARB_uniform_buffer_object/row_major. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
eed967bc9c
commit
7b77c64254
1 changed files with 23 additions and 1 deletions
|
|
@ -1113,13 +1113,35 @@ layout_qualifier_id_list:
|
|||
layout_qualifier_id
|
||||
| layout_qualifier_id_list ',' layout_qualifier_id
|
||||
{
|
||||
if (($1.flags.i & $3.flags.i) != 0) {
|
||||
ast_type_qualifier ubo_mat_mask;
|
||||
ubo_mat_mask.flags.i = 0;
|
||||
ubo_mat_mask.flags.q.row_major = 1;
|
||||
ubo_mat_mask.flags.q.column_major = 1;
|
||||
|
||||
ast_type_qualifier ubo_layout_mask;
|
||||
ubo_layout_mask.flags.i = 0;
|
||||
ubo_layout_mask.flags.q.std140 = 1;
|
||||
ubo_layout_mask.flags.q.packed = 1;
|
||||
ubo_layout_mask.flags.q.shared = 1;
|
||||
|
||||
/* Uniform block layout qualifiers get to overwrite each
|
||||
* other (rightmost having priority), while all other
|
||||
* qualifiers currently don't allow duplicates.
|
||||
*/
|
||||
if (($1.flags.i & $3.flags.i & ~(ubo_mat_mask.flags.i |
|
||||
ubo_layout_mask.flags.i)) != 0) {
|
||||
_mesa_glsl_error(& @3, state,
|
||||
"duplicate layout qualifiers used\n");
|
||||
YYERROR;
|
||||
}
|
||||
|
||||
$$ = $1;
|
||||
|
||||
if (($3.flags.i & ubo_mat_mask.flags.i) != 0)
|
||||
$$.flags.i &= ~ubo_mat_mask.flags.i;
|
||||
if (($3.flags.i & ubo_layout_mask.flags.i) != 0)
|
||||
$$.flags.i &= ~ubo_layout_mask.flags.i;
|
||||
|
||||
$$.flags.i |= $3.flags.i;
|
||||
|
||||
if ($3.flags.q.explicit_location)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue