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:
parent
604173fb1c
commit
0fabf8e8dc
|
@ -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);
|
||||
|
|
|
@ -60,7 +60,6 @@ void
|
|||
_mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state)
|
||||
{
|
||||
_mesa_glsl_initialize_variables(instructions, state);
|
||||
_mesa_glsl_initialize_functions(state);
|
||||
|
||||
state->symbols->language_version = state->language_version;
|
||||
|
||||
|
|
|
@ -228,12 +228,14 @@ _mesa_read_profile(struct _mesa_glsl_parse_state *state,
|
|||
void
|
||||
_mesa_glsl_initialize_functions(struct _mesa_glsl_parse_state *state)
|
||||
{
|
||||
/* If we've already initialized the built-ins, bail early. */
|
||||
if (state->num_builtins_to_link > 0)
|
||||
return;
|
||||
|
||||
if (builtin_mem_ctx == NULL) {
|
||||
builtin_mem_ctx = ralloc_context(NULL); // "GLSL built-in functions"
|
||||
memset(&builtin_profiles, 0, sizeof(builtin_profiles));
|
||||
}
|
||||
|
||||
state->num_builtins_to_link = 0;
|
||||
"""
|
||||
|
||||
i = 0
|
||||
|
|
|
@ -52,6 +52,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *ctx,
|
|||
this->error = false;
|
||||
this->loop_or_switch_nesting = NULL;
|
||||
|
||||
this->num_builtins_to_link = 0;
|
||||
|
||||
/* Set default language version and extensions */
|
||||
this->language_version = 110;
|
||||
this->es_shader = false;
|
||||
|
|
Loading…
Reference in New Issue