diff options
-rw-r--r-- | src/gallium/auxiliary/draw/draw_context.c | 2 | ||||
-rw-r--r-- | src/gallium/auxiliary/draw/draw_llvm.c | 5 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_init.c | 16 | ||||
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_init.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_jit.c | 4 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_jit.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_screen.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_test_main.c | 5 |
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; |