diff --git a/src/compiler/glsl/glsl_parser_extras.cpp b/src/compiler/glsl/glsl_parser_extras.cpp index 29fb914b13c..add895121fd 100644 --- a/src/compiler/glsl/glsl_parser_extras.cpp +++ b/src/compiler/glsl/glsl_parser_extras.cpp @@ -2447,6 +2447,8 @@ _mesa_glsl_compile_shader(struct gl_context *ctx, struct gl_shader *shader, } ralloc_free(shader->ir); + ralloc_free(shader->nir); + shader->nir = NULL; shader->ir = new(shader) exec_list; if (!state->error && !state->translation_unit.is_empty()) _mesa_ast_to_hir(shader->ir, state); diff --git a/src/mesa/main/shader_types.h b/src/mesa/main/shader_types.h index bf1cbdf9991..9797ce68371 100644 --- a/src/mesa/main/shader_types.h +++ b/src/mesa/main/shader_types.h @@ -42,6 +42,8 @@ #include "pipe/p_state.h" +struct nir_shader; + /** * Shader information needed by both gl_shader and gl_linked shader. */ @@ -178,6 +180,7 @@ struct gl_shader */ GLbitfield BlendSupport; + struct nir_shader *nir; struct exec_list *ir; struct glsl_symbol_table *symbols; diff --git a/src/mesa/main/shaderobj.c b/src/mesa/main/shaderobj.c index 2878d082fef..d197ccd28d6 100644 --- a/src/mesa/main/shaderobj.c +++ b/src/mesa/main/shaderobj.c @@ -134,6 +134,7 @@ _mesa_delete_shader(struct gl_context *ctx, struct gl_shader *sh) free((void *)sh->Source); free((void *)sh->FallbackSource); free(sh->Label); + ralloc_free(sh->nir); ralloc_free(sh); }