diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 2849bfc5b2b..cb0b7b73ff0 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -676,7 +676,7 @@ zink_create_gfx_program(struct zink_context *ctx, if (!zink_descriptor_program_init(ctx, &prog->base)) goto fail; - zink_screen_get_pipeline_cache(screen, &prog->base); + zink_screen_get_pipeline_cache(screen, &prog->base, false); return prog; fail: @@ -751,7 +751,7 @@ create_compute_program(struct zink_context *ctx, nir_shader *nir) if (!zink_descriptor_program_init(ctx, &comp->base)) goto fail; - zink_screen_get_pipeline_cache(screen, &comp->base); + zink_screen_get_pipeline_cache(screen, &comp->base, false); return comp; fail: diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 96088991194..ef6be965cb7 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -265,12 +265,15 @@ cache_get_job(void *data, void *gdata, int thread_index) } void -zink_screen_get_pipeline_cache(struct zink_screen *screen, struct zink_program *pg) +zink_screen_get_pipeline_cache(struct zink_screen *screen, struct zink_program *pg, bool in_thread) { if (!screen->disk_cache) return; - util_queue_add_job(&screen->cache_get_thread, pg, &pg->cache_fence, cache_get_job, NULL, 0); + if (in_thread) + cache_get_job(pg, screen, 0); + else + util_queue_add_job(&screen->cache_get_thread, pg, &pg->cache_fence, cache_get_job, NULL, 0); } static int diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h index 75f5e869fa9..2257561b8c4 100644 --- a/src/gallium/drivers/zink/zink_screen.h +++ b/src/gallium/drivers/zink/zink_screen.h @@ -111,7 +111,7 @@ void zink_screen_update_pipeline_cache(struct zink_screen *screen, struct zink_program *pg); void -zink_screen_get_pipeline_cache(struct zink_screen *screen, struct zink_program *pg); +zink_screen_get_pipeline_cache(struct zink_screen *screen, struct zink_program *pg, bool in_thread); void zink_stub_function_not_loaded(void);