Function Prototype

vkCmdBeginQueryIndexedEXT

Begin an indexed query
primary / secondary
both
graphics / compute / decode / encode
action / state

To begin an indexed query, call:

void vkCmdBeginQueryIndexedEXT(
    VkCommandBuffer commandBuffer,
    VkQueryPool queryPool,
    uint32_t query,
    VkQueryControlFlags flags,
    uint32_t index);
  • commandBuffer is the command buffer into which this command will be recorded.
  • queryPool is the query pool that will manage the results of the query.
  • query is the query index within the query pool that will contain the results.
  • flags is a bitmask of VkQueryControlFlagBits specifying constraints on the types of queries that can be performed.
  • index is the query type specific index. When the query type is VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT or VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT, the index represents the vertex stream.

The vkCmdBeginQueryIndexedEXT command operates the same as the vkCmdBeginQuery command, except that it also accepts a query type specific index parameter.

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

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

The second synchronization scope includes all commands which reference the queries in queryPool indicated by query and index that occur later in submission order.

The operation of this command happens after the first scope and happens before the second scope.

Valid Usage

VUID-vkCmdBeginQueryIndexedEXT-None-00807

All queries used by the command must be unavailable

VUID-vkCmdBeginQueryIndexedEXT-queryType-02804

The queryType used to create queryPool must not be VK_QUERY_TYPE_TIMESTAMP

VUID-vkCmdBeginQueryIndexedEXT-queryType-04728

The queryType used to create queryPool must not be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR or VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR

VUID-vkCmdBeginQueryIndexedEXT-queryType-06741

The queryType used to create queryPool must not be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR or VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR

VUID-vkCmdBeginQueryIndexedEXT-queryType-04729

The queryType used to create queryPool must not be VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV

VUID-vkCmdBeginQueryIndexedEXT-queryType-00800

If the occlusionQueryPrecise feature is not enabled, or the queryType used to create queryPool was not VK_QUERY_TYPE_OCCLUSION, flags must not contain VK_QUERY_CONTROL_PRECISE_BIT

VUID-vkCmdBeginQueryIndexedEXT-query-00802

query must be less than the number of queries in queryPool

VUID-vkCmdBeginQueryIndexedEXT-queryType-00803

If the queryType used to create queryPool was VK_QUERY_TYPE_OCCLUSION, the VkCommandPool that commandBuffer was allocated from must support graphics operations

VUID-vkCmdBeginQueryIndexedEXT-queryType-00804

If the queryType used to create queryPool was VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the pipelineStatistics indicate graphics operations, the VkCommandPool that commandBuffer was allocated from must support graphics operations

VUID-vkCmdBeginQueryIndexedEXT-queryType-00805

If the queryType used to create queryPool was VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the pipelineStatistics indicate compute operations, the VkCommandPool that commandBuffer was allocated from must support compute operations

VUID-vkCmdBeginQueryIndexedEXT-query-00808

If 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-vkCmdBeginQueryIndexedEXT-queryType-07126

If the queryType used to create queryPool was VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then the VkCommandPool that commandBuffer was allocated from must have been created with a queue family index that supports result status queries, as indicated by VkQueueFamilyQueryResultStatusPropertiesKHR::queryResultStatusSupport

VUID-vkCmdBeginQueryIndexedEXT-None-07127

If there is a bound video session, then there must be no active queries

VUID-vkCmdBeginQueryIndexedEXT-None-08370

If there is a bound video session, then it must not have been created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR

VUID-vkCmdBeginQueryIndexedEXT-queryType-07128

If the queryType used to create queryPool was VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR and there is a bound video session, then queryPool must have been created with a VkVideoProfileInfoKHR structure included in the pNext chain of VkQueryPoolCreateInfo identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile the bound video session was created with

VUID-vkCmdBeginQueryIndexedEXT-queryType-07129

If the queryType used to create queryPool was VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be a bound video session

VUID-vkCmdBeginQueryIndexedEXT-queryType-07130

If the queryType used to create queryPool was VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR and there is a bound video session, then queryPool must have been created with a VkVideoProfileInfoKHR structure included in the pNext chain of VkQueryPoolCreateInfo identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile the bound video session was created with

VUID-vkCmdBeginQueryIndexedEXT-queryType-07131

If the queryType used to create queryPool was not VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR or VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be no bound video session

VUID-vkCmdBeginQueryIndexedEXT-queryPool-04753

If the queryPool was created with the same queryType as that of another active query within commandBuffer, then index must not match the index used for the active query

VUID-vkCmdBeginQueryIndexedEXT-queryType-02338

If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the VkCommandPool that commandBuffer was allocated from must support graphics operations

VUID-vkCmdBeginQueryIndexedEXT-queryType-02339

If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT the index parameter must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams

VUID-vkCmdBeginQueryIndexedEXT-queryType-06692

If the queryType used to create queryPool was not VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT and not VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT, the index must be zero

VUID-vkCmdBeginQueryIndexedEXT-queryType-06689

If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT the VkCommandPool that commandBuffer was allocated from must support graphics operations

VUID-vkCmdBeginQueryIndexedEXT-queryType-06690

If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT the index parameter must be less than VkPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams

VUID-vkCmdBeginQueryIndexedEXT-queryType-06691

If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT and the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled, the index parameter must be zero

VUID-vkCmdBeginQueryIndexedEXT-queryType-06693

If the queryType used to create queryPool was VK_QUERY_TYPE_PRIMITIVES_GENERATED_EXT then primitivesGeneratedQuerymust be enabled

VUID-vkCmdBeginQueryIndexedEXT-queryType-02341

If the queryType used to create queryPool was VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT then VkPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackQueriesmust be supported

VUID-vkCmdBeginQueryIndexedEXT-queryType-07071

The queryType used to create queryPool must not be VK_QUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT

VUID-vkCmdBeginQueryIndexedEXT-queryPool-07289

If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, then the VkQueryPoolPerformanceCreateInfoKHR::queueFamilyIndex

queryPool was created with must equal the queue family index of the VkCommandPool that commandBuffer was allocated from

VUID-vkCmdBeginQueryIndexedEXT-queryPool-03223

If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, the profiling lock must have been held before vkBeginCommandBuffer was called on commandBuffer

VUID-vkCmdBeginQueryIndexedEXT-queryPool-03224

If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and one of the counters used to create queryPool was VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the query begin must be the first recorded command in commandBuffer

VUID-vkCmdBeginQueryIndexedEXT-queryPool-03225

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

VUID-vkCmdBeginQueryIndexedEXT-queryPool-03226

If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR and another query pool with a queryType VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR has been used within commandBuffer, its parent primary command buffer or secondary command buffer recorded within the same parent primary command buffer as commandBuffer, the performanceCounterMultipleQueryPools feature must be enabled

VUID-vkCmdBeginQueryIndexedEXT-None-02863

If queryPool was created with a queryType of VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must not be recorded in a command buffer that, either directly or through secondary command buffers, also contains a vkCmdResetQueryPool command affecting the same query

Valid Usage (Implicit)

VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-cmdpool

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

VUID-vkCmdBeginQueryIndexedEXT-videocoding

This command must only be called outside of a video coding scope

VUID-vkCmdBeginQueryIndexedEXT-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 ::