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

Reply via email to