Module: Mesa Branch: llvm-context Commit: d9b5fd7b090dd38a5c74483addc022b9337620ea URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=d9b5fd7b090dd38a5c74483addc022b9337620ea
Author: Brian Paul <bri...@vmware.com> Date: Tue Nov 30 12:53:20 2010 -0700 gallivm: use a singleton gallivm object --- src/gallium/auxiliary/gallivm/lp_bld_init.c | 26 +++++++++++++++++--------- 1 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c index 3c3e576..b46a870 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_init.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c @@ -84,6 +84,12 @@ enum LLVM_CodeGenOpt_Level { */ static LLVMExecutionEngineRef GlobalEngine = NULL; +/** + * Same gallivm state shared by all contexts. + */ +static struct gallivm_state *GlobalGallivm = NULL; + + extern void @@ -402,21 +408,23 @@ lp_build_init(void) - /** * Create a new gallivm_state object. + * Note that we return a singleton. */ struct gallivm_state * gallivm_create(void) { - struct gallivm_state *gallivm = CALLOC_STRUCT(gallivm_state); - if (gallivm) { - if (!init_gallivm_state(gallivm)) { - FREE(gallivm); - gallivm = NULL; + if (!GlobalGallivm) { + GlobalGallivm = CALLOC_STRUCT(gallivm_state); + if (GlobalGallivm) { + if (!init_gallivm_state(GlobalGallivm)) { + FREE(GlobalGallivm); + GlobalGallivm = NULL; + } } } - return gallivm; + return GlobalGallivm; } @@ -426,8 +434,8 @@ gallivm_create(void) void gallivm_destroy(struct gallivm_state *gallivm) { - free_gallivm_state(gallivm); - FREE(gallivm); + /* No-op: don't destroy the singleton */ + (void) gallivm; } _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit