From e0806c1ea079b1d78735290b0e24b02eb042b2c3 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 12 Mar 2019 17:07:16 -0700 Subject: mesa/st: Make sure that prog_to_nir NIR gets freed. GLSL NIR gets freed on relink by _mesa_delete_program(), but for ARB programs we need to free the old NIR when PSN is used to set up new NIR in the same gl_program. Additionally, set the base .nir field so that it will get freed by _mesa_delete_program(). Fixes: 3d7611e9a6c6 ("st/nir: use NIR for asm programs") Reviewed-by: Kenneth Graunke --- src/mesa/state_tracker/st_program.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/mesa') diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 7015e503d12..ebedf4daa21 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -579,8 +579,11 @@ st_translate_vertex_program(struct st_context *st, nir_shader *nir = st_translate_prog_to_nir(st, &stvp->Base, MESA_SHADER_VERTEX); + if (stvp->tgsi.ir.nir) + ralloc_free(stvp->tgsi.ir.nir); stvp->tgsi.type = PIPE_SHADER_IR_NIR; stvp->tgsi.ir.nir = nir; + stvp->Base.nir = nir; return true; } @@ -763,8 +766,11 @@ st_translate_fragment_program(struct st_context *st, nir_shader *nir = st_translate_prog_to_nir(st, &stfp->Base, MESA_SHADER_FRAGMENT); + if (stfp->tgsi.ir.nir) + ralloc_free(stfp->tgsi.ir.nir); stfp->tgsi.type = PIPE_SHADER_IR_NIR; stfp->tgsi.ir.nir = nir; + stfp->Base.nir = nir; return true; } -- cgit v1.2.3