diff options
author | Kenneth Graunke <[email protected]> | 2011-09-19 18:30:15 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2011-09-23 17:12:47 -0700 |
commit | 0fabf8e8dc96a0eb8a9fbbac760d4faceee3af48 (patch) | |
tree | cb54d1bbcc585848df71fd12a6c0ea2151e3dbb9 /src/glsl/builtins | |
parent | 604173fb1c4c7705681e77bbd862b9f953dbc6d4 (diff) |
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 <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/glsl/builtins')
-rwxr-xr-x | src/glsl/builtins/tools/generate_builtins.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/glsl/builtins/tools/generate_builtins.py b/src/glsl/builtins/tools/generate_builtins.py index 17d528c2180..8ce2b70c500 100755 --- a/src/glsl/builtins/tools/generate_builtins.py +++ b/src/glsl/builtins/tools/generate_builtins.py @@ -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 |