glsl: Defer initialization of built-in functions until they're needed.
Very simple shaders don't actually use GLSL built-ins. For example: - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; - gl_FragColor = vec4(0.0); Both of the shaders used by _mesa_meta_glsl_Clear() also qualify. By waiting to initialize the built-ins until the first time we need to look for a signature, we can avoid the overhead entirely in these cases. Makes piglit run roughly 18% faster (255 vs. 312 seconds). Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
@@ -117,6 +117,7 @@ match_function_by_name(exec_list *instructions, const char *name,
|
||||
/* The current shader doesn't contain a matching function or signature.
|
||||
* Before giving up, look for the prototype in the built-in functions.
|
||||
*/
|
||||
_mesa_glsl_initialize_functions(state);
|
||||
for (unsigned i = 0; i < state->num_builtins_to_link; i++) {
|
||||
ir_function *builtin;
|
||||
builtin = state->builtins_to_link[i]->symbols->get_function(name);
|
||||
|
||||
Reference in New Issue
Block a user