glsl: use a non-malloc'd storage for short ir_variable names
Tested-by: Edmondo Tommasina <edmondo.tommasina@gmail.com> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
@@ -1523,6 +1523,10 @@ ir_variable::ir_variable(const struct glsl_type *type, const char *name,
|
||||
if (mode == ir_var_temporary
|
||||
&& (name == NULL || name == ir_variable::tmp_name)) {
|
||||
this->name = ir_variable::tmp_name;
|
||||
} else if (name == NULL ||
|
||||
strlen(name) < ARRAY_SIZE(this->name_storage)) {
|
||||
strcpy(this->name_storage, name ? name : "");
|
||||
this->name = this->name_storage;
|
||||
} else {
|
||||
this->name = ralloc_strdup(this, name);
|
||||
}
|
||||
|
@@ -599,7 +599,8 @@ public:
|
||||
|
||||
inline bool is_name_ralloced() const
|
||||
{
|
||||
return this->name != ir_variable::tmp_name;
|
||||
return this->name != ir_variable::tmp_name &&
|
||||
this->name != this->name_storage;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -624,6 +625,16 @@ public:
|
||||
*/
|
||||
const char *name;
|
||||
|
||||
private:
|
||||
/**
|
||||
* If the name length fits into name_storage, it's used, otherwise
|
||||
* the name is ralloc'd. shader-db mining showed that 70% of variables
|
||||
* fit here. This is a win over ralloc where only ralloc_header has
|
||||
* 20 bytes on 64-bit (28 bytes with DEBUG), and we can also skip malloc.
|
||||
*/
|
||||
char name_storage[16];
|
||||
|
||||
public:
|
||||
struct ir_variable_data {
|
||||
|
||||
/**
|
||||
|
@@ -639,8 +639,12 @@ lower_packed_varyings_visitor::get_packed_varying_deref(
|
||||
* first time we visit each component.
|
||||
*/
|
||||
if (this->gs_input_vertices == 0 || vertex_index == 0) {
|
||||
ralloc_asprintf_append((char **) &this->packed_varyings[slot]->name,
|
||||
",%s", name);
|
||||
ir_variable *var = this->packed_varyings[slot];
|
||||
|
||||
if (var->is_name_ralloced())
|
||||
ralloc_asprintf_append((char **) &var->name, ",%s", name);
|
||||
else
|
||||
var->name = ralloc_asprintf(var, "%s,%s", var->name, name);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user