zink: use program's context for cache deletion

this forces deletion of the program from its owner context under lock

Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18689>
This commit is contained in:
Mike Blumenkrantz
2022-09-20 14:27:27 -04:00
committed by Marge Bot
parent 275e4a9c89
commit ac1b343477
+3 -3
View File
@@ -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;