From 2cb4f5a1bcc69a068bc76757465db47af49fcbeb Mon Sep 17 00:00:00 2001 From: SoroushIMG Date: Sun, 12 Feb 2023 00:36:29 +0000 Subject: [PATCH] zink: fix compute shader leaks Compute program owns the nir and zink shaders now and must free them too when destroyed. Fixes: 4cb4bb555e7 ("zink: create compute programs from compute shaders directly") Part-of: (cherry picked from commit 6af3a12e700065ca4b8b3a5d12b97a75142dd185) --- .pick_status.json | 2 +- src/gallium/drivers/zink/zink_program.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 9838a69142c..2f8ca16b24c 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -310,7 +310,7 @@ "description": "zink: fix compute shader leaks", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "4cb4bb555e702d5f8d93841a3d786400b11198fb" }, diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 95348153c9b..879c3d051e0 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -1226,8 +1226,13 @@ zink_destroy_compute_program(struct zink_screen *screen, { deinit_program(screen, &comp->base); - if (comp->shader) - _mesa_set_remove_key(comp->shader->programs, comp); + assert(comp->shader); + assert(!comp->shader->spirv); + + _mesa_set_destroy(comp->shader->programs, NULL); + ralloc_free(comp->shader->nir); + ralloc_free(comp->shader); + destroy_shader_cache(screen, &comp->shader_cache[0]); destroy_shader_cache(screen, &comp->shader_cache[1]);