glsl: replace strncmp("gl_") calls with new is_gl_identifier() helper
authorBrian Paul <brianp@vmware.com>
Fri, 23 May 2014 20:57:49 +0000 (14:57 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 28 May 2014 21:06:07 +0000 (15:06 -0600)
Makes things a little easier to read.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/glsl/ast_to_hir.cpp
src/glsl/ir.h
src/glsl/ir_print_visitor.cpp
src/glsl/link_uniforms.cpp
src/glsl/link_varyings.cpp

index e06f9b413d22b66a48d6a6661c03ed2934176e74..f230a70a3ed5a4c1c46af7173853d76331157d4d 100644 (file)
@@ -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;
index ef4a12d60ef1220cb46b010af2d80fde2104316b..80609829ebc6d1f16e9a7b7db3294ed1d1fd1d08 100644 (file)
@@ -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 */
 
index 0a7695ae1f6a2a9a5a827031bd9391f854c64187..418f0515153417dda243ea630794b8161f001640 100644 (file)
@@ -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);
index c7147e0ee8eaf4e926a7bdf2876ebc954061fac7..ba66053ed2a5dac684a1d81eda67e0e19431588b 100644 (file)
@@ -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);
index 71998dfa982d75fbc9d81426395cff69d6964561..6863298573fb335b04c692def37a63a67d269b46 100644 (file)
@@ -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",