From: Marek Olšák Date: Sat, 2 Nov 2019 02:04:57 +0000 (-0400) Subject: st/mesa: start deduplicating some program code X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=60398e2d45f602fb3bf3a6cf770f4e26eee50587;p=mesa.git st/mesa: start deduplicating some program code Acked-by: Pierre-Eric Pelloux-Prayer --- diff --git a/src/mesa/state_tracker/st_cb_program.c b/src/mesa/state_tracker/st_cb_program.c index 806fbbc7c34..50fa5d2ad67 100644 --- a/src/mesa/state_tracker/st_cb_program.c +++ b/src/mesa/state_tracker/st_cb_program.c @@ -123,7 +123,6 @@ st_delete_program(struct gl_context *ctx, struct gl_program *prog) _mesa_delete_program( ctx, prog ); } - /** * Called via ctx->Driver.ProgramStringNotify() * Called when the program's text/code is changed. We have to free @@ -135,7 +134,6 @@ st_program_string_notify( struct gl_context *ctx, struct gl_program *prog ) { struct st_context *st = st_context(ctx); - gl_shader_stage stage = _mesa_program_enum_to_shader_stage(target); if (target == GL_FRAGMENT_PROGRAM_ARB || target == GL_FRAGMENT_SHADER_ATI) { @@ -180,10 +178,7 @@ st_program_string_notify( struct gl_context *ctx, st->dirty |= stcp->affected_states; } - if (ST_DEBUG & DEBUG_PRECOMPILE || - st->shader_has_one_variant[stage]) - st_precompile_shader_variant(st, prog); - + st_finalize_program(st, prog); return GL_TRUE; } diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index f6a35475286..597a0a6135f 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -2005,7 +2005,7 @@ st_destroy_program_variants(struct st_context *st) /** * Compile one shader variant. */ -void +static void st_precompile_shader_variant(struct st_context *st, struct gl_program *prog) { @@ -2050,3 +2050,12 @@ st_precompile_shader_variant(struct st_context *st, assert(0); } } + +void +st_finalize_program(struct st_context *st, struct gl_program *prog) +{ + /* Create Gallium shaders now instead of on demand. */ + if (ST_DEBUG & DEBUG_PRECOMPILE || + st->shader_has_one_variant[prog->info.stage]) + st_precompile_shader_variant(st, prog); +} diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h index 90e06e9effb..c2df2463273 100644 --- a/src/mesa/state_tracker/st_program.h +++ b/src/mesa/state_tracker/st_program.h @@ -378,8 +378,7 @@ st_translate_common_program(struct st_context *st, struct st_common_program *stcp); extern void -st_precompile_shader_variant(struct st_context *st, - struct gl_program *prog); +st_finalize_program(struct st_context *st, struct gl_program *prog); #ifdef __cplusplus } diff --git a/src/mesa/state_tracker/st_shader_cache.c b/src/mesa/state_tracker/st_shader_cache.c index 2671b95a5af..1d544470a94 100644 --- a/src/mesa/state_tracker/st_shader_cache.c +++ b/src/mesa/state_tracker/st_shader_cache.c @@ -270,10 +270,7 @@ st_deserialise_ir_program(struct gl_context *ctx, st_set_prog_affected_state_flags(prog); _mesa_associate_uniform_storage(ctx, shProg, prog); - /* Create Gallium shaders now instead of on demand. */ - if (ST_DEBUG & DEBUG_PRECOMPILE || - st->shader_has_one_variant[prog->info.stage]) - st_precompile_shader_variant(st, prog); + st_finalize_program(st, prog); } bool