From 66f2a1c52636e8662c03a6ea5c59594db377e047 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 10 Feb 2023 10:01:40 -0500 Subject: [PATCH] zink: don't fetch/update pipeline cache for separate shader programs this is illegal Part-of: --- src/gallium/drivers/zink/zink_program.c | 5 +++-- src/gallium/drivers/zink/zink_screen.c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index be7d841f2bc..fdaeeb4792f 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -708,10 +708,11 @@ zink_gfx_program_update_optimal(struct zink_context *ctx) } else { ctx->dirty_gfx_stages |= ctx->shader_stages; prog = create_gfx_program_separable(ctx, ctx->gfx_stages, ctx->gfx_pipeline_state.dyn_state2.vertices_per_patch); - zink_screen_get_pipeline_cache(zink_screen(ctx->base.screen), &prog->base, false); _mesa_hash_table_insert_pre_hashed(ht, hash, prog->shaders, prog); - if (!prog->is_separable) + if (!prog->is_separable) { + zink_screen_get_pipeline_cache(zink_screen(ctx->base.screen), &prog->base, false); generate_gfx_program_modules_optimal(ctx, zink_screen(ctx->base.screen), prog, &ctx->gfx_pipeline_state); + } } simple_mtx_unlock(&ctx->program_lock[zink_program_cache_stages(ctx->shader_stages)]); if (prog && prog != ctx->curr_program) diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 98abc2417e9..aba36b57836 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -324,7 +324,7 @@ cache_put_job(void *data, void *gdata, int thread_index) void zink_screen_update_pipeline_cache(struct zink_screen *screen, struct zink_program *pg, bool in_thread) { - if (!screen->disk_cache) + if (!screen->disk_cache || !pg->pipeline_cache) return; if (in_thread)