| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Vulkan.Extensions.VK_EXT_transform_feedback
Description
Name
VK_EXT_transform_feedback - device extension
VK_EXT_transform_feedback
- Name String
VK_EXT_transform_feedback
- Extension Type
- Device extension
- Registered Extension Number
- 29
- Revision
- 1
- Extension and Version Dependencies
- Requires support for Vulkan 1.0
- Requires
VK_KHR_get_physical_device_properties2to be enabled for any device-level functionality
- Special Uses
- Contact
Other Extension Metadata
- Last Modified Date
- 2018-10-09
- Contributors
- Baldur Karlsson, Valve
- Boris Zanin, Mobica
- Daniel Rakos, AMD
- Donald Scorgie, Imagination
- Henri Verbeet, CodeWeavers
- Jan-Harald Fredriksen, Arm
- Jason Ekstrand, Intel
- Jeff Bolz, NVIDIA
- Jesse Barker, Unity
- Jesse Hall, Google
- Pierre-Loup Griffais, Valve
- Philip Rebohle, DXVK
- Ruihao Zhang, Qualcomm
- Samuel Pitoiset, Valve
- Slawomir Grajewski, Intel
- Stu Smith, Imagination Technologies
Description
This extension adds transform feedback to the Vulkan API by exposing the
SPIR-V TransformFeedback and GeometryStreams capabilities to capture
vertex, tessellation or geometry shader outputs to one or more buffers.
It adds API functionality to bind transform feedback buffers to capture
the primitives emitted by the graphics pipeline from SPIR-V outputs
decorated for transform feedback. The transform feedback capture can be
paused and resumed by way of storing and retrieving a byte counter. The
captured data can be drawn again where the vertex count is derived from
the byte counter without CPU intervention. If the implementation is
capable, a vertex stream other than zero can be rasterized.
All these features are designed to match the full capabilities of OpenGL core transform feedback functionality and beyond. Many of the features are optional to allow base OpenGL ES GPUs to also implement this extension.
The primary purpose of the functionality exposed by this extension is to support translation layers from other 3D APIs. This functionality is not considered forward looking, and is not expected to be promoted to a KHR extension or to core Vulkan. Unless this is needed for translation, it is recommended that developers use alternative techniques of using the GPU to process and capture vertex data.
New Commands
cmdBeginTransformFeedbackEXTcmdBindTransformFeedbackBuffersEXTcmdDrawIndirectByteCountEXTcmdEndQueryIndexedEXTcmdEndTransformFeedbackEXT
New Structures
Extending
PhysicalDeviceProperties2:Extending
PipelineRasterizationStateCreateInfo:
New Bitmasks
New Enum Constants
EXT_TRANSFORM_FEEDBACK_SPEC_VERSIONExtending
AccessFlagBits:Extending
BufferUsageFlagBits:Extending
PipelineStageFlagBits:Extending
QueryType:Extending
StructureType:
Issues
1) Should we include pause/resume functionality?
RESOLVED: Yes, this is needed to ease layering other APIs which have
this functionality. To pause use cmdEndTransformFeedbackEXT and
provide valid buffer handles in the pCounterBuffers array and offsets
in the pCounterBufferOffsets array for the implementation to save the
resume points. Then to resume use cmdBeginTransformFeedbackEXT with
the previous pCounterBuffers and pCounterBufferOffsets values.
Between the pause and resume there needs to be a memory barrier for the
counter buffers with a source access of
ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT
at pipeline stage
PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
to a destination access of
ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT
at pipeline stage
PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT.
2) How does this interact with multiview?
RESOLVED: Transform feedback cannot be made active in a render pass with multiview enabled.
3) How should queries be done?
RESOLVED: There is a new query type
QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT.
A query pool created with this type will capture 2 integers -
numPrimitivesWritten and numPrimitivesNeeded - for the specified vertex
stream output from the last
pre-rasterization shader stage.
The vertex stream output queried is zero by default, but can be
specified with the new cmdBeginQueryIndexedEXT and
cmdEndQueryIndexedEXT commands.
Version History
Revision 1, 2018-10-09 (Piers Daniell)
- Internal revisions
See Also
PhysicalDeviceTransformFeedbackFeaturesEXT,
PhysicalDeviceTransformFeedbackPropertiesEXT,
PipelineRasterizationStateStreamCreateFlagsEXT,
PipelineRasterizationStateStreamCreateInfoEXT,
cmdBeginQueryIndexedEXT, cmdBeginTransformFeedbackEXT,
cmdBindTransformFeedbackBuffersEXT, cmdDrawIndirectByteCountEXT,
cmdEndQueryIndexedEXT, cmdEndTransformFeedbackEXT
Document Notes
For more information, see the Vulkan Specification
This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.
Synopsis
- cmdBindTransformFeedbackBuffersEXT :: forall io. MonadIO io => CommandBuffer -> ("firstBinding" ::: Word32) -> ("buffers" ::: Vector Buffer) -> ("offsets" ::: Vector DeviceSize) -> ("sizes" ::: Vector DeviceSize) -> io ()
- cmdBeginTransformFeedbackEXT :: forall io. MonadIO io => CommandBuffer -> ("firstCounterBuffer" ::: Word32) -> ("counterBuffers" ::: Vector Buffer) -> ("counterBufferOffsets" ::: Vector DeviceSize) -> io ()
- cmdUseTransformFeedbackEXT :: forall io r. MonadIO io => CommandBuffer -> Word32 -> Vector Buffer -> Vector DeviceSize -> io r -> io r
- cmdEndTransformFeedbackEXT :: forall io. MonadIO io => CommandBuffer -> ("firstCounterBuffer" ::: Word32) -> ("counterBuffers" ::: Vector Buffer) -> ("counterBufferOffsets" ::: Vector DeviceSize) -> io ()
- cmdBeginQueryIndexedEXT :: forall io. MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> ("index" ::: Word32) -> io ()
- cmdUseQueryIndexedEXT :: forall io r. MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> Word32 -> io r -> io r
- cmdEndQueryIndexedEXT :: forall io. MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> ("index" ::: Word32) -> io ()
- cmdDrawIndirectByteCountEXT :: forall io. MonadIO io => CommandBuffer -> ("instanceCount" ::: Word32) -> ("firstInstance" ::: Word32) -> ("counterBuffer" ::: Buffer) -> ("counterBufferOffset" ::: DeviceSize) -> ("counterOffset" ::: Word32) -> ("vertexStride" ::: Word32) -> io ()
- data PhysicalDeviceTransformFeedbackFeaturesEXT = PhysicalDeviceTransformFeedbackFeaturesEXT {}
- data PhysicalDeviceTransformFeedbackPropertiesEXT = PhysicalDeviceTransformFeedbackPropertiesEXT {
- maxTransformFeedbackStreams :: Word32
- maxTransformFeedbackBuffers :: Word32
- maxTransformFeedbackBufferSize :: DeviceSize
- maxTransformFeedbackStreamDataSize :: Word32
- maxTransformFeedbackBufferDataSize :: Word32
- maxTransformFeedbackBufferDataStride :: Word32
- transformFeedbackQueries :: Bool
- transformFeedbackStreamsLinesTriangles :: Bool
- transformFeedbackRasterizationStreamSelect :: Bool
- transformFeedbackDraw :: Bool
- data PipelineRasterizationStateStreamCreateInfoEXT = PipelineRasterizationStateStreamCreateInfoEXT {}
- newtype PipelineRasterizationStateStreamCreateFlagsEXT = PipelineRasterizationStateStreamCreateFlagsEXT Flags
- type EXT_TRANSFORM_FEEDBACK_SPEC_VERSION = 1
- pattern EXT_TRANSFORM_FEEDBACK_SPEC_VERSION :: forall a. Integral a => a
- type EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME = "VK_EXT_transform_feedback"
- pattern EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
cmdBindTransformFeedbackBuffersEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> ("firstBinding" ::: Word32) |
|
| -> ("buffers" ::: Vector Buffer) |
|
| -> ("offsets" ::: Vector DeviceSize) |
|
| -> ("sizes" ::: Vector DeviceSize) |
|
| -> io () |
vkCmdBindTransformFeedbackBuffersEXT - Bind transform feedback buffers to a command buffer
Description
The values taken from elements i of pBuffers, pOffsets and pSizes
replace the current state for the transform feedback binding
firstBinding + i, for i in [0, bindingCount). The transform feedback
binding is updated to start at the offset indicated by pOffsets[i]
from the start of the buffer pBuffers[i].
Valid Usage
-
PhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedbackmust be enabled
-
firstBindingmust be less thanPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers - The
sum of
firstBindingandbindingCountmust be less than or equal toPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers - All
elements of
pOffsetsmust be less than the size of the corresponding element inpBuffers - All
elements of
pOffsetsmust be a multiple of 4 - All
elements of
pBuffersmust have been created with theBUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXTflag - If the
optional
pSizearray is specified, each element ofpSizesmust either beWHOLE_SIZE, or be less than or equal toPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBufferSize - All
elements of
pSizesmust be eitherWHOLE_SIZE, or less than or equal to the size of the corresponding buffer inpBuffers - All
elements of
pOffsetspluspSizes, where thepSizes, element is notWHOLE_SIZE, must be less than or equal to the size of the corresponding buffer inpBuffers - Each
element of
pBuffersthat is non-sparse must be bound completely and contiguously to a singleDeviceMemoryobject - Transform
feedback must not be active when the
cmdBindTransformFeedbackBuffersEXTcommand is recorded
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pBuffersmust be a valid pointer to an array ofbindingCountvalidBufferhandles -
pOffsetsmust be a valid pointer to an array ofbindingCountDeviceSizevalues -
commandBuffermust be in the recording state -
The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called outside of a video coding scope
-
bindingCountmust be greater than0 - Both of
commandBuffer, and the elements ofpBuffersmust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Both | Outside | Graphics | State |
See Also
VK_EXT_transform_feedback,
Buffer, CommandBuffer,
DeviceSize
cmdBeginTransformFeedbackEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> ("firstCounterBuffer" ::: Word32) |
|
| -> ("counterBuffers" ::: Vector Buffer) |
|
| -> ("counterBufferOffsets" ::: Vector DeviceSize) |
|
| -> io () |
vkCmdBeginTransformFeedbackEXT - Make transform feedback active in the command buffer
Description
The active transform feedback buffers will capture primitives emitted
from the corresponding XfbBuffer in the bound graphics pipeline. Any
XfbBuffer emitted that does not output to an active transform feedback
buffer will not be captured.
Valid Usage
-
PhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedbackmust be enabled
- Transform feedback must not be active
-
firstCounterBuffermust be less thanPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers - The
sum of
firstCounterBufferandcounterBufferCountmust be less than or equal toPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers - If
counterBufferCountis not0, andpCounterBuffersis notNULL,pCounterBuffersmust be a valid pointer to an array ofcounterBufferCountBufferhandles that are either valid orNULL_HANDLE -
For each buffer handle in the array, if it is not
NULL_HANDLEit must reference a buffer large enough to hold 4 bytes at the corresponding offset from thepCounterBufferOffsetsarray - If
pCounterBufferisNULL, thenpCounterBufferOffsetsmust also beNULL - For each
buffer handle in the
pCounterBuffersarray that is notNULL_HANDLEit must have been created with ausagevalue containingBUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT - A valid graphics
pipeline must be bound to
PIPELINE_BIND_POINT_GRAPHICS - The last
pre-rasterization shader stage
of the bound graphics pipeline must have been declared with the
Xfbexecution mode - Transform feedback must not be made active in a render pass instance with multiview enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
If
counterBufferCountis not0, andpCounterBufferOffsetsis notNULL,pCounterBufferOffsetsmust be a valid pointer to an array ofcounterBufferCountDeviceSizevalues -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
- Both of
commandBuffer, and the elements ofpCounterBuffersthat are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Inside | Outside | Graphics | State |
See Also
VK_EXT_transform_feedback,
Buffer, CommandBuffer,
DeviceSize
cmdUseTransformFeedbackEXT :: forall io r. MonadIO io => CommandBuffer -> Word32 -> Vector Buffer -> Vector DeviceSize -> io r -> io r Source #
This function will call the supplied action between calls to
cmdBeginTransformFeedbackEXT and cmdEndTransformFeedbackEXT
Note that cmdEndTransformFeedbackEXT is *not* called if an exception
is thrown by the inner action.
cmdEndTransformFeedbackEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> ("firstCounterBuffer" ::: Word32) |
|
| -> ("counterBuffers" ::: Vector Buffer) |
|
| -> ("counterBufferOffsets" ::: Vector DeviceSize) |
|
| -> io () |
vkCmdEndTransformFeedbackEXT - Make transform feedback inactive in the command buffer
Valid Usage
-
PhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedbackmust be enabled
- Transform feedback must be active
-
firstCounterBuffermust be less thanPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers - The sum
of
firstCounterBufferandcounterBufferCountmust be less than or equal toPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBuffers - If
counterBufferCountis not0, andpCounterBuffersis notNULL,pCounterBuffersmust be a valid pointer to an array ofcounterBufferCountBufferhandles that are either valid orNULL_HANDLE - For
each buffer handle in the array, if it is not
NULL_HANDLEit must reference a buffer large enough to hold 4 bytes at the corresponding offset from thepCounterBufferOffsetsarray - If
pCounterBufferisNULL, thenpCounterBufferOffsetsmust also beNULL - For each
buffer handle in the
pCounterBuffersarray that is notNULL_HANDLEit must have been created with ausagevalue containingBUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
If
counterBufferCountis not0, andpCounterBufferOffsetsis notNULL,pCounterBufferOffsetsmust be a valid pointer to an array ofcounterBufferCountDeviceSizevalues -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
- Both of
commandBuffer, and the elements ofpCounterBuffersthat are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Inside | Outside | Graphics | State |
See Also
VK_EXT_transform_feedback,
Buffer, CommandBuffer,
DeviceSize
cmdBeginQueryIndexedEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> QueryPool |
|
| -> ("query" ::: Word32) |
|
| -> QueryControlFlags |
|
| -> ("index" ::: Word32) |
|
| -> io () |
vkCmdBeginQueryIndexedEXT - Begin an indexed query
Description
The cmdBeginQueryIndexedEXT command operates the same as the
cmdBeginQuery 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
- The
queryTypeused to createqueryPoolmust not beQUERY_TYPE_TIMESTAMP - The
queryTypeused to createqueryPoolmust not beQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHRorQUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR - The
queryTypeused to createqueryPoolmust not beQUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHRorQUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR - The
queryTypeused to createqueryPoolmust not beQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV - If the
occlusionQueryPrecise
feature is not enabled, or the
queryTypeused to createqueryPoolwas notQUERY_TYPE_OCCLUSION,flagsmust not containQUERY_CONTROL_PRECISE_BIT -
querymust be less than the number of queries inqueryPool - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_OCCLUSION, theCommandPoolthatcommandBufferwas allocated from must support graphics operations - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PIPELINE_STATISTICSand any of thepipelineStatisticsindicate graphics operations, theCommandPoolthatcommandBufferwas allocated from must support graphics operations - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PIPELINE_STATISTICSand any of thepipelineStatisticsindicate compute operations, theCommandPoolthatcommandBufferwas allocated from must support compute operations -
commandBuffermust not be a protected command buffer - If called within a
render pass instance, the sum of
queryand the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries inqueryPool - If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then theCommandPoolthatcommandBufferwas allocated from must have been created with a queue family index that supports result status queries, as indicated by VkQueueFamilyQueryResultStatusPropertiesKHR::queryResultStatusSupport - If there is a bound video session, then there must be no active queries
- If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHRand there is a bound video session, thenqueryPoolmust have been created with a VkVideoProfileInfoKHR structure included in thepNextchain ofQueryPoolCreateInfoidentical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfilethe bound video session was created with - If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR, then theCommandPoolthatcommandBufferwas allocated from must support video encode operations - If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR, then there must be a bound video session - If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHRand there is a bound video session, thenqueryPoolmust have been created with a VkVideoProfileInfoKHR structure included in thepNextchain ofQueryPoolCreateInfoidentical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfilethe bound video session was created with - If the
queryTypeused to createqueryPoolwas notVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHRorVK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR, then there must be no bound video session - If the
queryPoolwas created with the samequeryTypeas that of another active query withincommandBuffer, thenindexmust not match the index used for the active query - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXTtheCommandPoolthatcommandBufferwas allocated from must support graphics operations - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXTtheindexparameter must be less thanPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PRIMITIVES_GENERATED_EXTtheCommandPoolthatcommandBufferwas allocated from must support graphics operations - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PRIMITIVES_GENERATED_EXTtheindexparameter must be less thanPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PRIMITIVES_GENERATED_EXTand the primitivesGeneratedQueryWithNonZeroStreams feature is not enabled, theindexparameter must be zero - If the
queryTypeused to createqueryPoolwas notQUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXTand notQUERY_TYPE_PRIMITIVES_GENERATED_EXT, theindexmust be zero - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PRIMITIVES_GENERATED_EXTthen primitivesGeneratedQuery must be enabled - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXTthenPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackQueriesmust be supported - The
queryTypeused to createqueryPoolmust not beQUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT - If
queryPoolwas created with aqueryTypeofQUERY_TYPE_PERFORMANCE_QUERY_KHR, then theQueryPoolPerformanceCreateInfoKHR::queueFamilyIndexqueryPoolwas created with must equal the queue family index of theCommandPoolthatcommandBufferwas allocated from - If
queryPoolwas created with aqueryTypeofQUERY_TYPE_PERFORMANCE_QUERY_KHR, the profiling lock must have been held beforebeginCommandBufferwas called oncommandBuffer - If
queryPoolwas created with aqueryTypeofQUERY_TYPE_PERFORMANCE_QUERY_KHRand one of the counters used to createqueryPoolwasPERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, the query begin must be the first recorded command incommandBuffer - If
queryPoolwas created with aqueryTypeofQUERY_TYPE_PERFORMANCE_QUERY_KHRand one of the counters used to createqueryPoolwasPERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, the begin command must not be recorded within a render pass instance - If
queryPoolwas created with aqueryTypeofQUERY_TYPE_PERFORMANCE_QUERY_KHRand another query pool with aqueryTypeQUERY_TYPE_PERFORMANCE_QUERY_KHRhas been used withincommandBuffer, its parent primary command buffer or secondary command buffer recorded within the same parent primary command buffer ascommandBuffer, the performanceCounterMultipleQueryPools feature must be enabled - If
queryPoolwas created with aqueryTypeofQUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must not be recorded in a command buffer that, either directly or through secondary command buffers, also contains acmdResetQueryPoolcommand affecting the same query
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
queryPoolmust be a validQueryPoolhandle -
flagsmust be a valid combination ofQueryControlFlagBitsvalues -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics, compute, decode, or encode operations - This command must only be called outside of a video coding scope
- Both of
commandBuffer, andqueryPoolmust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Both | Outside | Graphics Compute Decode Encode | Action State |
See Also
VK_EXT_transform_feedback,
CommandBuffer,
QueryControlFlags,
QueryPool,
cmdBeginQuery,
cmdEndQuery,
cmdEndQueryIndexedEXT
cmdUseQueryIndexedEXT :: forall io r. MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> Word32 -> io r -> io r Source #
This function will call the supplied action between calls to
cmdBeginQueryIndexedEXT and cmdEndQueryIndexedEXT
Note that cmdEndQueryIndexedEXT is *not* called if an exception is
thrown by the inner action.
cmdEndQueryIndexedEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> QueryPool |
|
| -> ("query" ::: Word32) |
|
| -> ("index" ::: Word32) |
|
| -> io () |
vkCmdEndQueryIndexedEXT - Ends a query
Description
The command completes the query in queryPool identified by query and
index, and marks it as available.
The cmdEndQueryIndexedEXT command operates the same as the
cmdEndQuery 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 that occur earlier in
submission order.
The second synchronization scope includes only the operation of this command.
Valid Usage
- All queries used by the command must be active
-
querymust be less than the number of queries inqueryPool -
commandBuffermust not be a protected command buffer - If
cmdEndQueryIndexedEXTis called within a render pass instance, the sum ofqueryand the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries inqueryPool - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXTorQUERY_TYPE_PRIMITIVES_GENERATED_EXT, theindexparameter must be less thanPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackStreams - If the
queryTypeused to createqueryPoolwas notQUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXTand notQUERY_TYPE_PRIMITIVES_GENERATED_EXT, theindexmust be zero - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXTorQUERY_TYPE_PRIMITIVES_GENERATED_EXT,indexmust equal theindexused to begin the query - [[VUID-{refpage}-None-07007]] If called within a subpass of a render
pass instance, the corresponding
cmdBeginQuery* command must have been called previously within the same subpass - [[VUID-{refpage}-None-07008]] If called outside of a render pass
instance, the corresponding
cmdBeginQuery* command must have been called outside of a render pass instance
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
queryPoolmust be a validQueryPoolhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics, compute, decode, or encode operations - This command must only be called outside of a video coding scope
- Both of
commandBuffer, andqueryPoolmust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Both | Outside | Graphics Compute Decode Encode | Action State |
See Also
VK_EXT_transform_feedback,
CommandBuffer,
QueryPool,
cmdBeginQuery,
cmdBeginQueryIndexedEXT,
cmdEndQuery
cmdDrawIndirectByteCountEXT Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> ("instanceCount" ::: Word32) |
|
| -> ("firstInstance" ::: Word32) |
|
| -> ("counterBuffer" ::: Buffer) |
|
| -> ("counterBufferOffset" ::: DeviceSize) |
|
| -> ("counterOffset" ::: Word32) |
|
| -> ("vertexStride" ::: Word32) |
|
| -> io () |
vkCmdDrawIndirectByteCountEXT - Draw primitives with indirect parameters where the vertex count is derived from the counter byte value in the counter buffer
Description
When the command is executed, primitives are assembled in the same way
as done with cmdDraw except the
vertexCount is calculated based on the byte count read from
counterBuffer at offset counterBufferOffset. The assembled
primitives execute the bound graphics pipeline.
The effective vertexCount is calculated as follows:
const uint32_t * counterBufferPtr = (const uint8_t *)counterBuffer.address + counterBufferOffset; vertexCount = floor(max(0, (*counterBufferPtr - counterOffset)) / vertexStride);
The effective firstVertex is zero.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For any
ImageViewbeing written as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - For any
ImageViewbeing read as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For any
BufferViewbeing written as a storage texel buffer where the image format field of theOpTypeImageisUnknown, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - Any
BufferViewbeing read as a storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For each set n
that is statically used by the
Pipelinebound to the pipeline bind point used by this command, a descriptor set must have been bound to n at the same pipeline bind point, with aPipelineLayoutthat is compatible for set n, with thePipelineLayoutused to create the currentPipeline, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by the
Pipelinebound to the pipeline bind point used by this command, a push constant value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants, with thePipelineLayoutused to create the currentPipeline, as described in ??? - Descriptors in each
bound descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors
used by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors
used by the
Pipelinebound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT, the boundPipelinemust have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If a descriptor is
dynamically used with a
Pipelinecreated withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - A valid pipeline must be bound to the pipeline bind point used by this command
- There must not
have been any calls to dynamic state setting commands for any state
not specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If any
stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If any
stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported, any resource accessed by thePipelineobject bound to the pipeline bind point used by this command must not be a protected resource - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the image view’sformatmust match the numeric format from theSampledTypeoperand of theOpTypeImageas described in the SPIR-V Sampled Type column of the ??? table - If a
ImageViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format - If a
BufferViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s format - If a
ImageViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
ImageViewwith aFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 - If a
BufferViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
BufferViewwith aFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 -
If the
sparseImageInt64Atomics
feature is not enabled,
Imageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
If the
sparseImageInt64Atomics
feature is not enabled,
Bufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
If
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM -
If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM -
If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation -
If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM -
If any command other than
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - Any shader invocation executed by this command must terminate
- The current
render pass must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index
of the current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set
- If any shader
executed by this pipeline accesses an
OpTypeImagevariable with aDimoperand ofSubpassData, it must be decorated with anInputAttachmentIndexthat corresponds to a valid input attachment in the current subpass - Input attachment
views accessed in a subpass must be created with the same
Formatas the corresponding subpass definition, and be created with aImageViewthat is compatible with the attachment referenced by the subpass'pInputAttachments[InputAttachmentIndex] in the currently boundFramebufferas specified by Fragment Input Attachment Compatibility - Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command
- If any recorded command in the current subpass will write to an image subresource as an attachment, this command must not read from the memory backing that image subresource in any other way than as an attachment
- If any recorded command in the current subpass will read from an image subresource used as an attachment in any way other than as an attachment, this command must not write to that image subresource as an attachment
- If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled
- If the current
render pass instance uses a depth/stencil attachment with a
read-only layout for the stencil aspect, both front and back
writeMaskare not zero, and stencil test is enabled, all stencil ops must beSTENCIL_OP_KEEP - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORTdynamic state enabled thencmdSetViewportmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SCISSORdynamic state enabled thencmdSetScissormust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled thencmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled thencmdSetDepthBiasmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled thencmdSetBlendConstantsmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled thencmdSetDepthBoundsmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled thencmdSetStencilCompareMaskmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled thencmdSetStencilWriteMaskmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled thencmdSetStencilReferencemust have been called in the current command buffer prior to this drawing command -
If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If
the bound graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled thencmdSetSampleLocationsEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_CULL_MODEdynamic state enabled thencmdSetCullModemust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled thencmdSetFrontFacemust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_TOPOLOGYdynamic state enabled thencmdSetPrimitiveTopologymust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled thencmdSetDepthTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled thencmdSetDepthWriteEnablemust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled thencmdSetDepthCompareOpmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled thencmdSetDepthBoundsTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled thencmdSetStencilTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled thencmdSetStencilOpmust have been called in the current command buffer prior to this drawing command - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thePipelineViewportStateCreateInfo::scissorCountof the pipeline - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, thencmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and thescissorCountparameter ofcmdSetScissorWithCountmust match thePipelineViewportStateCreateInfo::viewportCountof the pipeline - If the
bound graphics pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled then bothcmdSetViewportWithCountandcmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled thencmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled thencmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 - If
rasterization is not disabled in the bound graphics pipeline, then
for each color attachment in the subpass, if the corresponding image
view’s
format features
do not contain
FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then theblendEnablemember of the corresponding element of thepAttachmentsmember ofpColorBlendStatemust beFALSE -
If rasterization is not disabled in the bound graphics pipeline, and
none of the
VK_AMD_mixed_attachment_samplesextension, theVK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature are enabled, thenPipelineMultisampleStateCreateInfo::rasterizationSamplesmust be the same as the current subpass color and/or depth/stencil attachments - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current
render pass instance was begun with
cmdBeginRendering, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If
the current render pass instance was begun with
cmdBeginRendering, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If
the current render pass instance was begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline - If
the current render pass instance was begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound pipeline equal toFORMAT_UNDEFINED - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled thencmdSetColorWriteEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled then theattachmentCountparameter ofcmdSetColorWriteEnableEXTmust be greater than or equal to thePipelineColorBlendStateCreateInfo::attachmentCountof the currently bound graphics pipeline - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled thencmdSetDiscardRectangleEXTmust have been called in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the
current render pass instance was begun with
cmdBeginRenderingandRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the currently bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView - If the
current render pass instance was begun with
cmdBeginRenderingandRenderingInfo::pDepthAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the currently bound graphics pipeline must be equal toFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRenderingandRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the currently bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView - If the
current render pass instance was begun with
cmdBeginRenderingandRenderingInfo::pStencilAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the currently bound graphics pipeline must be equal toFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRenderingandRenderingFragmentShadingRateAttachmentInfoKHR::imageViewwas notNULL_HANDLE, the currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the current
render pass instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If
the currently bound pipeline was created with a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the corresponding element of thepColorAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline - If the
current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If the
current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView -
If the currently bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the value ofPipelineMultisampleStateCreateInfo::rasterizationSamplesused to create the currently bound graphics pipeline -
If the current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineMultisampleStateCreateInfo::rasterizationSamplesused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineMultisampleStateCreateInfo::rasterizationSamplesused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If the current
render pass instance was begun with
cmdBeginRendering, the currently bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE -
If the
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, the bound graphics pipeline must not have been created with a non-zero value inPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled thencmdSetTessellationDomainOriginEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled thencmdSetDepthClampEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled thencmdSetPolygonModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled thencmdSetRasterizationSamplesEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled thencmdSetSampleMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToCoverageEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToOneEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled thencmdSetLogicOpEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled thencmdSetRasterizationStreamEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetConservativeRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state enabled thencmdSetDepthClipEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled thencmdSetSampleLocationsEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled thencmdSetProvokingVertexModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_EXTdynamic state enabled thencmdSetLineStippleEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled thencmdSetDepthClipNegativeOneToOneEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled thencmdSetViewportWScalingEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled thencmdSetViewportSwizzleNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled thencmdSetCoverageToColorEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled thencmdSetCoverageToColorLocationNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled thencmdSetCoverageModulationModeNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled thencmdSetCoverageModulationTableEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled thencmdSetCoverageModulationTableNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled thencmdSetShadingRateImageEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled thencmdSetRepresentativeFragmentTestEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled thencmdSetCoverageReductionModeNVmust have been called in the current command buffer prior to this drawing command - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTstate enabled and the last call tocmdSetColorBlendEnableEXTsetpColorBlendEnablesfor any attachment toTRUE, then for those attachments in the subpass the corresponding image view’s format features must containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust follow the rules for a zero-attachment subpass - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to thePipelineMultisampleStateCreateInfo::rasterizationSamplesparameter used to create the bound graphics pipeline - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to therasterizationSamplesparameter in the last call tocmdSetRasterizationSamplesEXT -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and none of theVK_AMD_mixed_attachment_samplesextension,VK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature is enabled, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as the current subpass color and/or depth/stencil attachments - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendAdvancedEXTcalls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled and the last calls tocmdSetColorBlendEnableEXTandcmdSetColorBlendAdvancedEXThave enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXTstate enabled, the last call tocmdSetRasterizationStreamEXTmust have set therasterizationStreamto zero -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesmember of thePipelineMultisampleStateCreateInfostructure the bound graphics pipeline has been created with -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If
the bound graphics pipeline was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, andsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.sampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.sampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instructionInterpolateAtSample -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVstate enabled and the last call tocmdSetCoverageModulationTableEnableNVsetcoverageModulationTableEnabletoTRUE, then thecoverageModulationTableCountparameter in the last call tocmdSetCoverageModulationTableNVmust equal the currentrasterizationSamplesdivided by the number of color samples in the current subpass - If
the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the currently bound pipeline state, then the currentrasterizationSamplesmust be the same as the sample count of the depth/stencil attachment - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVstate enabled and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If
this
VK_NV_coverage_reduction_modeextension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVandDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, the current coverage reduction modecoverageReductionMode, then the currentrasterizationSamples, and the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned bygetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If
the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if the current subpass has any color attachments andrasterizationSamplesof the last call tocmdSetRasterizationSamplesEXTis greater than the number of color samples, then the pipelinesampleShadingEnablemust beFALSE - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the stippledRectangularLines feature must be enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the stippledBresenhamLines feature must be enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the stippledSmoothLines feature must be enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_DEFAULT_EXT, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust be VK_TRUE -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then theconservativeRasterizationModeset by the last call tocmdSetConservativeRasterizationModeEXTmust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the currently
bound pipeline was created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_VERTEX_BIT,SHADER_STAGE_TESSELLATION_CONTROL_BIT,SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active - If dynamic state was
inherited from
CommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command - All vertex input
bindings accessed via vertex input variables declared in the vertex
shader entry point’s interface must have either valid or
NULL_HANDLEbuffers bound - If the
nullDescriptor
feature is not enabled, all vertex input bindings accessed via
vertex input variables declared in the vertex shader entry point’s
interface must not be
NULL_HANDLE - For a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ???
-
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXTdynamic state enabled and the dynamicPrimitiveTopologyUnrestricted isFALSE, then theprimitiveTopologyparameter in the last call tocmdSetPrimitiveTopologymust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - If the bound
graphics pipeline was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXTandDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic states enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound
graphics pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2EXTmust have been called in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2EXTmust not beNULL - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled thencmdSetPatchControlPointsEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust have been called in the current command buffer prior to this drawing command - The bound graphics
pipeline must not have been created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT -
PhysicalDeviceTransformFeedbackFeaturesEXT::transformFeedbackmust be enabled - The
implementation must support
PhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackDraw -
vertexStridemust be greater than 0 and less than or equal toPhysicalDeviceTransformFeedbackPropertiesEXT::maxTransformFeedbackBufferDataStride - If
counterBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
counterBuffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITbit set -
counterBufferOffsetmust be a multiple of4 -
commandBuffermust not be a protected command buffer
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
counterBuffermust be a validBufferhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
- Both of
commandBuffer, andcounterBuffermust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Inside | Outside | Graphics | Action |
See Also
VK_EXT_transform_feedback,
Buffer, CommandBuffer,
DeviceSize
data PhysicalDeviceTransformFeedbackFeaturesEXT Source #
VkPhysicalDeviceTransformFeedbackFeaturesEXT - Structure describing transform feedback features that can be supported by an implementation
Members
This structure describes the following features:
Description
If the PhysicalDeviceTransformFeedbackFeaturesEXT structure is
included in the pNext chain of the
PhysicalDeviceFeatures2
structure passed to
getPhysicalDeviceFeatures2,
it is filled in to indicate whether each corresponding feature is
supported. PhysicalDeviceTransformFeedbackFeaturesEXT can also be
used in the pNext chain of DeviceCreateInfo to
selectively enable these features.
Valid Usage (Implicit)
See Also
Constructors
| PhysicalDeviceTransformFeedbackFeaturesEXT | |
Fields | |
Instances
data PhysicalDeviceTransformFeedbackPropertiesEXT Source #
VkPhysicalDeviceTransformFeedbackPropertiesEXT - Structure describing transform feedback properties that can be supported by an implementation
Description
If the PhysicalDeviceTransformFeedbackPropertiesEXT structure is
included in the pNext chain of the
PhysicalDeviceProperties2
structure passed to
getPhysicalDeviceProperties2,
it is filled in with each corresponding implementation-dependent
property.
Valid Usage (Implicit)
See Also
VK_EXT_transform_feedback,
Bool32,
DeviceSize,
StructureType
Constructors
| PhysicalDeviceTransformFeedbackPropertiesEXT | |
Fields
| |
Instances
data PipelineRasterizationStateStreamCreateInfoEXT Source #
VkPipelineRasterizationStateStreamCreateInfoEXT - Structure defining the geometry stream used for rasterization
Description
If this structure is not present, rasterizationStream is assumed to be
zero.
Valid Usage (Implicit)
See Also
VK_EXT_transform_feedback,
PipelineRasterizationStateStreamCreateFlagsEXT,
StructureType
Constructors
| PipelineRasterizationStateStreamCreateInfoEXT | |
Fields
| |
Instances
newtype PipelineRasterizationStateStreamCreateFlagsEXT Source #
VkPipelineRasterizationStateStreamCreateFlagsEXT - Reserved for future use
Description
PipelineRasterizationStateStreamCreateFlagsEXT is a bitmask type for
setting a mask, but is currently reserved for future use.
See Also
VK_EXT_transform_feedback,
PipelineRasterizationStateStreamCreateInfoEXT
Constructors
| PipelineRasterizationStateStreamCreateFlagsEXT Flags |
Instances
type EXT_TRANSFORM_FEEDBACK_SPEC_VERSION = 1 Source #
pattern EXT_TRANSFORM_FEEDBACK_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME = "VK_EXT_transform_feedback" Source #
pattern EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #