mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
linker: Pull find_matching_signature out of call_link_visitor
The list of shaders to search needs to be provided as an explicit parameter to support coming changes. At that point there is no reason for it to be in the class. Also, fix some of the 'const' decorators.
This commit is contained in:
parent
b95897b89d
commit
5adbf0bff1
1 changed files with 32 additions and 26 deletions
|
|
@ -37,6 +37,10 @@ extern "C" {
|
|||
#include "hash_table.h"
|
||||
#include "linker.h"
|
||||
|
||||
static ir_function_signature *
|
||||
find_matching_signature(const char *name, const exec_list *actual_parameters,
|
||||
gl_shader **shader_list, unsigned num_shaders);
|
||||
|
||||
class call_link_visitor : public ir_hierarchical_visitor {
|
||||
public:
|
||||
call_link_visitor(gl_shader_program *prog, gl_shader **shader_list,
|
||||
|
|
@ -66,8 +70,9 @@ public:
|
|||
|
||||
const char *const name = callee->function_name();
|
||||
|
||||
ir_function_signature *sig = const_cast<ir_function_signature *>
|
||||
(this->find_matching_signature(name, &ir->actual_parameters));
|
||||
ir_function_signature *sig =
|
||||
find_matching_signature(name, &ir->actual_parameters, shader_list,
|
||||
num_shaders);
|
||||
if (sig == NULL) {
|
||||
/* FINISHME: Log the full signature of unresolved function.
|
||||
*/
|
||||
|
|
@ -138,33 +143,34 @@ private:
|
|||
/** Number of shaders available for linking. */
|
||||
unsigned num_shaders;
|
||||
|
||||
/**
|
||||
* Searches all shaders for a particular function definition
|
||||
*/
|
||||
const ir_function_signature *
|
||||
find_matching_signature(const char *name, exec_list *actual_parameters)
|
||||
{
|
||||
for (unsigned i = 0; i < this->num_shaders; i++) {
|
||||
ir_function *const f =
|
||||
this->shader_list[i]->symbols->get_function(name);
|
||||
|
||||
if (f == NULL)
|
||||
continue;
|
||||
|
||||
const ir_function_signature *sig =
|
||||
f->matching_signature(actual_parameters);
|
||||
|
||||
if ((sig == NULL) || !sig->is_defined)
|
||||
continue;
|
||||
|
||||
return sig;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Searches a list of shaders for a particular function definition
|
||||
*/
|
||||
ir_function_signature *
|
||||
find_matching_signature(const char *name, const exec_list *actual_parameters,
|
||||
gl_shader **shader_list, unsigned num_shaders)
|
||||
{
|
||||
for (unsigned i = 0; i < num_shaders; i++) {
|
||||
ir_function *const f = shader_list[i]->symbols->get_function(name);
|
||||
|
||||
if (f == NULL)
|
||||
continue;
|
||||
|
||||
ir_function_signature *sig = f->matching_signature(actual_parameters);
|
||||
|
||||
if ((sig == NULL) || !sig->is_defined)
|
||||
continue;
|
||||
|
||||
return sig;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
link_function_calls(gl_shader_program *prog, gl_shader *main,
|
||||
gl_shader **shader_list, unsigned num_shaders)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue