radv: add debug option to turn off in memory cache
authorTimothy Arceri <tarceri@itsqueeze.com>
Fri, 12 Jul 2019 04:45:16 +0000 (14:45 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Sat, 26 Oct 2019 02:04:12 +0000 (13:04 +1100)
This can be usefull for debugging the on disk cache, but is also
useful in the following patch for secure compiles which will be
used to compile huge pipeline collections. These pipeline
collections can be multiple GBs and the in memory cache grows to
multiple GBs very quickly when they are compiled so we want to
be able to turn off the in memory cache.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_debug.h
src/amd/vulkan/radv_device.c
src/amd/vulkan/radv_pipeline_cache.c

index 2d35f4e13867bc856abdcaf9e1feb00c10c025e2..2ec460ec15a16e55c66ed768916b29f6383a2b15 100644 (file)
@@ -56,6 +56,7 @@ enum {
        RADV_DEBUG_NO_SHADER_BALLOT  = 0x4000000,
        RADV_DEBUG_ALL_ENTRYPOINTS   = 0x8000000,
        RADV_DEBUG_DUMP_META_SHADERS = 0x10000000,
+       RADV_DEBUG_NO_MEMORY_CACHE   = 0x20000000,
 };
 
 enum {
index b7dddd27a3a70a0e7843f2f6ac50d4f0dbc28789..eeac9d3adca3e21d4306b6f9a29c818c7a148762 100644 (file)
@@ -434,6 +434,7 @@ static const struct debug_control radv_debug_options[] = {
        {"nodcc", RADV_DEBUG_NO_DCC},
        {"shaders", RADV_DEBUG_DUMP_SHADERS},
        {"nocache", RADV_DEBUG_NO_CACHE},
+       {"nomemorycache", RADV_DEBUG_NO_MEMORY_CACHE},
        {"shaderstats", RADV_DEBUG_DUMP_SHADER_STATS},
        {"nohiz", RADV_DEBUG_NO_HIZ},
        {"nocompute", RADV_DEBUG_NO_COMPUTE_QUEUE},
index db7afe5a48cb0942a2206def67bc2e1a48cf3aec..031d910550c3373bed037b9bff85867607067a8d 100644 (file)
@@ -295,7 +295,9 @@ radv_create_shader_variants_from_pipeline_cache(struct radv_device *device,
                        free(entry);
                        entry = new_entry;
 
-                       radv_pipeline_cache_add_entry(cache, new_entry);
+                       if (!(device->instance->debug_flags & RADV_DEBUG_NO_MEMORY_CACHE) ||
+                           cache != device->mem_cache)
+                               radv_pipeline_cache_add_entry(cache, new_entry);
                }
        }
 
@@ -314,11 +316,17 @@ radv_create_shader_variants_from_pipeline_cache(struct radv_device *device,
 
        }
 
-       for (int i = 0; i < MESA_SHADER_STAGES; ++i)
-               if (entry->variants[i])
-                       p_atomic_inc(&entry->variants[i]->ref_count);
-
        memcpy(variants, entry->variants, sizeof(entry->variants));
+
+       if (device->instance->debug_flags & RADV_DEBUG_NO_MEMORY_CACHE &&
+           cache == device->mem_cache)
+               vk_free(&cache->alloc, entry);
+       else {
+               for (int i = 0; i < MESA_SHADER_STAGES; ++i)
+                       if (entry->variants[i])
+                               p_atomic_inc(&entry->variants[i]->ref_count);
+       }
+
        pthread_mutex_unlock(&cache->mutex);
        return true;
 }
@@ -398,6 +406,13 @@ radv_pipeline_cache_insert_shaders(struct radv_device *device,
                               disk_sha1, entry, entry_size(entry), NULL);
        }
 
+       if (device->instance->debug_flags & RADV_DEBUG_NO_MEMORY_CACHE &&
+           cache == device->mem_cache) {
+               vk_free2(&cache->alloc, NULL, entry);
+               pthread_mutex_unlock(&cache->mutex);
+               return;
+       }
+
        /* We delay setting the variant so we have reproducible disk cache
         * items.
         */