[Mesa-dev] [PATCH 4/6] glsl: Make mode_string function globally available

Paul Berry stereotype441 at gmail.com
Tue Oct 29 18:38:07 CET 2013


On 27 October 2013 14:59, Ian Romanick <idr at freedesktop.org> wrote:

> From: Ian Romanick <ian.d.romanick at intel.com>
>
> I made this a function (instead of a method of ir_variable) because it
> made the change set smaller, and I expect that there will be an overload
> that takes an ir_var_mode enum.  Having both functions used the same way
> seemed better.
>
> v2: Add missing case for ir_var_system_value.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
>  src/glsl/ir.cpp     | 41 +++++++++++++++++++++++++++++++++++++++++
>  src/glsl/ir.h       |  3 +++
>  src/glsl/linker.cpp | 23 -----------------------
>  3 files changed, 44 insertions(+), 23 deletions(-)
>
> diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
> index c682e3e..90e8f5d 100644
> --- a/src/glsl/ir.cpp
> +++ b/src/glsl/ir.cpp
> @@ -1891,3 +1891,44 @@ vertices_per_prim(GLenum prim)
>        return 3;
>     }
>  }
> +
> +/**
> + * Generate a string describing the mode of a variable
> + */
> +const char *
> +mode_string(const ir_variable *var)
> +{
> +   switch (var->mode) {
> +   case ir_var_auto:
> +      return (var->read_only) ? "global constant" : "global variable";
> +
> +   case ir_var_uniform:
> +      return "uniform";
> +
> +   case ir_var_shader_in:
> +      return "shader input";
> +
> +   case ir_var_shader_out:
> +      return "shader output";
> +
> +   case ir_var_function_in:
> +   case ir_var_const_in:
> +      return "function input";
> +
> +   case ir_var_function_out:
> +      return "function output";
> +
> +   case ir_var_function_inout:
> +      return "function inout";
> +
> +   case ir_var_system_value:
> +      return "shader input";
> +
> +   case ir_var_temporary:
> +      return "compiler temporary";
> +
> +   case ir_var_mode_count:
> +      assert(!"Should not get here.");
> +      return "invalid variable";
>

I'd suggest changing this case to "break;", and moving these two lines
after the end of the switch statement.  That way, in the unlikely event
that var->mode is an invalid value other than ir_var_mode_count, the
assertion will still fire, and in release builds we won't wind up returning
a garbage pointer.

With that change, the patch is:

Reviewed-by: Paul Berry <stereotype441 at gmail.com>


> +   }
> +}
> diff --git a/src/glsl/ir.h b/src/glsl/ir.h
> index 8d5bec9..75c9f18 100644
> --- a/src/glsl/ir.h
> +++ b/src/glsl/ir.h
> @@ -2292,6 +2292,9 @@ extern char *
>  prototype_string(const glsl_type *return_type, const char *name,
>                  exec_list *parameters);
>
> +const char *
> +mode_string(const ir_variable *var);
> +
>  extern "C" {
>  #endif /* __cplusplus */
>
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index d8f655c..d081afb 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -558,29 +558,6 @@ validate_geometry_shader_executable(struct
> gl_shader_program *prog,
>
>
>  /**
> - * Generate a string describing the mode of a variable
> - */
> -static const char *
> -mode_string(const ir_variable *var)
> -{
> -   switch (var->mode) {
> -   case ir_var_auto:
> -      return (var->read_only) ? "global constant" : "global variable";
> -
> -   case ir_var_uniform:    return "uniform";
> -   case ir_var_shader_in:  return "shader input";
> -   case ir_var_shader_out: return "shader output";
> -
> -   case ir_var_const_in:
> -   case ir_var_temporary:
> -   default:
> -      assert(!"Should not get here.");
> -      return "invalid variable";
> -   }
> -}
> -
> -
> -/**
>   * Perform validation of global variables used across multiple shaders
>   */
>  void
> --
> 1.8.1.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20131029/20f64542/attachment-0001.html>


More information about the mesa-dev mailing list