Function Prototype

vkCmdEndQuery

Ends a query
primary / secondary
both
both
graphics / compute / decode / encode
action / state

To end a query after the set of desired drawing or dispatching commands is executed, call:

void vkCmdEndQuery(
    VkCommandBuffer commandBuffer,
    VkQueryPool queryPool,
    uint32_t query);
  • commandBuffer is the command buffer into which this command will be recorded.
  • queryPool is the query pool that is managing the results of the query.
  • query is the query index within the query pool where the result is stored.

The command completes the query in queryPool identified by query, and marks it as available.

This command defines an execution dependency between other query commands that reference the same query.

The first synchronization scope includes all commands which reference the queries in queryPool indicated by query that occur earlier in submission order.

The second synchronization scope includes only the operation of this command.

Calling vkCmdEndQuery is equivalent to calling vkCmdEndQueryIndexedEXT with the index parameter set to zero.

Valid Usage

VUID-vkCmdEndQuery-None-01923

All queries used by the command must be active

VUID-vkCmdEndQuery-query-00810

query must be less than the number of queries in queryPool

VUID-vkCmdEndQuery-query-00812

If vkCmdEndQuery is called within a render pass instance, the sum of query and the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries in queryPool

VUID-vkCmdEndQuery-queryPool-03227

If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one or more of the counters used to create queryPool was VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the vkCmdEndQuery must be the last recorded command in commandBuffer

VUID-vkCmdEndQuery-queryPool-03228

If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one or more of the counters used to create queryPool was VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, the vkCmdEndQuery must not be recorded within a render pass instance

VUID-vkCmdEndQuery-None-07007

If called within a subpass of a render pass instance, the corresponding vkCmdBeginQuery* command must have been called previously within the same subpass

Valid Usage (Implicit)

VUID-vkCmdEndQuery-queryPool-parameter

queryPool must be a valid VkQueryPool handle

VUID-vkCmdEndQuery-commandBuffer-cmdpool

The VkCommandPool that commandBuffer was allocated from must support graphics, compute, decode, or encode operations

VUID-vkCmdEndQuery-commonparent

Both of commandBuffer, and queryPool must have been created, allocated, or retrieved from the same VkDevice

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the VkCommandPool that commandBuffer was allocated from must be externally synchronized ::