summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/auxiliary/draw/draw_context.c2
-rw-r--r--src/gallium/auxiliary/draw/draw_llvm.c5
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_init.c16
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_init.h2
-rw-r--r--src/gallium/drivers/llvmpipe/lp_jit.c4
-rw-r--r--src/gallium/drivers/llvmpipe/lp_jit.h2
-rw-r--r--src/gallium/drivers/llvmpipe/lp_screen.c5
-rw-r--r--src/gallium/drivers/llvmpipe/lp_test_main.c5
8 files changed, 26 insertions, 15 deletions
diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index 001446f8e5a..85f8e26eb33 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -93,8 +93,6 @@ draw_create_context(struct pipe_context *pipe, boolean try_llvm)
#if HAVE_LLVM
if (try_llvm && draw_get_option_use_llvm()) {
draw->llvm = draw_llvm_create(draw);
- if (!draw->llvm)
- goto err_destroy;
}
#endif
diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
index e8e837a9785..504f3efab2e 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -484,12 +484,13 @@ draw_llvm_create(struct draw_context *draw)
{
struct draw_llvm *llvm;
+ if (!lp_build_init())
+ return NULL;
+
llvm = CALLOC_STRUCT( draw_llvm );
if (!llvm)
return NULL;
- lp_build_init();
-
llvm->draw = draw;
llvm->nr_variants = 0;
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c
index 243d24891da..75ef935eb22 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_init.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c
@@ -306,7 +306,8 @@ init_gallivm_state(struct gallivm_state *gallivm, const char *name)
assert(!gallivm->context);
assert(!gallivm->module);
- lp_build_init();
+ if (!lp_build_init())
+ return FALSE;
if (USE_GLOBAL_CONTEXT) {
gallivm->context = LLVMGetGlobalContext();
@@ -382,11 +383,18 @@ fail:
}
-void
+boolean
lp_build_init(void)
{
if (gallivm_initialized)
- return;
+ return TRUE;
+
+ /* XXX: Remove this once lp_bld_misc.cpp has been adapted to the removal
+ * of JITMemoryManager
+ */
+#if HAVE_LLVM >= 0x0306
+ return FALSE;
+#endif
#ifdef DEBUG
gallivm_debug = debug_get_option_gallivm_debug();
@@ -477,6 +485,8 @@ lp_build_init(void)
util_cpu_caps.has_avx = 0;
util_cpu_caps.has_f16c = 0;
#endif
+
+ return TRUE;
}
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.h b/src/gallium/auxiliary/gallivm/lp_bld_init.h
index 2e32cf8b077..64c5278c24e 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_init.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_init.h
@@ -49,7 +49,7 @@ struct gallivm_state
};
-void
+boolean
lp_build_init(void);
diff --git a/src/gallium/drivers/llvmpipe/lp_jit.c b/src/gallium/drivers/llvmpipe/lp_jit.c
index 261702f7109..9acde4f1b06 100644
--- a/src/gallium/drivers/llvmpipe/lp_jit.c
+++ b/src/gallium/drivers/llvmpipe/lp_jit.c
@@ -231,10 +231,10 @@ lp_jit_screen_cleanup(struct llvmpipe_screen *screen)
}
-void
+boolean
lp_jit_screen_init(struct llvmpipe_screen *screen)
{
- lp_build_init();
+ return lp_build_init();
}
diff --git a/src/gallium/drivers/llvmpipe/lp_jit.h b/src/gallium/drivers/llvmpipe/lp_jit.h
index 1325a8cc482..097fa7dce7c 100644
--- a/src/gallium/drivers/llvmpipe/lp_jit.h
+++ b/src/gallium/drivers/llvmpipe/lp_jit.h
@@ -252,7 +252,7 @@ void
lp_jit_screen_cleanup(struct llvmpipe_screen *screen);
-void
+boolean
lp_jit_screen_init(struct llvmpipe_screen *screen);
diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
index e6597e95ea4..30253222910 100644
--- a/src/gallium/drivers/llvmpipe/lp_screen.c
+++ b/src/gallium/drivers/llvmpipe/lp_screen.c
@@ -557,6 +557,9 @@ llvmpipe_create_screen(struct sw_winsys *winsys)
return NULL;
#endif
+ if (!lp_jit_screen_init(screen))
+ return NULL;
+
#ifdef DEBUG
LP_DEBUG = debug_get_flags_option("LP_DEBUG", lp_debug_flags, 0 );
#endif
@@ -588,8 +591,6 @@ llvmpipe_create_screen(struct sw_winsys *winsys)
llvmpipe_init_screen_resource_funcs(&screen->base);
- lp_jit_screen_init(screen);
-
screen->num_threads = util_cpu_caps.nr_cpus > 1 ? util_cpu_caps.nr_cpus : 0;
#ifdef PIPE_SUBSYSTEM_EMBEDDED
screen->num_threads = 0;
diff --git a/src/gallium/drivers/llvmpipe/lp_test_main.c b/src/gallium/drivers/llvmpipe/lp_test_main.c
index 8a896becf53..c7b6d65fa30 100644
--- a/src/gallium/drivers/llvmpipe/lp_test_main.c
+++ b/src/gallium/drivers/llvmpipe/lp_test_main.c
@@ -376,6 +376,9 @@ int main(int argc, char **argv)
fpstate = util_fpstate_get();
util_fpstate_set_denorms_to_zero(fpstate);
+ if (!lp_build_init())
+ return 1;
+
for(i = 1; i < argc; ++i) {
if(strcmp(argv[i], "-v") == 0)
++verbose;
@@ -387,8 +390,6 @@ int main(int argc, char **argv)
n = atoi(argv[i]);
}
- lp_build_init();
-
#ifdef DEBUG
if (verbose >= 2) {
gallivm_debug |= GALLIVM_DEBUG_IR;