gallivm: More fallout from disabling with LLVM 3.6
authorMichel Dänzer <michel.daenzer@amd.com>
Thu, 25 Sep 2014 03:23:02 +0000 (12:23 +0900)
committerMichel Dänzer <michel@daenzer.net>
Fri, 26 Sep 2014 02:35:52 +0000 (11:35 +0900)
The draw module would still try to use gallivm, causing many piglit tests
to fail with an assertion failure. llvmpipe might have been similarly
affected.

Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/auxiliary/draw/draw_context.c
src/gallium/auxiliary/draw/draw_llvm.c
src/gallium/auxiliary/gallivm/lp_bld_init.c
src/gallium/auxiliary/gallivm/lp_bld_init.h
src/gallium/drivers/llvmpipe/lp_jit.c
src/gallium/drivers/llvmpipe/lp_jit.h
src/gallium/drivers/llvmpipe/lp_screen.c
src/gallium/drivers/llvmpipe/lp_test_main.c

index 001446f8e5a16e0d1bf29d287396d07464e036fd..85f8e26eb33cbdb1d7bf204e2d3008063ea61f34 100644 (file)
@@ -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
 
index e8e837a9785949762ff50236b0a03fcf100991b5..504f3efab2eb76c8d11be381863f6ab1c031493b 100644 (file)
@@ -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;
index 243d24891daeb94ce393c5d1f32fca46311ac29f..75ef935eb22969fcbc9bea5f548bc14be75c09f0 100644 (file)
@@ -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;
 }
 
 
index 2e32cf8b077f4eca49b34a84880a7cbdcc7d4366..64c5278c24e14ecd1fcb8b631c8830044e051709 100644 (file)
@@ -49,7 +49,7 @@ struct gallivm_state
 };
 
 
-void
+boolean
 lp_build_init(void);
 
 
index 261702f7109aa44e0e44edb17ccdc09788074dee..9acde4f1b06f281908fd5a9262009f47525ab60c 100644 (file)
@@ -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();
 }
 
 
index 1325a8cc4829146dd93aee60180646588e7a87e8..097fa7dce7c767cc2e5cf4b1822184c4a4c04cde 100644 (file)
@@ -252,7 +252,7 @@ void
 lp_jit_screen_cleanup(struct llvmpipe_screen *screen);
 
 
-void
+boolean
 lp_jit_screen_init(struct llvmpipe_screen *screen);
 
 
index e6597e95ea48912de9e7bf90a09510d53034fbd1..302532229104549117b2fbae41bfbc76b3e8bcf4 100644 (file)
@@ -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;
index 8a896becf5346843e73709adf97eeaad61537460..c7b6d65fa303009abd7f0678363d6604d5215503 100644 (file)
@@ -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;