diff options
author | Jason Ekstrand <[email protected]> | 2016-10-21 12:09:38 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-10-27 22:46:13 -0700 |
commit | 43dadb6edd5e3e3e10b1198184a9f75556edad49 (patch) | |
tree | f2c67ee18bbef5193633c3aacf98ec985eeda7e8 /src/intel/blorp/blorp.c | |
parent | ab92480272bc34d943d28506cc36759e141b4371 (diff) |
intel/blorp: Rework our usage of ralloc when compiling shaders
Previously, we were creating the shader with a NULL ralloc context and then
trusting in blorp_compile_fs to clean it up. The only problem was that
blorp_compile_fs didn't clean up its context properly so we were leaking.
When I went to fix that, I realized that it couldn't because it has to
return the shader binary which is allocated off of that context and used by
the caller. The solution is to make blorp_compile_fs take a ralloc
context, allocate the nir_shaders directly off that context, and clean it
all up in whatever function creates the shader and calls blorp_compile_fs.
Signed-off-by: Jason Ekstrand <[email protected]>
Reviewed-by: Topi Pohjolainen <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
Cc: "12.0, 13.0" <[email protected]>
Diffstat (limited to 'src/intel/blorp/blorp.c')
-rw-r--r-- | src/intel/blorp/blorp.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/src/intel/blorp/blorp.c b/src/intel/blorp/blorp.c index b495619df27..3ef3e70eb55 100644 --- a/src/intel/blorp/blorp.c +++ b/src/intel/blorp/blorp.c @@ -165,7 +165,8 @@ nir_uniform_type_size(const struct glsl_type *type) } const unsigned * -blorp_compile_fs(struct blorp_context *blorp, struct nir_shader *nir, +blorp_compile_fs(struct blorp_context *blorp, void *mem_ctx, + struct nir_shader *nir, const struct brw_wm_prog_key *wm_key, bool use_repclear, struct brw_blorp_prog_data *prog_data, @@ -173,13 +174,6 @@ blorp_compile_fs(struct blorp_context *blorp, struct nir_shader *nir, { const struct brw_compiler *compiler = blorp->compiler; - void *mem_ctx = ralloc_context(NULL); - - /* Calling brw_preprocess_nir and friends is destructive and, if cloning is - * enabled, may end up completely replacing the nir_shader. Therefore, we - * own it and might as well put it in our context for easy cleanup. - */ - ralloc_steal(mem_ctx, nir); nir->options = compiler->glsl_compiler_options[MESA_SHADER_FRAGMENT].NirOptions; |