Mesa (master): i965/vs: Rework memory contexts for shader compilation data.

Kenneth Graunke kwg at kemper.freedesktop.org
Thu Nov 29 02:17:13 UTC 2012


Module: Mesa
Branch: master
Commit: 746fc346eae21d227b06799f3e82a1404c75bdc9
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=746fc346eae21d227b06799f3e82a1404c75bdc9

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Mon Nov 26 23:52:20 2012 -0800

i965/vs: Rework memory contexts for shader compilation data.

During compilation, we allocate a bunch of things: the IR needs to last
at least until code generation...and then the program store needs to
last until after we upload the program.

For simplicity's sake, just keep it all around until we upload the
program.  After that, it can all be freed.

This will also save a lot of headaches during the upcoming refactoring.

Reviewed-by: Eric Anholt <eric at anholt.net>
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>

---

 src/mesa/drivers/dri/i965/brw_vec4.cpp         |    5 +++--
 src/mesa/drivers/dri/i965/brw_vec4.h           |    4 +++-
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp |    6 +++---
 src/mesa/drivers/dri/i965/brw_vs.c             |    2 +-
 src/mesa/drivers/dri/i965/brw_vs.h             |    3 ++-
 5 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
index d203ca9..7e6e79e 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
@@ -1130,7 +1130,8 @@ extern "C" {
 bool
 brw_vs_emit(struct brw_context *brw,
             struct gl_shader_program *prog,
-            struct brw_vs_compile *c)
+            struct brw_vs_compile *c,
+            void *mem_ctx)
 {
    struct intel_context *intel = &brw->intel;
    bool start_busy = false;
@@ -1169,7 +1170,7 @@ brw_vs_emit(struct brw_context *brw,
       shader->compiled_once = true;
    }
 
-   vec4_visitor v(brw, c, prog, shader);
+   vec4_visitor v(brw, c, prog, shader, mem_ctx);
    if (!v.run()) {
       prog->LinkStatus = false;
       ralloc_strcat(&prog->InfoLog, v.fail_msg);
diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h
index f474b0f..3d9d0dc 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4.h
+++ b/src/mesa/drivers/dri/i965/brw_vec4.h
@@ -200,7 +200,9 @@ class vec4_visitor : public backend_visitor
 public:
    vec4_visitor(struct brw_context *brw,
                 struct brw_vs_compile *c,
-		struct gl_shader_program *prog, struct brw_shader *shader);
+		struct gl_shader_program *prog,
+		struct brw_shader *shader,
+		void *mem_ctx);
    ~vec4_visitor();
 
    dst_reg dst_null_f()
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
index 982b74c..4579e0c 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp
@@ -2809,7 +2809,8 @@ vec4_visitor::resolve_ud_negate(src_reg *reg)
 vec4_visitor::vec4_visitor(struct brw_context *brw,
 			   struct brw_vs_compile *c,
 			   struct gl_shader_program *prog,
-			   struct brw_shader *shader)
+			   struct brw_shader *shader,
+			   void *mem_ctx)
 {
    this->c = c;
    this->p = &c->func;
@@ -2819,7 +2820,7 @@ vec4_visitor::vec4_visitor(struct brw_context *brw,
    this->prog = prog;
    this->shader = shader;
 
-   this->mem_ctx = ralloc_context(NULL);
+   this->mem_ctx = mem_ctx;
    this->failed = false;
 
    this->base_ir = NULL;
@@ -2849,7 +2850,6 @@ vec4_visitor::vec4_visitor(struct brw_context *brw,
 
 vec4_visitor::~vec4_visitor()
 {
-   ralloc_free(this->mem_ctx);
    hash_table_dtor(this->variable_ht);
 }
 
diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
index ff91f4e..b1b7a4f 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.c
+++ b/src/mesa/drivers/dri/i965/brw_vs.c
@@ -279,7 +279,7 @@ do_vs_prog(struct brw_context *brw,
 
    /* Emit GEN4 code.
     */
-   if (!brw_vs_emit(brw, prog, &c)) {
+   if (!brw_vs_emit(brw, prog, &c, mem_ctx)) {
       ralloc_free(mem_ctx);
       return false;
    }
diff --git a/src/mesa/drivers/dri/i965/brw_vs.h b/src/mesa/drivers/dri/i965/brw_vs.h
index 2c08547..d0e260e 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.h
+++ b/src/mesa/drivers/dri/i965/brw_vs.h
@@ -105,7 +105,8 @@ struct brw_vs_compile {
 
 bool brw_vs_emit(struct brw_context *brw,
                  struct gl_shader_program *prog,
-                 struct brw_vs_compile *c);
+                 struct brw_vs_compile *c,
+                 void *mem_ctx);
 bool brw_vs_precompile(struct gl_context *ctx, struct gl_shader_program *prog);
 void brw_vs_debug_recompile(struct brw_context *brw,
                             struct gl_shader_program *prog,




More information about the mesa-commit mailing list