summaryrefslogtreecommitdiff
path: root/src/mesa/shader/ir_to_mesa.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/shader/ir_to_mesa.cpp')
-rw-r--r--src/mesa/shader/ir_to_mesa.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index 75021a70fd..c3de3aae05 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -1650,6 +1650,12 @@ get_mesa_program(GLcontext *ctx, void *mem_ctx, struct gl_shader *shader)
extern "C" {
+static void
+steal_memory(ir_instruction *ir, void *new_ctx)
+{
+ talloc_steal(new_ctx, ir);
+}
+
void
_mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
{
@@ -1712,6 +1718,11 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
shader->CompileStatus = !state->error;
shader->InfoLog = state->info_log;
+ /* Retain any live IR, but trash the rest. */
+ foreach_list(node, shader->ir) {
+ visit_tree((ir_instruction *) node, steal_memory, shader);
+ }
+
talloc_free(state);
}