From a7aca3919ba29ccdac01136fa9ba79f571bc797d Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 23 May 2014 14:57:49 -0600 Subject: [PATCH] glsl: replace strncmp("gl_") calls with new is_gl_identifier() helper Makes things a little easier to read. Reviewed-by: Ian Romanick --- 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 e06f9b413d2..f230a70a3ed 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 ef4a12d60ef..80609829ebc 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 0a7695ae1f6..418f0515153 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 c7147e0ee8e..ba66053ed2a 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 71998dfa982..6863298573f 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", -- 2.30.2