glsl: stop cloning builtin fuctions _mesa_glsl_find_builtin_function()

The cloning was introduced in f81ede4699 to fix a problem with
shaders including IR that was owned by builtins.

However the approach of cloning the whole function each time we
reference a builtin lead to a significant reduction in the GLSL
IR compilers performance.

The previous patch fixes the ownership problem in a more precise
way. So we can now remove this cloning.

Testing on a Ryzen 7 1800X shows a ~15% decreases in compiling the
Deus Ex: Mankind Divided shaders on radeonsi (which take 5min+ on
some machines). Looking just at the GLSL IR compiler the speed up
is ~40%.

Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Timothy Arceri
2017-08-09 13:34:07 +10:00
parent 77f5221233
commit 9d41ec2182

View File

@@ -6291,16 +6291,7 @@ _mesa_glsl_find_builtin_function(_mesa_glsl_parse_state *state,
s = builtins.find(state, name, actual_parameters);
mtx_unlock(&builtins_lock);
if (s == NULL)
return NULL;
struct hash_table *ht =
_mesa_hash_table_create(NULL, _mesa_hash_pointer, _mesa_key_pointer_equal);
void *mem_ctx = state;
ir_function *f = s->function()->clone(mem_ctx, ht);
_mesa_hash_table_destroy(ht, NULL);
return f->matching_signature(state, actual_parameters, true);
return s;
}
bool