[Mesa-dev] [PATCH v2 2/3] glsl: Move link_get_main_function_signature to a common location

Eduardo Lima Mitev elima at igalia.com
Thu Sep 10 08:13:20 PDT 2015


On 08/23/2015 09:09 AM, Jordan Justen wrote:
> Also rename to _mesa_get_main_function_signature.
> 
> We will call it near the end of compilation to insert some code into
> main for initializing some compute shader global variables.
> 
> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> ---
>  src/glsl/builtin_functions.cpp | 28 ++++++++++++++++++++++++++++
>  src/glsl/ir.h                  |  3 +++
>  src/glsl/linker.cpp            | 31 ++-----------------------------
>  src/glsl/linker.h              |  3 ---
>  src/glsl/lower_vertex_id.cpp   |  2 +-
>  5 files changed, 34 insertions(+), 33 deletions(-)
> 
> diff --git a/src/glsl/builtin_functions.cpp b/src/glsl/builtin_functions.cpp
> index 1bc3de4..bb8bc50 100644
> --- a/src/glsl/builtin_functions.cpp
> +++ b/src/glsl/builtin_functions.cpp
> @@ -5061,4 +5061,32 @@ _mesa_glsl_get_builtin_function_shader()
>     return builtins.shader;
>  }
>  
> +
> +/**
> + * Get the function signature for main from a shader
> + */
> +ir_function_signature *
> +_mesa_get_main_function_signature(gl_shader *sh)
> +{
> +   ir_function *const f = sh->symbols->get_function("main");
> +   if (f != NULL) {
> +      exec_list void_parameters;
> +
> +      /* Look for the 'void main()' signature and ensure that it's defined.
> +       * This keeps the linker from accidentally pick a shader that just
> +       * contains a prototype for main.
> +       *
> +       * We don't have to check for multiple definitions of main (in multiple
> +       * shaders) because that would have already been caught above.
> +       */
> +      ir_function_signature *sig =
> +         f->matching_signature(NULL, &void_parameters, false);
> +      if ((sig != NULL) && sig->is_defined) {
> +	 return sig;

A tab slipped here, use spaces instead like rest of file.

Other than that, patch looks good.

Reviewed-by: Eduardo Lima Mitev <elima at igalia.com>

> +      }
> +   }
> +
> +   return NULL;
> +}
> +
>  /** @} */
> diff --git a/src/glsl/ir.h b/src/glsl/ir.h
> index ede8caa..750321e 100644
> --- a/src/glsl/ir.h
> +++ b/src/glsl/ir.h
> @@ -2529,6 +2529,9 @@ _mesa_glsl_find_builtin_function_by_name(_mesa_glsl_parse_state *state,
>  extern gl_shader *
>  _mesa_glsl_get_builtin_function_shader(void);
>  
> +extern ir_function_signature *
> +_mesa_get_main_function_signature(gl_shader *sh);
> +
>  extern void
>  _mesa_glsl_release_functions(void);
>  
> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
> index 47f7d25..cf0f646 100644
> --- a/src/glsl/linker.cpp
> +++ b/src/glsl/linker.cpp
> @@ -1341,33 +1341,6 @@ move_non_declarations(exec_list *instructions, exec_node *last,
>     return last;
>  }
>  
> -/**
> - * Get the function signature for main from a shader
> - */
> -ir_function_signature *
> -link_get_main_function_signature(gl_shader *sh)
> -{
> -   ir_function *const f = sh->symbols->get_function("main");
> -   if (f != NULL) {
> -      exec_list void_parameters;
> -
> -      /* Look for the 'void main()' signature and ensure that it's defined.
> -       * This keeps the linker from accidentally pick a shader that just
> -       * contains a prototype for main.
> -       *
> -       * We don't have to check for multiple definitions of main (in multiple
> -       * shaders) because that would have already been caught above.
> -       */
> -      ir_function_signature *sig =
> -         f->matching_signature(NULL, &void_parameters, false);
> -      if ((sig != NULL) && sig->is_defined) {
> -	 return sig;
> -      }
> -   }
> -
> -   return NULL;
> -}
> -
>  
>  /**
>   * This class is only used in link_intrastage_shaders() below but declaring
> @@ -2040,7 +2013,7 @@ link_intrastage_shaders(void *mem_ctx,
>      */
>     gl_shader *main = NULL;
>     for (unsigned i = 0; i < num_shaders; i++) {
> -      if (link_get_main_function_signature(shader_list[i]) != NULL) {
> +      if (_mesa_get_main_function_signature(shader_list[i]) != NULL) {
>  	 main = shader_list[i];
>  	 break;
>        }
> @@ -2072,7 +2045,7 @@ link_intrastage_shaders(void *mem_ctx,
>      * copy of the original shader that contained the main function).
>      */
>     ir_function_signature *const main_sig =
> -      link_get_main_function_signature(linked);
> +      _mesa_get_main_function_signature(linked);
>  
>     /* Move any instructions other than variable declarations or function
>      * declarations into main.
> diff --git a/src/glsl/linker.h b/src/glsl/linker.h
> index ce3dc32..0999878 100644
> --- a/src/glsl/linker.h
> +++ b/src/glsl/linker.h
> @@ -26,9 +26,6 @@
>  #ifndef GLSL_LINKER_H
>  #define GLSL_LINKER_H
>  
> -ir_function_signature *
> -link_get_main_function_signature(gl_shader *sh);
> -
>  extern bool
>  link_function_calls(gl_shader_program *prog, gl_shader *main,
>  		    gl_shader **shader_list, unsigned num_shaders);
> diff --git a/src/glsl/lower_vertex_id.cpp b/src/glsl/lower_vertex_id.cpp
> index fc90bc8..3da7a2f 100644
> --- a/src/glsl/lower_vertex_id.cpp
> +++ b/src/glsl/lower_vertex_id.cpp
> @@ -130,7 +130,7 @@ lower_vertex_id(gl_shader *shader)
>        return false;
>  
>     ir_function_signature *const main_sig =
> -      link_get_main_function_signature(shader);
> +      _mesa_get_main_function_signature(shader);
>     if (main_sig == NULL) {
>        assert(main_sig != NULL);
>        return false;
> 



More information about the mesa-dev mailing list