From c6e9dd8af6ad00e62849a8287562d977724f18cb Mon Sep 17 00:00:00 2001 From: Mary Guillemard Date: Mon, 4 May 2026 19:06:30 +0200 Subject: [PATCH] nvk: Move report offset to reports_start for nvk_CmdCopyQueryPoolResults That remove the need of a special case for timestamp and will allow some simplification for MME copies. Signed-off-by: Mary Guillemard Reviewed-by: Mel Henning --- src/nouveau/vulkan/cl/nvk_query.cl | 16 +++------------- src/nouveau/vulkan/cl/nvk_query.h | 2 -- src/nouveau/vulkan/nvk_query_pool.c | 7 +++++-- 3 files changed, 8 insertions(+), 17 deletions(-) diff --git a/src/nouveau/vulkan/cl/nvk_query.cl b/src/nouveau/vulkan/cl/nvk_query.cl index 580521ca4ca..737cf9c2246 100644 --- a/src/nouveau/vulkan/cl/nvk_query.cl +++ b/src/nouveau/vulkan/cl/nvk_query.cl @@ -21,22 +21,12 @@ nvk_copy_queries(uint64_t pool_addr, uint available_stride, bool write_results = available || (flags & VK_QUERY_RESULT_PARTIAL_BIT); uint64_t report_offs = reports_start + (uint64_t)query * (uint64_t)query_stride; - global struct nvk_query_report *report = - (global void *)(pool_addr + report_offs); + global uint64_t *report = (global uint64_t *)(pool_addr + report_offs); uint64_t dst_offset = dst_stride * (uint64_t)i; - if (flags & NVK_QUERY_IS_TIMESTAMP) { - /* Timestamp queries are the only ones use a single report */ - if (write_results) { - vk_write_query(dst_addr + dst_offset, 0, flags, report->timestamp); - } - } else { - if (write_results) { - for (uint r = 0; r < report_count; ++r) { - vk_write_query(dst_addr + dst_offset, r, flags, report[r].value); - } - } + for (uint r = 0; r < report_count; ++r) { + vk_write_query(dst_addr + dst_offset, r, flags, report[r * 2]); } if (flags & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT) { diff --git a/src/nouveau/vulkan/cl/nvk_query.h b/src/nouveau/vulkan/cl/nvk_query.h index ed697253340..ca917047251 100644 --- a/src/nouveau/vulkan/cl/nvk_query.h +++ b/src/nouveau/vulkan/cl/nvk_query.h @@ -6,8 +6,6 @@ #include "compiler/libcl/libcl.h" -#define NVK_QUERY_IS_TIMESTAMP 0x80000000u - struct nvk_query_report { uint64_t value; uint64_t timestamp; diff --git a/src/nouveau/vulkan/nvk_query_pool.c b/src/nouveau/vulkan/nvk_query_pool.c index a7f08bc49d6..e5b583efa13 100644 --- a/src/nouveau/vulkan/nvk_query_pool.c +++ b/src/nouveau/vulkan/nvk_query_pool.c @@ -1015,13 +1015,16 @@ nvk_meta_copy_query_pool_results(struct nvk_cmd_buffer *cmd, return; } + uint64_t reports_start = pool->reports_start; if (pool->vk.query_type == VK_QUERY_TYPE_TIMESTAMP) - flags |= NVK_QUERY_IS_TIMESTAMP; + reports_start += offsetof(struct nvk_query_report, timestamp); + else + reports_start += offsetof(struct nvk_query_report, value); const struct nvk_copy_query_push push = { .pool_addr = pool->mem->va->addr, .available_stride = nvk_query_available_stride_B(pool), - .reports_start = pool->reports_start, + .reports_start = reports_start, .report_count = vk_query_pool_report_count(&pool->vk), .query_stride = pool->query_stride, .first_query = first_query,