vkCmdBeginQueryIndexedEXT
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 isVK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
orVK_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
primitivesGeneratedQuery
must be enabled
VUID-vkCmdBeginQueryIndexedEXT-queryType-02341
If the queryType
used to create queryPool
was
VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
then
VkPhysicalDeviceTransformFeedbackPropertiesEXT
::transformFeedbackQueries
must 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-parameter
commandBuffer
must be a valid VkCommandBuffer handle
VUID-vkCmdBeginQueryIndexedEXT-queryPool-parameter
queryPool
must be a valid VkQueryPool handle
VUID-vkCmdBeginQueryIndexedEXT-flags-parameter
flags
must be a valid combination of VkQueryControlFlagBits values
VUID-vkCmdBeginQueryIndexedEXT-commandBuffer-recording
commandBuffer
must be in the recording state
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
thatcommandBuffer
was allocated from must be externally synchronized ::