mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-21 13:40:16 +01:00
glsl: Move is_built_in flag from ir_function_signature to ir_function.
Also rename it to "is_builtin" for consistency. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
5d25746640
commit
b6f15869b3
8 changed files with 13 additions and 18 deletions
|
|
@ -982,7 +982,6 @@ ir_function_signature::ir_function_signature(const glsl_type *return_type)
|
||||||
: return_type(return_type), is_defined(false), _function(NULL)
|
: return_type(return_type), is_defined(false), _function(NULL)
|
||||||
{
|
{
|
||||||
this->ir_type = ir_type_function_signature;
|
this->ir_type = ir_type_function_signature;
|
||||||
this->is_built_in = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1034,6 +1033,7 @@ ir_function::ir_function(const char *name)
|
||||||
{
|
{
|
||||||
this->ir_type = ir_type_function;
|
this->ir_type = ir_type_function;
|
||||||
this->name = talloc_strdup(this, name);
|
this->name = talloc_strdup(this, name);
|
||||||
|
this->is_builtin = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -342,9 +342,6 @@ public:
|
||||||
/** Whether or not this function has a body (which may be empty). */
|
/** Whether or not this function has a body (which may be empty). */
|
||||||
unsigned is_defined:1;
|
unsigned is_defined:1;
|
||||||
|
|
||||||
/** Whether or not this function signature is a built-in. */
|
|
||||||
unsigned is_built_in:1;
|
|
||||||
|
|
||||||
/** Body of instructions in the function. */
|
/** Body of instructions in the function. */
|
||||||
struct exec_list body;
|
struct exec_list body;
|
||||||
|
|
||||||
|
|
@ -410,6 +407,9 @@ public:
|
||||||
*/
|
*/
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
|
/** Whether or not this function is a built-in. */
|
||||||
|
unsigned is_builtin:1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* List of ir_function_signature for each overloaded function with this name.
|
* List of ir_function_signature for each overloaded function with this name.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -249,6 +249,8 @@ ir_function::clone(void *mem_ctx, struct hash_table *ht) const
|
||||||
{
|
{
|
||||||
ir_function *copy = new(mem_ctx) ir_function(this->name);
|
ir_function *copy = new(mem_ctx) ir_function(this->name);
|
||||||
|
|
||||||
|
copy->is_builtin = this->is_builtin;
|
||||||
|
|
||||||
foreach_list_const(node, &this->signatures) {
|
foreach_list_const(node, &this->signatures) {
|
||||||
const ir_function_signature *const sig =
|
const ir_function_signature *const sig =
|
||||||
(const ir_function_signature *const) node;
|
(const ir_function_signature *const) node;
|
||||||
|
|
@ -271,7 +273,6 @@ ir_function_signature::clone(void *mem_ctx, struct hash_table *ht) const
|
||||||
new(mem_ctx) ir_function_signature(this->return_type);
|
new(mem_ctx) ir_function_signature(this->return_type);
|
||||||
|
|
||||||
copy->is_defined = this->is_defined;
|
copy->is_defined = this->is_defined;
|
||||||
copy->is_built_in = this->is_built_in;
|
|
||||||
|
|
||||||
/* Clone the parameter list.
|
/* Clone the parameter list.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -785,7 +785,7 @@ ir_call::constant_expression_value()
|
||||||
* "Function calls to user-defined functions (non-built-in functions)
|
* "Function calls to user-defined functions (non-built-in functions)
|
||||||
* cannot be used to form constant expressions."
|
* cannot be used to form constant expressions."
|
||||||
*/
|
*/
|
||||||
if (!this->callee->is_built_in)
|
if (!this->callee->function()->is_builtin)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
unsigned num_parameters = 0;
|
unsigned num_parameters = 0;
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ public:
|
||||||
this->function = this->symbols->get_function(ir->name);
|
this->function = this->symbols->get_function(ir->name);
|
||||||
if (!this->function) {
|
if (!this->function) {
|
||||||
this->function = new(this->mem_ctx) ir_function(ir->name);
|
this->function = new(this->mem_ctx) ir_function(ir->name);
|
||||||
|
this->function->is_builtin = ir->is_builtin;
|
||||||
|
|
||||||
list->push_tail(this->function);
|
list->push_tail(this->function);
|
||||||
|
|
||||||
|
|
@ -86,7 +87,6 @@ public:
|
||||||
new(mem_ctx) ir_function_signature(ir->return_type);
|
new(mem_ctx) ir_function_signature(ir->return_type);
|
||||||
|
|
||||||
copy->is_defined = false;
|
copy->is_defined = false;
|
||||||
copy->is_built_in = ir->is_built_in;
|
|
||||||
|
|
||||||
/* Clone the parameter list, but NOT the body.
|
/* Clone the parameter list, but NOT the body.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -153,14 +153,8 @@ void ir_print_visitor::visit(ir_function_signature *ir)
|
||||||
|
|
||||||
void ir_print_visitor::visit(ir_function *ir)
|
void ir_print_visitor::visit(ir_function *ir)
|
||||||
{
|
{
|
||||||
bool found_non_builtin_proto = false;
|
/* Don't print built-in functions as part of the IR. */
|
||||||
|
if (ir->is_builtin)
|
||||||
foreach_iter(exec_list_iterator, iter, *ir) {
|
|
||||||
ir_function_signature *const sig = (ir_function_signature *) iter.get();
|
|
||||||
if (sig->is_defined || !sig->is_built_in)
|
|
||||||
found_non_builtin_proto = true;
|
|
||||||
}
|
|
||||||
if (!found_non_builtin_proto)
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
printf("(function %s\n", ir->name);
|
printf("(function %s\n", ir->name);
|
||||||
|
|
|
||||||
|
|
@ -209,6 +209,7 @@ read_function(_mesa_glsl_parse_state *st, s_list *list, bool skip_body)
|
||||||
ir_function *f = st->symbols->get_function(name->value());
|
ir_function *f = st->symbols->get_function(name->value());
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
f = new(ctx) ir_function(name->value());
|
f = new(ctx) ir_function(name->value());
|
||||||
|
f->is_builtin = true;
|
||||||
added = st->symbols->add_function(f->name, f);
|
added = st->symbols->add_function(f->name, f);
|
||||||
assert(added);
|
assert(added);
|
||||||
}
|
}
|
||||||
|
|
@ -281,7 +282,6 @@ read_function_sig(_mesa_glsl_parse_state *st, ir_function *f, s_list *list,
|
||||||
if (sig == NULL && skip_body) {
|
if (sig == NULL && skip_body) {
|
||||||
/* If scanning for prototypes, generate a new signature. */
|
/* If scanning for prototypes, generate a new signature. */
|
||||||
sig = new(ctx) ir_function_signature(return_type);
|
sig = new(ctx) ir_function_signature(return_type);
|
||||||
sig->is_built_in = true;
|
|
||||||
f->add_signature(sig);
|
f->add_signature(sig);
|
||||||
} else if (sig != NULL) {
|
} else if (sig != NULL) {
|
||||||
const char *badvar = sig->qualifiers_match(&hir_parameters);
|
const char *badvar = sig->qualifiers_match(&hir_parameters);
|
||||||
|
|
|
||||||
|
|
@ -726,14 +726,14 @@ link_intrastage_shaders(GLcontext *ctx,
|
||||||
ir_function_signature *sig =
|
ir_function_signature *sig =
|
||||||
(ir_function_signature *) iter.get();
|
(ir_function_signature *) iter.get();
|
||||||
|
|
||||||
if (!sig->is_defined || sig->is_built_in)
|
if (!sig->is_defined || f->is_builtin)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ir_function_signature *other_sig =
|
ir_function_signature *other_sig =
|
||||||
other->exact_matching_signature(& sig->parameters);
|
other->exact_matching_signature(& sig->parameters);
|
||||||
|
|
||||||
if ((other_sig != NULL) && other_sig->is_defined
|
if ((other_sig != NULL) && other_sig->is_defined
|
||||||
&& !other_sig->is_built_in) {
|
&& !other_sig->function()->is_builtin) {
|
||||||
linker_error_printf(prog,
|
linker_error_printf(prog,
|
||||||
"function `%s' is multiply defined",
|
"function `%s' is multiply defined",
|
||||||
f->name);
|
f->name);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue