summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-08-18 11:36:09 -0700
committerEric Anholt <eric@anholt.net>2010-08-18 14:16:07 -0700
commit4a6a4316846ead3ec12759c96ecc4b61491aad65 (patch)
tree36b49c365310c0071da4ccdc132fe5aa16172aa0
parent0df61bdb669d03d9c25e49d5698f193deca3cf6d (diff)
mesa: Hang the compiled shader off the shader->ir, not the shader.
Otherwise, with repeated program recompile, we never free the results of the previous compile.
-rw-r--r--src/mesa/program/ir_to_mesa.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/mesa/program/ir_to_mesa.cpp b/src/mesa/program/ir_to_mesa.cpp
index 58d3b41d083..8ed3834061a 100644
--- a/src/mesa/program/ir_to_mesa.cpp
+++ b/src/mesa/program/ir_to_mesa.cpp
@@ -2662,6 +2662,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
_mesa_glsl_lexer_dtor(state);
}
+ talloc_free(shader->ir);
shader->ir = new(shader) exec_list;
if (!state->error && !state->translation_unit.is_empty())
_mesa_ast_to_hir(shader->ir, state);
@@ -2706,7 +2707,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
}
/* Retain any live IR, but trash the rest. */
- reparent_ir(shader->ir, shader);
+ reparent_ir(shader->ir, shader->ir);
talloc_free(state);