From ac1b343477b6390d816e163a2d259d34fe4a155b Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 20 Sep 2022 14:27:27 -0400 Subject: [PATCH] zink: use program's context for cache deletion this forces deletion of the program from its owner context under lock Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_compiler.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index ebd63abd31c..58bba1db22c 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -3249,13 +3249,13 @@ zink_shader_free(struct zink_context *ctx, struct zink_shader *shader) if (prog->shaders[MESA_SHADER_TESS_CTRL] && prog->shaders[MESA_SHADER_TESS_CTRL]->is_generated) stages_present &= ~BITFIELD_BIT(MESA_SHADER_TESS_CTRL); unsigned idx = zink_program_cache_stages(stages_present); - struct hash_table *ht = &ctx->program_cache[idx]; - simple_mtx_lock(&ctx->program_lock[idx]); + struct hash_table *ht = &prog->ctx->program_cache[idx]; + simple_mtx_lock(&prog->ctx->program_lock[idx]); struct hash_entry *he = _mesa_hash_table_search(ht, prog->shaders); assert(he); _mesa_hash_table_remove(ht, he); prog->base.removed = true; - simple_mtx_unlock(&ctx->program_lock[idx]); + simple_mtx_unlock(&prog->ctx->program_lock[idx]); } if (stage != MESA_SHADER_TESS_CTRL || !shader->is_generated) { prog->shaders[stage] = NULL;