From 7c7e8942f82755c7c83e9dfce0019dd1d793f51f Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Thu, 4 Mar 2021 16:41:05 +0000 Subject: [PATCH] radv,aco: remove aco_compiler_statistics This removes a pointer from radv_shader_binary_legacy::data. Signed-off-by: Rhys Perry Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/compiler/aco_interface.cpp | 15 +++++++-------- src/amd/compiler/aco_interface.h | 7 ++----- src/amd/vulkan/radv_pipeline.c | 7 +++---- src/amd/vulkan/radv_shader.h | 2 +- 4 files changed, 13 insertions(+), 18 deletions(-) diff --git a/src/amd/compiler/aco_interface.cpp b/src/amd/compiler/aco_interface.cpp index 358a6b88022..b878ab99ba7 100644 --- a/src/amd/compiler/aco_interface.cpp +++ b/src/amd/compiler/aco_interface.cpp @@ -30,7 +30,7 @@ #include #include -const std::array statistic_infos = []() +static const std::array statistic_infos = []() { std::array ret{}; ret[aco::statistic_hash] = aco_compiler_statistic_info{"Hash", "CRC32 hash of code and constant data"}; @@ -47,6 +47,9 @@ const std::array statistic_inf return ret; }(); +const unsigned aco_num_statistics = aco::num_statistics; +const aco_compiler_statistic_info *aco_statistic_infos = statistic_infos.data(); + static void validate(aco::Program *program) { if (!(aco::debug_flags & aco::DEBUG_VALIDATE_IR)) @@ -196,7 +199,7 @@ void aco_compile_shader(unsigned shader_count, size_t stats_size = 0; if (program->collect_statistics) - stats_size = sizeof(aco_compiler_statistics) + aco::num_statistics * sizeof(uint32_t); + stats_size = aco::num_statistics * sizeof(uint32_t); size += stats_size; size += code.size() * sizeof(uint32_t) + sizeof(radv_shader_binary_legacy); @@ -211,12 +214,8 @@ void aco_compile_shader(unsigned shader_count, legacy_binary->base.is_gs_copy_shader = args->is_gs_copy_shader; legacy_binary->base.total_size = size; - if (program->collect_statistics) { - aco_compiler_statistics *statistics = (aco_compiler_statistics *)legacy_binary->data; - statistics->count = aco::num_statistics; - statistics->infos = statistic_infos.data(); - memcpy(statistics->values, program->statistics, aco::num_statistics * sizeof(uint32_t)); - } + if (program->collect_statistics) + memcpy(legacy_binary->data, program->statistics, aco::num_statistics * sizeof(uint32_t)); legacy_binary->stats_size = stats_size; memcpy(legacy_binary->data + legacy_binary->stats_size, code.data(), code.size() * sizeof(uint32_t)); diff --git a/src/amd/compiler/aco_interface.h b/src/amd/compiler/aco_interface.h index a1036f9bfb2..73ae845dc17 100644 --- a/src/amd/compiler/aco_interface.h +++ b/src/amd/compiler/aco_interface.h @@ -37,11 +37,8 @@ struct aco_compiler_statistic_info { char desc[64]; }; -struct aco_compiler_statistics { - unsigned count; - const struct aco_compiler_statistic_info *infos; - uint32_t values[]; -}; +extern const unsigned aco_num_statistics; +extern const struct aco_compiler_statistic_info *aco_statistic_infos; void aco_compile_shader(unsigned shader_count, struct nir_shader *const *shaders, diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index cdbd42abff7..808003beffe 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -5943,14 +5943,13 @@ VkResult radv_GetPipelineExecutableStatisticsKHR( ++s; if (shader->statistics) { - for (unsigned i = 0; i < shader->statistics->count; i++) { - const struct aco_compiler_statistic_info *info = &shader->statistics->infos[i]; - uint32_t value = shader->statistics->values[i]; + for (unsigned i = 0; i < aco_num_statistics; i++) { + const struct aco_compiler_statistic_info *info = &aco_statistic_infos[i]; if (s < end) { desc_copy(s->name, info->name); desc_copy(s->description, info->desc); s->format = VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR; - s->value.u64 = value; + s->value.u64 = shader->statistics[i]; } ++s; } diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h index eee9507428d..b7ac55ab97b 100644 --- a/src/amd/vulkan/radv_shader.h +++ b/src/amd/vulkan/radv_shader.h @@ -410,7 +410,7 @@ struct radv_shader_variant { char *nir_string; char *disasm_string; char *ir_string; - struct aco_compiler_statistics *statistics; + uint32_t *statistics; struct list_head slab_list; };