radeonsi: tell the shader disk cache what IR is used
authorPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Wed, 30 Oct 2019 13:28:01 +0000 (14:28 +0100)
committerPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Thu, 31 Oct 2019 09:43:40 +0000 (10:43 +0100)
Until 8bef4df196fbb the IR (TGSI or NIR) was used in disk_cache driver_flags.
This commit restores this features to avoid crashing when switching from
one IR to the other.

As radeonsi's default is TGSI, I used "driver_flags & 0x8000000 = 0" for TGSI
to keep the same driver_flags.

Fixes: 8bef4df196f ("radeonsi: add si_debug_options for convenient adding/removing of options")
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
src/gallium/drivers/radeonsi/si_pipe.c

index 01c9d89ab4fe5eb7dc2eb9669baf2f00d4ddb0e0..7b68afddcb2e3629d61ffe3626d9bc415d9520f4 100644 (file)
@@ -903,6 +903,9 @@ static void si_disk_cache_create(struct si_screen *sscreen)
        /* These flags affect shader compilation. */
        #define ALL_FLAGS (DBG(SI_SCHED) | DBG(GISEL))
        uint64_t shader_debug_flags = sscreen->debug_flags & ALL_FLAGS;
+       /* Reserve left-most bit for tgsi/nir selector */
+       assert(!(shader_debug_flags & (1 << 31)));
+       shader_debug_flags |= ((sscreen->options.enable_nir & 0x1) << 31);
 
        /* Add the high bits of 32-bit addresses, which affects
         * how 32-bit addresses are expanded to 64 bits.
@@ -1026,6 +1029,13 @@ radeonsi_screen_create_impl(struct radeon_winsys *ws,
                return NULL;
        }
 
+       {
+#define OPT_BOOL(name, dflt, description) \
+               sscreen->options.name = \
+                       driQueryOptionb(config->options, "radeonsi_"#name);
+#include "si_debug_options.h"
+       }
+
        si_disk_cache_create(sscreen);
 
        /* Determine the number of shader compiler threads. */
@@ -1146,13 +1156,6 @@ radeonsi_screen_create_impl(struct radeon_winsys *ws,
        sscreen->commutative_blend_add =
                driQueryOptionb(config->options, "radeonsi_commutative_blend_add");
 
-       {
-#define OPT_BOOL(name, dflt, description) \
-               sscreen->options.name = \
-                       driQueryOptionb(config->options, "radeonsi_"#name);
-#include "si_debug_options.h"
-       }
-
        sscreen->use_ngg = sscreen->info.chip_class >= GFX10 &&
                           sscreen->info.family != CHIP_NAVI14 &&
                           !(sscreen->debug_flags & DBG(NO_NGG));