From 519c4c10f3190ffd51ee56399707a7b5766a87e2 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Thu, 9 Oct 2025 18:05:08 -0400 Subject: [PATCH] nvk/query: Pass an IS_TIMESTAMP flag explicitly to the CL kernel This is more robust than looking at the report stride. Part-of: --- src/nouveau/vulkan/cl/nvk_query.cl | 2 +- src/nouveau/vulkan/cl/nvk_query.h | 2 ++ src/nouveau/vulkan/nvk_query_pool.c | 3 +++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/nouveau/vulkan/cl/nvk_query.cl b/src/nouveau/vulkan/cl/nvk_query.cl index b4371b2da09..8ffedbb29da 100644 --- a/src/nouveau/vulkan/cl/nvk_query.cl +++ b/src/nouveau/vulkan/cl/nvk_query.cl @@ -26,7 +26,7 @@ nvk_copy_queries(uint64_t pool_addr, uint query_start, uint query_stride, uint64_t dst_offset = dst_stride * (uint64_t)i; uint num_reports = 1; - if (query_stride == sizeof(struct nvk_query_report)) { + 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); diff --git a/src/nouveau/vulkan/cl/nvk_query.h b/src/nouveau/vulkan/cl/nvk_query.h index ca917047251..ed697253340 100644 --- a/src/nouveau/vulkan/cl/nvk_query.h +++ b/src/nouveau/vulkan/cl/nvk_query.h @@ -6,6 +6,8 @@ #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 f53c2731d46..0fa9708668d 100644 --- a/src/nouveau/vulkan/nvk_query_pool.c +++ b/src/nouveau/vulkan/nvk_query_pool.c @@ -796,6 +796,9 @@ nvk_meta_copy_query_pool_results(struct nvk_cmd_buffer *cmd, return; } + if (pool->vk.query_type == VK_QUERY_TYPE_TIMESTAMP) + flags |= NVK_QUERY_IS_TIMESTAMP; + const struct nvk_copy_query_push push = { .pool_addr = pool->mem->va->addr, .query_start = pool->query_start,