glsl: Treat an interface block specifier as a level of struct nesting

Fixes the piglit test:

   spec/glsl-1.50/compiler/interface-blocks-structs-defined-within-block-instanced.vert

Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Chris Forbes 2014-06-15 12:57:20 +12:00
parent 91b8ecbe1c
commit b4ef7c596b
1 changed files with 8 additions and 0 deletions

View File

@ -5287,6 +5287,12 @@ ast_interface_block::hir(exec_list *instructions,
bool block_row_major = this->layout.flags.q.row_major;
exec_list declared_variables;
glsl_struct_field *fields;
/* Treat an interface block as one level of nesting, so that embedded struct
* specifiers will be disallowed.
*/
state->struct_specifier_depth++;
unsigned int num_variables =
ast_process_structure_or_interface_block(&declared_variables,
state,
@ -5298,6 +5304,8 @@ ast_interface_block::hir(exec_list *instructions,
redeclaring_per_vertex,
var_mode);
state->struct_specifier_depth--;
if (!redeclaring_per_vertex)
validate_identifier(this->block_name, loc, state);