Mesa (glsl2): glsl2: Implement utility routine to talloc reparent an IR tree

Ian Romanick idr at kemper.freedesktop.org
Wed Jul 21 00:52:48 UTC 2010


Module: Mesa
Branch: glsl2
Commit: 60e2d06d1ccc66ad00cd7ab81c418853f21be291
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=60e2d06d1ccc66ad00cd7ab81c418853f21be291

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Tue Jul 20 11:27:38 2010 -0700

glsl2: Implement utility routine to talloc reparent an IR tree

---

 src/glsl/ir.cpp                |   15 +++++++++++++++
 src/glsl/ir.h                  |    3 +++
 src/glsl/main.cpp              |   10 +---------
 src/mesa/shader/ir_to_mesa.cpp |   10 +---------
 4 files changed, 20 insertions(+), 18 deletions(-)

diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
index 146ff17..a273296 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -875,3 +875,18 @@ visit_exec_list(exec_list *list, ir_visitor *visitor)
    }
 }
 
+
+static void
+steal_memory(ir_instruction *ir, void *new_ctx)
+{
+   talloc_steal(new_ctx, ir);
+}
+
+
+void
+reparent_ir(exec_list *list, void *mem_ctx)
+{
+   foreach_list(node, list) {
+      visit_tree((ir_instruction *) node, steal_memory, mem_ctx);
+   }
+}
diff --git a/src/glsl/ir.h b/src/glsl/ir.h
index 9fd9850..e4b0e9f 100644
--- a/src/glsl/ir.h
+++ b/src/glsl/ir.h
@@ -1315,4 +1315,7 @@ extern void
 _mesa_glsl_initialize_functions(exec_list *instructions,
 				struct _mesa_glsl_parse_state *state);
 
+extern void
+reparent_ir(exec_list *list, void *mem_ctx);
+
 #endif /* IR_H */
diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index 6b1a01c..cf9a515 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -118,12 +118,6 @@ 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)
 {
@@ -232,9 +226,7 @@ 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);
-   }
+   reparent_ir(shader->ir, shader);
 
    talloc_free(state);
 
diff --git a/src/mesa/shader/ir_to_mesa.cpp b/src/mesa/shader/ir_to_mesa.cpp
index 1a9b0e3..d1c09fe 100644
--- a/src/mesa/shader/ir_to_mesa.cpp
+++ b/src/mesa/shader/ir_to_mesa.cpp
@@ -2146,12 +2146,6 @@ get_mesa_program(GLcontext *ctx, struct gl_shader_program *shader_program,
 
 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)
 {
@@ -2215,9 +2209,7 @@ _mesa_glsl_compile_shader(GLcontext *ctx, struct gl_shader *shader)
    shader->Version = state->language_version;
 
    /* Retain any live IR, but trash the rest. */
-   foreach_list(node, shader->ir) {
-      visit_tree((ir_instruction *) node, steal_memory, shader);
-   }
+   reparent_ir(shader->ir, shader);
 
    talloc_free(state);
  }




More information about the mesa-commit mailing list