diff options
author | Timothy Arceri <[email protected]> | 2019-07-12 14:45:16 +1000 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2019-10-26 13:04:12 +1100 |
commit | 6571000071dd5e60a277200c8d12179a63be41b0 (patch) | |
tree | 7d89b4f4f3951ee0fd4ad855afe73295b316cb7c /src/amd/vulkan/radv_pipeline_cache.c | |
parent | 637776629d0bacc769f84b48dabdfd5e57f44817 (diff) |
radv: add debug option to turn off in memory cache
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 <[email protected]>
Diffstat (limited to 'src/amd/vulkan/radv_pipeline_cache.c')
-rw-r--r-- | src/amd/vulkan/radv_pipeline_cache.c | 25 |
1 files changed, 20 insertions, 5 deletions
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. */ |