summaryrefslogtreecommitdiffstats
path: root/src/glsl
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2010-06-25 14:10:01 -0700
committerIan Romanick <[email protected]>2010-06-30 13:52:24 -0700
commit116f1d4f95d8eb0a82b272016590549632c865b3 (patch)
tree320bfa5fc3869e5d2dd61ec21fbd09fae229e207 /src/glsl
parentef5f1948316664055c1444d12076c7d86589a8b9 (diff)
glsl2: Steal the live IR and free the rest of the junk.
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/main.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index 1ed22e1f33b..8b2eeaa13ab 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -99,6 +99,12 @@ const struct option compiler_opts[] = {
{ NULL, 0, NULL, 0 }
};
+static void
+steal_memory(ir_instruction *ir, void *new_ctx)
+{
+ talloc_steal(new_ctx, ir);
+}
+
void
compile_shader(struct gl_shader *shader)
{
@@ -187,6 +193,11 @@ compile_shader(struct gl_shader *shader)
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);
return;