r600g: Disable LLVM by default at runtime for graphics
authorMichel Dänzer <michel.daenzer@amd.com>
Wed, 16 Apr 2014 06:00:09 +0000 (15:00 +0900)
committerMichel Dänzer <michel@daenzer.net>
Thu, 17 Apr 2014 01:15:59 +0000 (10:15 +0900)
For graphics, the LLVM compiler backend currently has many shortcomings
compared to the non-LLVM one. E.g. it can't handle geometry shaders yet,
but that's just the tip of the iceberg.

So building Mesa with --enable-r600-llvm-compiler is currently not
recommended for anyone who doesn't want to work on fixing those issues.
However, for protection of users who end up enabling it anyway for some
reason, let's disable the LLVM backend at runtime by default. It can be
enabled with the environment variable R600_DEBUG=llvm.

Cc: "10.1" <mesa-stable@lists.freedesktop.org>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/r600/r600_pipe.h
src/gallium/drivers/r600/r600_shader.c

index 3797b56b2f8b5b0f9eee2a6a6e391c315dc57edc..68d739d893757cab98bd637f046287385da0a6e3 100644 (file)
@@ -45,7 +45,7 @@
 static const struct debug_named_value r600_debug_options[] = {
        /* features */
 #if defined(R600_USE_LLVM)
-       { "nollvm", DBG_NO_LLVM, "Disable the LLVM shader compiler" },
+       { "llvm", DBG_LLVM, "Enable the LLVM shader compiler" },
 #endif
        { "nocpdma", DBG_NO_CP_DMA, "Disable CP DMA" },
 
@@ -505,8 +505,8 @@ struct pipe_screen *r600_screen_create(struct radeon_winsys *ws)
                rscreen->b.debug_flags |= DBG_FS | DBG_VS | DBG_GS | DBG_PS | DBG_CS;
        if (debug_get_bool_option("R600_HYPERZ", FALSE))
                rscreen->b.debug_flags |= DBG_HYPERZ;
-       if (!debug_get_bool_option("R600_LLVM", TRUE))
-               rscreen->b.debug_flags |= DBG_NO_LLVM;
+       if (debug_get_bool_option("R600_LLVM", FALSE))
+               rscreen->b.debug_flags |= DBG_LLVM;
 
        if (rscreen->b.family == CHIP_UNKNOWN) {
                fprintf(stderr, "r600: Unknown chipset 0x%04X\n", rscreen->b.info.pci_id);
index a29bb3b3022fae31ea4a4be10099a150565d8da2..f31fa45acb01e9259e38b3e5e9a016fd3ecb1e2a 100644 (file)
@@ -195,7 +195,7 @@ struct r600_gs_rings_state {
 
 /* This must start from 16. */
 /* features */
-#define DBG_NO_LLVM            (1 << 17)
+#define DBG_LLVM               (1 << 17)
 #define DBG_NO_CP_DMA          (1 << 18)
 /* shader backend */
 #define DBG_NO_SB              (1 << 21)
index b4b357ef1d91421d8bd870f8f517d0064f308e94..81d879ac7ad5225cbcb454b4111aee22ec07a54d 100644 (file)
@@ -1538,7 +1538,7 @@ static int r600_shader_from_tgsi(struct r600_context *rctx,
        bool pos_emitted = false;
 
 #ifdef R600_USE_LLVM
-       use_llvm = !(rscreen->b.debug_flags & DBG_NO_LLVM);
+       use_llvm = rscreen->b.debug_flags & DBG_LLVM;
 #endif
        ctx.bc = &shader->bc;
        ctx.shader = shader;