From c8093e6cb150e6dff58da5d7f3e5b2ca80e02fdc Mon Sep 17 00:00:00 2001 From: Benjamin Cheng Date: Wed, 8 Oct 2025 13:25:23 -0400 Subject: [PATCH] radv: Output requested encode query results only Video encode feedback queries have a configurable set of feedback bits, specified in VkQueryPoolVideoEncodeFeedbackCreateInfoKHR::encodeFeedbackFlags. Only the bits specified should be output when retrieving results. Fixes: 1d74661dfd6 ("radv: add encoder queue support pieces and encoder queries.") Reviewed-by: David Rosca Part-of: --- src/amd/vulkan/radv_query.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/amd/vulkan/radv_query.c b/src/amd/vulkan/radv_query.c index bad5ee9b690..5c0c83cb316 100644 --- a/src/amd/vulkan/radv_query.c +++ b/src/amd/vulkan/radv_query.c @@ -2408,23 +2408,29 @@ radv_GetQueryPoolResults(VkDevice _device, VkQueryPool queryPool, uint32_t first if (flags & VK_QUERY_RESULT_64_BIT) { uint64_t *dest64 = (uint64_t *)dest; if (available || (flags & VK_QUERY_RESULT_PARTIAL_BIT)) { - dest64[0] = src32[5]; - dest64[1] = src32[6] - src32[8]; + if (pool->vk.encode_feedback_flags & VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR) + *dest64++ = src32[5]; + if (pool->vk.encode_feedback_flags & VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR) + *dest64++ = src32[6] - src32[8]; } - dest += 16; + dest += util_bitcount(pool->vk.encode_feedback_flags) * sizeof(uint64_t); + if (flags & VK_QUERY_RESULT_WITH_STATUS_BIT_KHR) { - dest64[2] = 1; - dest += 8; + *dest64++ = 1; + dest += 4; } } else { uint32_t *dest32 = (uint32_t *)dest; if (available || (flags & VK_QUERY_RESULT_PARTIAL_BIT)) { - dest32[0] = src32[5]; - dest32[1] = src32[6] - src32[8]; + if (pool->vk.encode_feedback_flags & VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BUFFER_OFFSET_BIT_KHR) + *dest32++ = src32[5]; + if (pool->vk.encode_feedback_flags & VK_VIDEO_ENCODE_FEEDBACK_BITSTREAM_BYTES_WRITTEN_BIT_KHR) + *dest32++ = src32[6] - src32[8]; } - dest += 8; + dest += util_bitcount(pool->vk.encode_feedback_flags) * sizeof(uint32_t); + if (flags & VK_QUERY_RESULT_WITH_STATUS_BIT_KHR) { - dest32[2] = 1; + *dest32++ = 1; dest += 4; } }