From ff2caf1513585d1dc60e4b2c66ae5c75ff6372b1 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Tue, 31 Mar 2026 13:26:35 +0200 Subject: [PATCH] radv: Set debug info in radv_shader_create_uncached Avoids patching the stats in radv_shader_create and it will allow adding shader args debug info to some prologs. Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_pipeline_cache.c | 9 ++------- src/amd/vulkan/radv_pipeline_rt.c | 3 +-- src/amd/vulkan/radv_shader.c | 10 +++++++--- src/amd/vulkan/radv_shader.h | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c index c3fa4084c79..7d536451405 100644 --- a/src/amd/vulkan/radv_pipeline_cache.c +++ b/src/amd/vulkan/radv_pipeline_cache.c @@ -69,7 +69,7 @@ radv_shader_deserialize(struct radv_device *device, const void *key_data, size_t const struct radv_shader_binary *binary = blob_read_bytes(blob, sizeof(struct radv_shader_binary)); struct radv_shader *shader; - radv_shader_create_uncached(device, binary, false, NULL, &shader); + radv_shader_create_uncached(device, binary, false, NULL, NULL, &shader); if (!shader) return NULL; @@ -166,12 +166,7 @@ radv_shader_create(struct radv_device *device, struct vk_pipeline_cache *cache, { if (radv_is_cache_disabled(device, cache) || skip_cache || (dbg && dbg->dump_shader)) { struct radv_shader *shader; - radv_shader_create_uncached(device, binary, false, NULL, &shader); - if (dbg) { - struct amd_stats *stats = shader->dbg.statistics; - shader->dbg = *dbg; - shader->dbg.statistics = stats; - } + radv_shader_create_uncached(device, binary, false, NULL, dbg, &shader); return shader; } diff --git a/src/amd/vulkan/radv_pipeline_rt.c b/src/amd/vulkan/radv_pipeline_rt.c index 430e7c47cdc..4ddb075b9d8 100644 --- a/src/amd/vulkan/radv_pipeline_rt.c +++ b/src/amd/vulkan/radv_pipeline_rt.c @@ -543,12 +543,11 @@ radv_rt_compile_nir(struct radv_device *device, struct vk_pipeline_cache *cache, struct radv_shader *shader; if (replay_block || replayable) { - VkResult result = radv_shader_create_uncached(device, binary, replayable, replay_block, &shader); + VkResult result = radv_shader_create_uncached(device, binary, replayable, replay_block, &debug, &shader); if (result != VK_SUCCESS) { free(binary); return result; } - shader->dbg = debug; } else { shader = radv_shader_create(device, cache, binary, skip_shaders_cache, &debug); } diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index f1f544704a2..c08fedb53df 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -2962,7 +2962,8 @@ radv_parse_binary_debug_info(struct radv_device *device, const struct radv_shade VkResult radv_shader_create_uncached(struct radv_device *device, const struct radv_shader_binary *binary, bool replayable, - struct radv_serialized_shader_arena_block *replay_block, struct radv_shader **out_shader) + struct radv_serialized_shader_arena_block *replay_block, struct radv_shader_debug_info *dbg, + struct radv_shader **out_shader) { VkResult result = VK_SUCCESS; struct radv_shader *shader = calloc(1, sizeof(struct radv_shader)); @@ -2980,6 +2981,9 @@ radv_shader_create_uncached(struct radv_device *device, const struct radv_shader shader->config = binary->config; shader->max_waves = radv_get_max_waves(device, &shader->config, &shader->info); + if (dbg) + shader->dbg = *dbg; + if (binary->type == RADV_BINARY_TYPE_RTLD) { #if !defined(USE_LIBELF) goto out; @@ -3470,7 +3474,7 @@ radv_create_trap_handler_shader(struct radv_device *device) radv_postprocess_binary_config(device, binary, &args); struct radv_shader *shader; - radv_shader_create_uncached(device, binary, false, NULL, &shader); + radv_shader_create_uncached(device, binary, false, NULL, NULL, &shader); radv_parse_binary_debug_info(device, binary, &shader->dbg); if (options.dump_shader) { @@ -3543,7 +3547,7 @@ radv_compile_rt_prolog(struct radv_device *device, struct radv_shader_stage *sta binary->info = stage->info; radv_postprocess_binary_config(device, binary, &stage->args); - radv_shader_create_uncached(device, binary, false, NULL, &prolog); + radv_shader_create_uncached(device, binary, false, NULL, NULL, &prolog); if (!prolog || radv_parse_binary_debug_info(device, binary, &prolog->dbg) != VK_SUCCESS) goto done; diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index 8579b85d5c8..1a61c4a3225 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -532,7 +532,7 @@ VkResult radv_parse_binary_debug_info(struct radv_device *device, const struct r VkResult radv_shader_create_uncached(struct radv_device *device, const struct radv_shader_binary *binary, bool replayable, struct radv_serialized_shader_arena_block *replay_block, - struct radv_shader **out_shader); + struct radv_shader_debug_info *dbg, struct radv_shader **out_shader); struct radv_shader_binary *radv_shader_nir_to_asm(struct radv_device *device, struct radv_shader_stage *pl_stage, struct nir_shader *const *shaders, int shader_count,