summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2013-09-27 14:52:08 -0700
committerPaul Berry <[email protected]>2013-10-10 14:27:12 -0700
commit9b5b0320b65631aa53bb591681bdb730c90c99da (patch)
tree6507269a459aa105394cad1a90924b56a9c68119 /src
parentf2dd3a04ce3bef550eca7893a1e6907cf8e43bc2 (diff)
glsl: Don't allow invalid identifier names in struct/interface fields.
Note: we need to make an exception for the gl_PerVertex interface block, since built-in variables are allowed to be redeclared inside it. Future patches will make redeclaration of gl_PerVertex work properly. Fixes piglit tests: - spec/glsl-1.50/compiler/interface-block-array-elem-uses-gl-prefix.vert - spec/glsl-1.50/compiler/named-interface-block-elem-uses-gl-prefix.vert - spec/glsl-1.50/compiler/unnamed-interface-block-elem-uses-gl-prefix.vert Reviewed-by: Kenneth Graunke <[email protected]> Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/glsl/ast_to_hir.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index ab5a78dc9f1..1d7539d56fe 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -4410,7 +4410,8 @@ ast_process_structure_or_interface_block(exec_list *instructions,
YYLTYPE &loc,
glsl_struct_field **fields_ret,
bool is_interface,
- bool block_row_major)
+ bool block_row_major,
+ bool allow_reserved_names)
{
unsigned decl_count = 0;
@@ -4452,6 +4453,9 @@ ast_process_structure_or_interface_block(exec_list *instructions,
foreach_list_typed (ast_declaration, decl, link,
&decl_list->declarations) {
+ if (!allow_reserved_names)
+ validate_identifier(decl->identifier, loc, state);
+
/* From the GL_ARB_uniform_buffer_object spec:
*
* "Sampler types are not allowed inside of uniform
@@ -4568,7 +4572,8 @@ ast_struct_specifier::hir(exec_list *instructions,
loc,
&fields,
false,
- false);
+ false,
+ false /* allow_reserved_names */);
const glsl_type *t =
glsl_type::get_record_instance(fields, decl_count, this->name);
@@ -4625,7 +4630,8 @@ ast_interface_block::hir(exec_list *instructions,
loc,
&fields,
true,
- block_row_major);
+ block_row_major,
+ redeclaring_per_vertex);
ir_variable_mode var_mode;
const char *iface_type_name;