From c4d049f64603d934aed2a75cac86d4a3d4adadb7 Mon Sep 17 00:00:00 2001 From: Jordan Justen Date: Mon, 17 Aug 2015 12:22:34 -0700 Subject: [PATCH] glsl: Move link_get_main_function_signature to a common location MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Tapani Pälli Reviewed-by: Eduardo Lima Mitev --- 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 06a29bcfb10..7e77c9321b3 100644 --- a/src/glsl/builtin_functions.cpp +++ b/src/glsl/builtin_functions.cpp @@ -5121,4 +5121,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; + } + } + + return NULL; +} + /** @} */ diff --git a/src/glsl/ir.h b/src/glsl/ir.h index bb7fa0e0af4..fce72a2d3c4 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -2529,6 +2529,9 @@ _mesa_glsl_find_builtin_function_by_name(const char *name); 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 94f847e1e98..fd69dbc2c73 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 ce3dc323297..0999878c65a 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 fc90bc8e66f..3da7a2f1b3b 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; -- 2.30.2