glsl: Generate error for invalid input layout declarations
Fixes various piglit tests: spec/glsl-1.50/compiler/incorrect-in-layout-qualifier-*.geom Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
This commit is contained in:
parent
0c558f9ee6
commit
738c9c3c54
|
@ -207,6 +207,8 @@ ast_type_qualifier::merge_in_qualifier(YYLTYPE *loc,
|
||||||
void *mem_ctx = state;
|
void *mem_ctx = state;
|
||||||
bool create_gs_ast = false;
|
bool create_gs_ast = false;
|
||||||
bool create_cs_ast = false;
|
bool create_cs_ast = false;
|
||||||
|
ast_type_qualifier valid_in_mask;
|
||||||
|
valid_in_mask.flags.i = 0;
|
||||||
|
|
||||||
switch (state->stage) {
|
switch (state->stage) {
|
||||||
case MESA_SHADER_GEOMETRY:
|
case MESA_SHADER_GEOMETRY:
|
||||||
|
@ -229,6 +231,8 @@ ast_type_qualifier::merge_in_qualifier(YYLTYPE *loc,
|
||||||
create_gs_ast |=
|
create_gs_ast |=
|
||||||
q.flags.q.prim_type &&
|
q.flags.q.prim_type &&
|
||||||
!state->in_qualifier->flags.q.prim_type;
|
!state->in_qualifier->flags.q.prim_type;
|
||||||
|
|
||||||
|
valid_in_mask.flags.q.prim_type = 1;
|
||||||
break;
|
break;
|
||||||
case MESA_SHADER_FRAGMENT:
|
case MESA_SHADER_FRAGMENT:
|
||||||
if (q.flags.q.early_fragment_tests) {
|
if (q.flags.q.early_fragment_tests) {
|
||||||
|
@ -241,6 +245,8 @@ ast_type_qualifier::merge_in_qualifier(YYLTYPE *loc,
|
||||||
create_cs_ast |=
|
create_cs_ast |=
|
||||||
q.flags.q.local_size != 0 &&
|
q.flags.q.local_size != 0 &&
|
||||||
state->in_qualifier->flags.q.local_size == 0;
|
state->in_qualifier->flags.q.local_size == 0;
|
||||||
|
|
||||||
|
valid_in_mask.flags.q.local_size = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
_mesa_glsl_error(loc, state,
|
_mesa_glsl_error(loc, state,
|
||||||
|
@ -249,6 +255,13 @@ ast_type_qualifier::merge_in_qualifier(YYLTYPE *loc,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Generate an error when invalid input layout qualifiers are used. */
|
||||||
|
if ((q.flags.i & ~valid_in_mask.flags.i) != 0) {
|
||||||
|
_mesa_glsl_error(loc, state,
|
||||||
|
"invalid input layout qualifiers used");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* Input layout qualifiers can be specified multiple
|
/* Input layout qualifiers can be specified multiple
|
||||||
* times in separate declarations, as long as they match.
|
* times in separate declarations, as long as they match.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue