mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
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
4 changed files with 7 additions and 3 deletions
|
|
@ -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.
|
/* The current shader doesn't contain a matching function or signature.
|
||||||
* Before giving up, look for the prototype in the built-in functions.
|
* 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++) {
|
for (unsigned i = 0; i < state->num_builtins_to_link; i++) {
|
||||||
ir_function *builtin;
|
ir_function *builtin;
|
||||||
builtin = state->builtins_to_link[i]->symbols->get_function(name);
|
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_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state)
|
||||||
{
|
{
|
||||||
_mesa_glsl_initialize_variables(instructions, state);
|
_mesa_glsl_initialize_variables(instructions, state);
|
||||||
_mesa_glsl_initialize_functions(state);
|
|
||||||
|
|
||||||
state->symbols->language_version = state->language_version;
|
state->symbols->language_version = state->language_version;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -228,12 +228,14 @@ _mesa_read_profile(struct _mesa_glsl_parse_state *state,
|
||||||
void
|
void
|
||||||
_mesa_glsl_initialize_functions(struct _mesa_glsl_parse_state *state)
|
_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) {
|
if (builtin_mem_ctx == NULL) {
|
||||||
builtin_mem_ctx = ralloc_context(NULL); // "GLSL built-in functions"
|
builtin_mem_ctx = ralloc_context(NULL); // "GLSL built-in functions"
|
||||||
memset(&builtin_profiles, 0, sizeof(builtin_profiles));
|
memset(&builtin_profiles, 0, sizeof(builtin_profiles));
|
||||||
}
|
}
|
||||||
|
|
||||||
state->num_builtins_to_link = 0;
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *ctx,
|
||||||
this->error = false;
|
this->error = false;
|
||||||
this->loop_or_switch_nesting = NULL;
|
this->loop_or_switch_nesting = NULL;
|
||||||
|
|
||||||
|
this->num_builtins_to_link = 0;
|
||||||
|
|
||||||
/* Set default language version and extensions */
|
/* Set default language version and extensions */
|
||||||
this->language_version = 110;
|
this->language_version = 110;
|
||||||
this->es_shader = false;
|
this->es_shader = false;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue