Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> On 05/23/2014 02:22 PM, Brian Paul wrote: > Makes things a little easier to read. > --- > src/glsl/ast_to_hir.cpp | 8 ++++---- > src/glsl/ir.h | 9 +++++++++ > src/glsl/ir_print_visitor.cpp | 2 +- > src/glsl/link_uniforms.cpp | 4 ++-- > src/glsl/link_varyings.cpp | 3 +-- > 5 files changed, 17 insertions(+), 9 deletions(-) > > diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp > index e06f9b4..f230a70 100644 > --- a/src/glsl/ast_to_hir.cpp > +++ b/src/glsl/ast_to_hir.cpp > @@ -3078,7 +3078,7 @@ validate_identifier(const char *identifier, YYLTYPE loc, > * OpenGL, and may not be declared in a shader as either a > * variable or a function." > */ > - if (strncmp(identifier, "gl_", 3) == 0) { > + if (is_gl_identifier(identifier)) { > _mesa_glsl_error(&loc, state, > "identifier `%s' uses reserved `gl_' prefix", > identifier); > @@ -3653,7 +3653,7 @@ ast_declarator_list::hir(exec_list *instructions, > exec_list initializer_instructions; > > /* Examine var name here since var may get deleted in the next call */ > - bool var_is_gl_id = (strncmp(var->name, "gl_", 3) == 0); > + bool var_is_gl_id = is_gl_identifier(var->name); > > ir_variable *earlier = > get_variable_being_redeclared(var, decl->get_location(), state, > @@ -5403,7 +5403,7 @@ ast_interface_block::hir(exec_list *instructions, > ir_variable *earlier = > get_variable_being_redeclared(var, loc, state, > true /* > allow_all_redeclarations */); > - if (strncmp(var->name, "gl_", 3) != 0 || earlier == NULL) { > + if (!is_gl_identifier(var->name) || earlier == NULL) { > _mesa_glsl_error(&loc, state, > "redeclaration of gl_PerVertex can only " > "include built-in variables"); > @@ -5638,7 +5638,7 @@ detect_conflicting_assignments(struct > _mesa_glsl_parse_state *state, > gl_FragColor_assigned = true; > else if (strcmp(var->name, "gl_FragData") == 0) > gl_FragData_assigned = true; > - else if (strncmp(var->name, "gl_", 3) != 0) { > + else if (!is_gl_identifier(var->name)) { > if (state->stage == MESA_SHADER_FRAGMENT && > var->data.mode == ir_var_shader_out) { > user_defined_fs_output_assigned = true; > diff --git a/src/glsl/ir.h b/src/glsl/ir.h > index ef4a12d..8060982 100644 > --- a/src/glsl/ir.h > +++ b/src/glsl/ir.h > @@ -2342,6 +2342,15 @@ prototype_string(const glsl_type *return_type, const > char *name, > const char * > mode_string(const ir_variable *var); > > +/** > + * Built-in / reserved GL variables names start with "gl_" > + */ > +static inline bool > +is_gl_identifier(const char *s) > +{ > + return s && s[0] == 'g' && s[1] == 'l' && s[2] == '_'; > +} > + > extern "C" { > #endif /* __cplusplus */ > > diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp > index 0a7695a..418f051 100644 > --- a/src/glsl/ir_print_visitor.cpp > +++ b/src/glsl/ir_print_visitor.cpp > @@ -146,7 +146,7 @@ print_type(FILE *f, const glsl_type *t) > print_type(f, t->fields.array); > fprintf(f, " %u)", t->length); > } else if ((t->base_type == GLSL_TYPE_STRUCT) > - && (strncmp("gl_", t->name, 3) != 0)) { > + && !is_gl_identifier(t->name)) { > fprintf(f, "%s@%p", t->name, (void *) t); > } else { > fprintf(f, "%s", t->name); > diff --git a/src/glsl/link_uniforms.cpp b/src/glsl/link_uniforms.cpp > index c7147e0..ba66053 100644 > --- a/src/glsl/link_uniforms.cpp > +++ b/src/glsl/link_uniforms.cpp > @@ -848,7 +848,7 @@ link_assign_uniform_locations(struct gl_shader_program > *prog) > > /* FINISHME: Update code to process built-in uniforms! > */ > - if (strncmp("gl_", var->name, 3) == 0) { > + if (is_gl_identifier(var->name)) { > uniform_size.num_shader_uniform_components += > var->type->component_slots(); > continue; > @@ -900,7 +900,7 @@ link_assign_uniform_locations(struct gl_shader_program > *prog) > > /* FINISHME: Update code to process built-in uniforms! > */ > - if (strncmp("gl_", var->name, 3) == 0) > + if (is_gl_identifier(var->name)) > continue; > > parcel.set_and_process(prog, var); > diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp > index 71998df..6863298 100644 > --- a/src/glsl/link_varyings.cpp > +++ b/src/glsl/link_varyings.cpp > @@ -77,8 +77,7 @@ cross_validate_types_and_qualifiers(struct > gl_shader_program *prog, > * correspondence between the vertex language and the > * fragment language." > */ > - if (!output->type->is_array() > - || (strncmp("gl_", output->name, 3) != 0)) { > + if (!output->type->is_array() || !is_gl_identifier(output->name)) { > linker_error(prog, > "%s shader output `%s' declared as type `%s', " > "but %s shader input declared as type `%s'\n", >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev