mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 11:20:20 +01:00
glsl: Add the possibility for ir_variable to have a non-ralloced name
Specifically, ir_var_temporary variables constructed with a NULL name will all have the name "compiler_temp" in static storage. No change Valgrind massif results for a trimmed apitrace of dota2. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
0e654ab1b9
commit
7625babfae
3 changed files with 30 additions and 2 deletions
|
|
@ -1543,12 +1543,30 @@ ir_swizzle::variable_referenced() const
|
|||
}
|
||||
|
||||
|
||||
const char ir_variable::tmp_name[] = "compiler_temp";
|
||||
|
||||
ir_variable::ir_variable(const struct glsl_type *type, const char *name,
|
||||
ir_variable_mode mode)
|
||||
: ir_instruction(ir_type_variable)
|
||||
{
|
||||
this->type = type;
|
||||
this->name = ralloc_strdup(this, name);
|
||||
|
||||
/* The ir_variable clone method may call this constructor with name set to
|
||||
* tmp_name.
|
||||
*/
|
||||
assert(name != NULL
|
||||
|| mode == ir_var_temporary
|
||||
|| mode == ir_var_function_in
|
||||
|| mode == ir_var_function_out
|
||||
|| mode == ir_var_function_inout);
|
||||
assert(name != ir_variable::tmp_name
|
||||
|| mode == ir_var_temporary);
|
||||
if (mode == ir_var_temporary
|
||||
&& (name == NULL || name == ir_variable::tmp_name)) {
|
||||
this->name = ir_variable::tmp_name;
|
||||
} else {
|
||||
this->name = ralloc_strdup(this, name);
|
||||
}
|
||||
|
||||
this->u.max_ifc_array_access = NULL;
|
||||
|
||||
|
|
|
|||
|
|
@ -575,6 +575,11 @@ public:
|
|||
return this->u.state_slots;
|
||||
}
|
||||
|
||||
inline bool is_name_ralloced() const
|
||||
{
|
||||
return this->name != ir_variable::tmp_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable emitting extension warnings for this variable
|
||||
*/
|
||||
|
|
@ -886,6 +891,11 @@ private:
|
|||
* \sa ir_variable::location
|
||||
*/
|
||||
const glsl_type *interface_type;
|
||||
|
||||
/**
|
||||
* Name used for anonymous compiler temporaries
|
||||
*/
|
||||
static const char tmp_name[];
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -654,7 +654,7 @@ ir_validate::visit(ir_variable *ir)
|
|||
* in the ir_dereference_variable handler to ensure that a variable is
|
||||
* declared before it is dereferenced.
|
||||
*/
|
||||
if (ir->name)
|
||||
if (ir->name && ir->is_name_ralloced())
|
||||
assert(ralloc_parent(ir->name) == ir);
|
||||
|
||||
hash_table_insert(ht, ir, ir);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue