This is one of our largest users of hash_table_insert. This causes some code duplication and a parameter to pass in, so might not be worth it. --- src/mesa/program/symbol_table.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/src/mesa/program/symbol_table.c b/src/mesa/program/symbol_table.c index 37066c904c..bf366035b1 100644 --- a/src/mesa/program/symbol_table.c +++ b/src/mesa/program/symbol_table.c @@ -129,9 +129,10 @@ _mesa_symbol_table_push_scope(struct _mesa_symbol_table *table) static struct symbol * -find_symbol(struct _mesa_symbol_table *table, const char *name) +find_symbol(struct _mesa_symbol_table *table, uint32_t hash, const char *name) { - struct hash_entry *entry = _mesa_hash_table_search(table->ht, name); + struct hash_entry *entry = + _mesa_hash_table_search_pre_hashed(table->ht, hash, name); return entry ? (struct symbol *) entry->data : NULL; } @@ -148,7 +149,8 @@ int _mesa_symbol_table_symbol_scope(struct _mesa_symbol_table *table, const char *name) { - struct symbol *const sym = find_symbol(table, name); + uint32_t hash = table->ht->key_hash_function(name); + struct symbol *const sym = find_symbol(table, hash, name); if (sym) { assert(sym->depth <= table->depth); @@ -163,7 +165,8 @@ void * _mesa_symbol_table_find_symbol(struct _mesa_symbol_table *table, const char *name) { - struct symbol *const sym = find_symbol(table, name); + uint32_t hash = table->ht->key_hash_function(name); + struct symbol *const sym = find_symbol(table, hash, name); if (sym) return sym->data; @@ -175,8 +178,9 @@ int _mesa_symbol_table_add_symbol(struct _mesa_symbol_table *table, const char *name, void *declaration) { + uint32_t hash = table->ht->key_hash_function(name); struct symbol *new_sym; - struct symbol *sym = find_symbol(table, name); + struct symbol *sym = find_symbol(table, hash, name); if (sym && sym->depth == table->depth) return -1; @@ -206,7 +210,8 @@ _mesa_symbol_table_add_symbol(struct _mesa_symbol_table *table, table->current_scope->symbols = new_sym; - _mesa_hash_table_insert(table->ht, new_sym->name, new_sym); + _mesa_hash_table_insert_pre_hashed(table->ht, hash, new_sym->name, + new_sym); return 0; } @@ -230,9 +235,10 @@ int _mesa_symbol_table_add_global_symbol(struct _mesa_symbol_table *table, const char *name, void *declaration) { + uint32_t hash = table->ht->key_hash_function(name); struct scope_level *top_scope; struct symbol *inner_sym = NULL; - struct symbol *sym = find_symbol(table, name); + struct symbol *sym = find_symbol(table, hash, name); while (sym) { if (sym->depth == 0) -- 2.11.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev