diff options
-rw-r--r-- | src/amd/vulkan/radv_debug.h | 1 | ||||
-rw-r--r-- | src/amd/vulkan/radv_device.c | 1 | ||||
-rw-r--r-- | src/amd/vulkan/radv_pipeline_cache.c | 25 |
3 files changed, 22 insertions, 5 deletions
diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h index 2d35f4e1386..2ec460ec15a 100644 --- a/src/amd/vulkan/radv_debug.h +++ b/src/amd/vulkan/radv_debug.h @@ -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 { diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index b7dddd27a3a..eeac9d3adca 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -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}, diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c index db7afe5a48c..031d910550c 100644 --- a/src/amd/vulkan/radv_pipeline_cache.c +++ b/src/amd/vulkan/radv_pipeline_cache.c @@ -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. */ |