From 27fe924cf00e56732a32aa48b9a9d10194cde121 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 3 May 2024 10:42:06 -0400 Subject: [PATCH] zink: always block the precompile threads when pruning shaders this will avoid desync with separate shader program compiles Part-of: --- src/gallium/drivers/zink/zink_compiler.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index 24d54e46047..e52c6245ad5 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -6433,6 +6433,7 @@ gfx_shader_prune(struct zink_screen *screen, struct zink_shader *shader) return false; gl_shader_stage stage = shader->info.stage; assert(stage < ZINK_GFX_SHADER_COUNT); + util_queue_fence_wait(&prog->base.cache_fence); unsigned stages_present = prog->stages_present; if (prog->shaders[MESA_SHADER_TESS_CTRL] && prog->shaders[MESA_SHADER_TESS_CTRL]->non_fs.is_generated) @@ -6447,7 +6448,6 @@ gfx_shader_prune(struct zink_screen *screen, struct zink_shader *shader) _mesa_hash_table_remove(ht, he); prog->base.removed = true; simple_mtx_unlock(&prog->base.ctx->program_lock[idx]); - util_queue_fence_wait(&prog->base.cache_fence); for (unsigned r = 0; r < ARRAY_SIZE(prog->pipelines); r++) { for (int i = 0; i < ARRAY_SIZE(prog->pipelines[0]); ++i) {