From 56bd81ee21cb42e4a5afa2939514b570a1283754 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 27 Jul 2022 08:51:29 +0000 Subject: [PATCH] anv/perf: fixup counter/query mapping The intel_perf_counter_pass::pass field is actually useless and invalid. Once you have mapped all the counters to all the metrics, the order of the metrics capture is dictated by intel_perf_get_n_passes(). When reading values that is the order we should follow. Signed-off-by: Lionel Landwerlin Fixes: 2001a80d4a81 ("anv: Implement VK_KHR_performance_query") Reviewed-by: Ivan Briano Part-of: --- src/intel/perf/intel_perf.c | 5 +---- src/intel/perf/intel_perf.h | 1 - src/intel/vulkan/anv_perf.c | 4 +++- src/intel/vulkan_hasvk/anv_perf.c | 4 +++- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/intel/perf/intel_perf.c b/src/intel/perf/intel_perf.c index a3ae2556cbf..e1b482c9d04 100644 --- a/src/intel/perf/intel_perf.c +++ b/src/intel/perf/intel_perf.c @@ -985,12 +985,9 @@ intel_perf_get_counters_passes(struct intel_perf_config *perf, } } - if (pass_idx == UINT32_MAX) { + if (pass_idx == UINT32_MAX) pass_array[n_written_passes] = counter_pass[i].query; - pass_idx = n_written_passes++; - } - counter_pass[i].pass = pass_idx; assert(n_written_passes <= n_passes); } } diff --git a/src/intel/perf/intel_perf.h b/src/intel/perf/intel_perf.h index 207c2378121..6a9f8352b53 100644 --- a/src/intel/perf/intel_perf.h +++ b/src/intel/perf/intel_perf.h @@ -415,7 +415,6 @@ struct intel_perf_config { struct intel_perf_counter_pass { struct intel_perf_query_info *query; struct intel_perf_query_counter *counter; - uint32_t pass; }; /** Initialize the intel_perf_config object for a given device. diff --git a/src/intel/vulkan/anv_perf.c b/src/intel/vulkan/anv_perf.c index 49cbef52a07..3e970b2fb03 100644 --- a/src/intel/vulkan/anv_perf.c +++ b/src/intel/vulkan/anv_perf.c @@ -430,10 +430,12 @@ anv_perf_write_pass_results(struct intel_perf_config *perf, const struct intel_perf_query_result *accumulated_results, union VkPerformanceCounterResultKHR *results) { + const struct intel_perf_query_info *query = pool->pass_query[pass]; + for (uint32_t c = 0; c < pool->n_counters; c++) { const struct intel_perf_counter_pass *counter_pass = &pool->counter_pass[c]; - if (counter_pass->pass != pass) + if (counter_pass->query != query) continue; switch (pool->pass_query[pass]->kind) { diff --git a/src/intel/vulkan_hasvk/anv_perf.c b/src/intel/vulkan_hasvk/anv_perf.c index 3aac07fd72a..b0372ec35ae 100644 --- a/src/intel/vulkan_hasvk/anv_perf.c +++ b/src/intel/vulkan_hasvk/anv_perf.c @@ -440,10 +440,12 @@ anv_perf_write_pass_results(struct intel_perf_config *perf, const struct intel_perf_query_result *accumulated_results, union VkPerformanceCounterResultKHR *results) { + const struct intel_perf_query_info *query = pool->pass_query[pass]; + for (uint32_t c = 0; c < pool->n_counters; c++) { const struct intel_perf_counter_pass *counter_pass = &pool->counter_pass[c]; - if (counter_pass->pass != pass) + if (counter_pass->query != query) continue; switch (pool->pass_query[pass]->kind) {