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 <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
637776629d
commit
6571000071
|
@ -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 {
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -295,6 +295,8 @@ radv_create_shader_variants_from_pipeline_cache(struct radv_device *device,
|
|||
free(entry);
|
||||
entry = 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,
|
|||
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
memcpy(variants, entry->variants, sizeof(entry->variants));
|
||||
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.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue