if (pipeline == VK_NULL_HANDLE)
return VK_NULL_HANDLE;
- zink_screen_update_pipeline_cache(screen, &comp->base);
+ zink_screen_update_pipeline_cache(screen, &comp->base, false);
if (!comp->use_local_size && !comp->curr->num_uniforms && !comp->curr->has_nonseamless) {
/* don't add base pipeline to cache */
state->pipeline = comp->base_pipeline = pipeline;
if (pipeline == VK_NULL_HANDLE)
return VK_NULL_HANDLE;
- zink_screen_update_pipeline_cache(screen, &prog->base);
+ zink_screen_update_pipeline_cache(screen, &prog->base, false);
struct gfx_pipeline_cache_entry *pc_entry = CALLOC_STRUCT(gfx_pipeline_cache_entry);
if (!pc_entry)
return VK_NULL_HANDLE;
}
void
-zink_screen_update_pipeline_cache(struct zink_screen *screen, struct zink_program *pg)
+zink_screen_update_pipeline_cache(struct zink_screen *screen, struct zink_program *pg, bool in_thread)
{
if (!screen->disk_cache)
return;
- util_queue_add_job(&screen->cache_put_thread, pg, &pg->cache_fence, cache_put_job, NULL, 0);
+ if (in_thread)
+ cache_put_job(pg, screen, 0);
+ else
+ util_queue_add_job(&screen->cache_put_thread, pg, &pg->cache_fence, cache_put_job, NULL, 0);
}
static void
#define GET_PROC_ADDR_INSTANCE_LOCAL(screen, instance, x) PFN_vk##x vk_##x = (PFN_vk##x)(screen)->vk_GetInstanceProcAddr(instance, "vk"#x)
void
-zink_screen_update_pipeline_cache(struct zink_screen *screen, struct zink_program *pg);
+zink_screen_update_pipeline_cache(struct zink_screen *screen, struct zink_program *pg, bool in_thread);
void
zink_screen_get_pipeline_cache(struct zink_screen *screen, struct zink_program *pg, bool in_thread);