From 7a2387c3e0e91f649676661c607d71f3b4eba5d5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Fri, 7 Oct 2016 22:26:58 +0200 Subject: [PATCH] glsl: use a non-malloc'd storage for short ir_variable names MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Tested-by: Edmondo Tommasina Reviewed-by: Nicolai Hähnle --- src/compiler/glsl/ir.cpp | 4 ++++ src/compiler/glsl/ir.h | 13 ++++++++++++- src/compiler/glsl/lower_packed_varyings.cpp | 8 ++++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/compiler/glsl/ir.cpp b/src/compiler/glsl/ir.cpp index c5943e5fcaa..8e4b382ebd3 100644 --- a/src/compiler/glsl/ir.cpp +++ b/src/compiler/glsl/ir.cpp @@ -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); } diff --git a/src/compiler/glsl/ir.h b/src/compiler/glsl/ir.h index f07e3b20910..433ba193801 100644 --- a/src/compiler/glsl/ir.h +++ b/src/compiler/glsl/ir.h @@ -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 { /** diff --git a/src/compiler/glsl/lower_packed_varyings.cpp b/src/compiler/glsl/lower_packed_varyings.cpp index 1e8cf113273..19bbe576a69 100644 --- a/src/compiler/glsl/lower_packed_varyings.cpp +++ b/src/compiler/glsl/lower_packed_varyings.cpp @@ -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); } } -- 2.30.2