[Mesa-dev] [PATCH] glsl: Fix gl_shader_stage enum unsigned comparison

Nicolai Hähnle nhaehnle at gmail.com
Thu Jun 8 07:30:15 UTC 2017


On 01.06.2017 03:04, Rob Herring wrote:
> Replace -1 with MESA_SHADER_NONE enum value to fix sign related warning:
> 
> external/mesa3d/src/compiler/glsl/link_varyings.cpp:1415:25: warning: comparison of constant -1 with expression of type 'gl_shader_stage' is always true [-Wtautological-constant-out-of-range-compare]
>          (consumer_stage != -1 && consumer_stage != MESA_SHADER_FRAGMENT))) {
>           ~~~~~~~~~~~~~~ ^  ~~
> 
> Signed-off-by: Rob Herring <robh at kernel.org>

Reviewed-by: Nicolai Hähnle <nicolai.haehnle at amd.com>


> ---
>   src/compiler/glsl/ast_to_hir.cpp        | 7 ++++++-
>   src/compiler/glsl/builtin_variables.cpp | 4 ++++
>   src/compiler/glsl/link_varyings.cpp     | 6 +++---
>   src/compiler/shader_enums.h             | 1 +
>   src/mesa/main/shaderobj.h               | 4 ++++
>   src/mesa/program/prog_print.c           | 2 ++
>   src/mesa/state_tracker/st_context.h     | 2 ++
>   7 files changed, 22 insertions(+), 4 deletions(-)
> 
> diff --git a/src/compiler/glsl/ast_to_hir.cpp b/src/compiler/glsl/ast_to_hir.cpp
> index 2dec8bbc32b7..320ad69c63bf 100644
> --- a/src/compiler/glsl/ast_to_hir.cpp
> +++ b/src/compiler/glsl/ast_to_hir.cpp
> @@ -3245,6 +3245,9 @@ apply_explicit_location(const struct ast_type_qualifier *qual,
>                          "compute shader variables cannot be given "
>                          "explicit locations");
>         return;
> +   default:
> +      fail = true;
> +      break;
>      };
>   
>      if (fail) {
> @@ -3276,7 +3279,7 @@ apply_explicit_location(const struct ast_type_qualifier *qual,
>               ? (qual_location + FRAG_RESULT_DATA0)
>               : (qual_location + VARYING_SLOT_VAR0);
>            break;
> -      case MESA_SHADER_COMPUTE:
> +      default:
>            assert(!"Unexpected shader type");
>            break;
>         }
> @@ -4089,6 +4092,8 @@ apply_type_qualifier_to_variable(const struct ast_type_qualifier *qual,
>         case MESA_SHADER_COMPUTE:
>            /* Invariance isn't meaningful in compute shaders. */
>            break;
> +      default:
> +         break;
>         }
>      }
>   
> diff --git a/src/compiler/glsl/builtin_variables.cpp b/src/compiler/glsl/builtin_variables.cpp
> index ce4dd43730c1..405502eb8a43 100644
> --- a/src/compiler/glsl/builtin_variables.cpp
> +++ b/src/compiler/glsl/builtin_variables.cpp
> @@ -1324,6 +1324,8 @@ builtin_variable_generator::add_varying(int slot, const glsl_type *type,
>      case MESA_SHADER_COMPUTE:
>         /* Compute shaders don't have varyings. */
>         break;
> +   default:
> +      break;
>      }
>   }
>   
> @@ -1461,6 +1463,8 @@ _mesa_glsl_initialize_variables(exec_list *instructions,
>      case MESA_SHADER_COMPUTE:
>         gen.generate_cs_special_vars();
>         break;
> +   default:
> +      break;
>      }
>   }
>   
> diff --git a/src/compiler/glsl/link_varyings.cpp b/src/compiler/glsl/link_varyings.cpp
> index d04f546c2430..910e2eda82b8 100644
> --- a/src/compiler/glsl/link_varyings.cpp
> +++ b/src/compiler/glsl/link_varyings.cpp
> @@ -1412,7 +1412,7 @@ varying_matches::record(ir_variable *producer_var, ir_variable *consumer_var)
>   
>      if (!disable_varying_packing &&
>          (needs_flat_qualifier ||
> -        (consumer_stage != -1 && consumer_stage != MESA_SHADER_FRAGMENT))) {
> +        (consumer_stage != MESA_SHADER_NONE && consumer_stage != MESA_SHADER_FRAGMENT))) {
>         /* Since this varying is not being consumed by the fragment shader, its
>          * interpolation type varying cannot possibly affect rendering.
>          * Also, this variable is non-flat and is (or contains) an integer
> @@ -2170,8 +2170,8 @@ assign_varying_locations(struct gl_context *ctx,
>   
>      varying_matches matches(disable_varying_packing, xfb_enabled,
>                              ctx->Extensions.ARB_enhanced_layouts,
> -                           producer ? producer->Stage : (gl_shader_stage)-1,
> -                           consumer ? consumer->Stage : (gl_shader_stage)-1);
> +                           producer ? producer->Stage : MESA_SHADER_NONE,
> +                           consumer ? consumer->Stage : MESA_SHADER_NONE);
>      hash_table *tfeedback_candidates =
>            _mesa_hash_table_create(NULL, _mesa_key_hash_string,
>                                    _mesa_key_string_equal);
> diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h
> index 07db4767f862..352f27040ce3 100644
> --- a/src/compiler/shader_enums.h
> +++ b/src/compiler/shader_enums.h
> @@ -39,6 +39,7 @@ extern "C" {
>    */
>   typedef enum
>   {
> +   MESA_SHADER_NONE = -1,
>      MESA_SHADER_VERTEX = 0,
>      MESA_SHADER_TESS_CTRL = 1,
>      MESA_SHADER_TESS_EVAL = 2,
> diff --git a/src/mesa/main/shaderobj.h b/src/mesa/main/shaderobj.h
> index b7dae62bcb41..97b8ce7ac233 100644
> --- a/src/mesa/main/shaderobj.h
> +++ b/src/mesa/main/shaderobj.h
> @@ -216,6 +216,8 @@ _mesa_shader_stage_to_subroutine(gl_shader_stage stage)
>         return GL_TESS_CONTROL_SUBROUTINE;
>      case MESA_SHADER_TESS_EVAL:
>         return GL_TESS_EVALUATION_SUBROUTINE;
> +   case MESA_SHADER_NONE:
> +      break;
>      }
>      unreachable("not reached");
>   }
> @@ -236,6 +238,8 @@ _mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage)
>         return GL_TESS_CONTROL_SUBROUTINE_UNIFORM;
>      case MESA_SHADER_TESS_EVAL:
>         return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM;
> +   case MESA_SHADER_NONE:
> +      break;
>      }
>      unreachable("not reached");
>   }
> diff --git a/src/mesa/program/prog_print.c b/src/mesa/program/prog_print.c
> index b32ce150da3c..4f85d14c41d8 100644
> --- a/src/mesa/program/prog_print.c
> +++ b/src/mesa/program/prog_print.c
> @@ -969,6 +969,8 @@ _mesa_write_shader_to_file(const struct gl_shader *shader)
>      case MESA_SHADER_COMPUTE:
>         type = "comp";
>         break;
> +   default:
> +      break;
>      }
>   
>      _mesa_snprintf(filename, sizeof(filename), "shader_%u.%s", shader->Name, type);
> diff --git a/src/mesa/state_tracker/st_context.h b/src/mesa/state_tracker/st_context.h
> index 520cd8d4623e..7a05853afcbc 100644
> --- a/src/mesa/state_tracker/st_context.h
> +++ b/src/mesa/state_tracker/st_context.h
> @@ -360,6 +360,8 @@ st_shader_stage_to_ptarget(gl_shader_stage stage)
>         return PIPE_SHADER_TESS_EVAL;
>      case MESA_SHADER_COMPUTE:
>         return PIPE_SHADER_COMPUTE;
> +   default:
> +      break;
>      }
>   
>      assert(!"should not be reached");
> 


-- 
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.


More information about the mesa-dev mailing list