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,