st/mesa: start deduplicating some program code
authorMarek Olšák <marek.olsak@amd.com>
Sat, 2 Nov 2019 02:04:57 +0000 (22:04 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 19 Nov 2019 23:02:06 +0000 (18:02 -0500)
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
src/mesa/state_tracker/st_cb_program.c
src/mesa/state_tracker/st_program.c
src/mesa/state_tracker/st_program.h
src/mesa/state_tracker/st_shader_cache.c

index 806fbbc7c34e407d3a309e0caa17266f15ae578c..50fa5d2ad673b3f1b39523b085d06bd337029f3a 100644 (file)
@@ -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;
 }
 
index f6a354752860e6ab246a8d3dc76725d46bd1657a..597a0a6135fe8900bcd69813427527c26535da16 100644 (file)
@@ -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);
+}
index 90e06e9effb73a80f025333ecda0d383c7f6ba7b..c2df2463273670f95cf2134d115a7c59bce0b09b 100644 (file)
@@ -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
 }
index 2671b95a5af0c76b8a524d4d8f1e826400341320..1d544470a9434560db782cb83685798c21b4916f 100644 (file)
@@ -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