diff options
author | Alex Smith <[email protected]> | 2017-10-27 14:25:05 +0100 |
---|---|---|
committer | Bas Nieuwenhuizen <[email protected]> | 2017-10-29 00:28:45 +0200 |
commit | de889794134e6245e08a24425a6d686a1be584b8 (patch) | |
tree | 1ed5daf5009b6ffaf10a70d5fb83d067028fe6b4 /src/amd/vulkan/radv_pipeline_cache.c | |
parent | 0a23841a98dacad1fbc81f34479ce194e86fc99a (diff) |
radv: Implement VK_AMD_shader_info
This allows an app to query shader statistics and get a disassembly of
a shader. RenderDoc git has support for it, so this allows you to view
shader disassembly from a capture.
When this extension is enabled on a device (or when tracing), we now
disable pipeline caching, since we don't get the shader debug info when
we retrieve cached shaders.
v2: Improvements to resource usage reporting
v3: Disassembly string must be null terminated (string_buffer's length
does not include the terminator)
v4: Fixed LDS reporting. (Bas)
Signed-off-by: Alex Smith <[email protected]>
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 | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c index 5dee1147491..441e2257d55 100644 --- a/src/amd/vulkan/radv_pipeline_cache.c +++ b/src/amd/vulkan/radv_pipeline_cache.c @@ -62,9 +62,11 @@ radv_pipeline_cache_init(struct radv_pipeline_cache *cache, cache->hash_table = malloc(byte_size); /* We don't consider allocation failure fatal, we just start with a 0-sized - * cache. */ + * cache. Disable caching when we want to keep shader debug info, since + * we don't get the debug info on cached shaders. */ if (cache->hash_table == NULL || - (device->instance->debug_flags & RADV_DEBUG_NO_CACHE)) + (device->instance->debug_flags & RADV_DEBUG_NO_CACHE) || + device->keep_shader_info) cache->table_size = 0; else memset(cache->hash_table, 0, byte_size); @@ -186,8 +188,11 @@ radv_create_shader_variants_from_pipeline_cache(struct radv_device *device, entry = radv_pipeline_cache_search_unlocked(cache, sha1); if (!entry) { + /* Again, don't cache when we want debug info, since this isn't + * present in the cache. */ if (!device->physical_device->disk_cache || - (device->instance->debug_flags & RADV_DEBUG_NO_CACHE)) { + (device->instance->debug_flags & RADV_DEBUG_NO_CACHE) || + device->keep_shader_info) { pthread_mutex_unlock(&cache->mutex); return false; } |