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:
committed by
Marge Bot
parent
ba48753b5f
commit
66fe427ebc
@@ -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
|
||||
|
||||
@@ -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 *
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user