mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 02:30:12 +01:00
glsl: Move link_get_main_function_signature to a common location
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@intel.com> Reviewed-by: Tapani Pälli <tapani.palli@intel.com> Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
This commit is contained in:
parent
34e187ec38
commit
c4d049f646
5 changed files with 34 additions and 33 deletions
|
|
@ -5121,4 +5121,32 @@ _mesa_glsl_get_builtin_function_shader()
|
||||||
return builtins.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;
|
||||||
|
}
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
||||||
|
|
@ -2529,6 +2529,9 @@ _mesa_glsl_find_builtin_function_by_name(const char *name);
|
||||||
extern gl_shader *
|
extern gl_shader *
|
||||||
_mesa_glsl_get_builtin_function_shader(void);
|
_mesa_glsl_get_builtin_function_shader(void);
|
||||||
|
|
||||||
|
extern ir_function_signature *
|
||||||
|
_mesa_get_main_function_signature(gl_shader *sh);
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
_mesa_glsl_release_functions(void);
|
_mesa_glsl_release_functions(void);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1341,33 +1341,6 @@ move_non_declarations(exec_list *instructions, exec_node *last,
|
||||||
return 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
|
* 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;
|
gl_shader *main = NULL;
|
||||||
for (unsigned i = 0; i < num_shaders; i++) {
|
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];
|
main = shader_list[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -2072,7 +2045,7 @@ link_intrastage_shaders(void *mem_ctx,
|
||||||
* copy of the original shader that contained the main function).
|
* copy of the original shader that contained the main function).
|
||||||
*/
|
*/
|
||||||
ir_function_signature *const main_sig =
|
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
|
/* Move any instructions other than variable declarations or function
|
||||||
* declarations into main.
|
* declarations into main.
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,6 @@
|
||||||
#ifndef GLSL_LINKER_H
|
#ifndef GLSL_LINKER_H
|
||||||
#define GLSL_LINKER_H
|
#define GLSL_LINKER_H
|
||||||
|
|
||||||
ir_function_signature *
|
|
||||||
link_get_main_function_signature(gl_shader *sh);
|
|
||||||
|
|
||||||
extern bool
|
extern bool
|
||||||
link_function_calls(gl_shader_program *prog, gl_shader *main,
|
link_function_calls(gl_shader_program *prog, gl_shader *main,
|
||||||
gl_shader **shader_list, unsigned num_shaders);
|
gl_shader **shader_list, unsigned num_shaders);
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,7 @@ lower_vertex_id(gl_shader *shader)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ir_function_signature *const main_sig =
|
ir_function_signature *const main_sig =
|
||||||
link_get_main_function_signature(shader);
|
_mesa_get_main_function_signature(shader);
|
||||||
if (main_sig == NULL) {
|
if (main_sig == NULL) {
|
||||||
assert(main_sig != NULL);
|
assert(main_sig != NULL);
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue