zink: stop leaking separate shader nir

this is a huge memleak

Fixes: e3b746e3a3 ("zink: use GPL to handle (simple) separate shader objects")

Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22175>
This commit is contained in:
Mike Blumenkrantz
2023-03-28 16:50:24 -04:00
committed by Marge Bot
parent ba48753b5f
commit 66fe427ebc
3 changed files with 7 additions and 7 deletions
+4 -3
View File
@@ -3275,7 +3275,7 @@ zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs,
}
VkShaderModule
zink_shader_compile_separate(struct zink_screen *screen, struct zink_shader *zs, nir_shader **ret_nir)
zink_shader_compile_separate(struct zink_screen *screen, struct zink_shader *zs)
{
nir_shader *nir = nir_shader_clone(NULL, zs->nir);
int set = nir->info.stage == MESA_SHADER_FRAGMENT;
@@ -3303,8 +3303,9 @@ zink_shader_compile_separate(struct zink_screen *screen, struct zink_shader *zs,
}
}
optimize_nir(nir, zs);
*ret_nir = nir;
return compile_module(screen, zs, nir);
VkShaderModule mod = compile_module(screen, zs, nir);
ralloc_free(nir);
return mod;
}
static bool
+1 -1
View File
@@ -63,7 +63,7 @@ zink_compiler_assign_io(struct zink_screen *screen, nir_shader *producer, nir_sh
VkShaderModule
zink_shader_compile(struct zink_screen *screen, struct zink_shader *zs, nir_shader *nir, const struct zink_shader_key *key, const void *extra_data);
VkShaderModule
zink_shader_compile_separate(struct zink_screen *screen, struct zink_shader *zs, nir_shader **ret_nir);
zink_shader_compile_separate(struct zink_screen *screen, struct zink_shader *zs);
VkShaderModule
zink_shader_spirv_compile(struct zink_screen *screen, struct zink_shader *zs, struct spirv_shader *spirv);
struct zink_shader *
+2 -3
View File
@@ -2018,11 +2018,10 @@ precompile_separate_shader_job(void *data, void *gdata, int thread_index)
struct zink_screen *screen = gdata;
struct zink_shader *zs = data;
nir_shader *nir;
zs->precompile.mod = zink_shader_compile_separate(screen, zs, &nir);
zs->precompile.mod = zink_shader_compile_separate(screen, zs);
zink_descriptor_shader_init(screen, zs);
VkShaderModule mods[ZINK_GFX_SHADER_COUNT] = {0};
mods[nir->info.stage] = zs->precompile.mod;
mods[zs->nir->info.stage] = zs->precompile.mod;
zs->precompile.gpl = zink_create_gfx_pipeline_separate(screen, mods, zs->precompile.layout);
}