| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Vulkan.Core10.CommandBufferBuilding
Synopsis
- cmdBindPipeline :: MonadIO io => CommandBuffer -> PipelineBindPoint -> Pipeline -> io ()
- cmdSetViewport :: MonadIO io => CommandBuffer -> ("firstViewport" ::: Word32) -> ("viewports" ::: Vector Viewport) -> io ()
- cmdSetScissor :: MonadIO io => CommandBuffer -> ("firstScissor" ::: Word32) -> ("scissors" ::: Vector Rect2D) -> io ()
- cmdSetLineWidth :: MonadIO io => CommandBuffer -> ("lineWidth" ::: Float) -> io ()
- cmdSetDepthBias :: MonadIO io => CommandBuffer -> ("depthBiasConstantFactor" ::: Float) -> ("depthBiasClamp" ::: Float) -> ("depthBiasSlopeFactor" ::: Float) -> io ()
- cmdSetBlendConstants :: MonadIO io => CommandBuffer -> ("blendConstants" ::: (Float, Float, Float, Float)) -> io ()
- cmdSetDepthBounds :: MonadIO io => CommandBuffer -> ("minDepthBounds" ::: Float) -> ("maxDepthBounds" ::: Float) -> io ()
- cmdSetStencilCompareMask :: MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("compareMask" ::: Word32) -> io ()
- cmdSetStencilWriteMask :: MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("writeMask" ::: Word32) -> io ()
- cmdSetStencilReference :: MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("reference" ::: Word32) -> io ()
- cmdBindDescriptorSets :: MonadIO io => CommandBuffer -> PipelineBindPoint -> PipelineLayout -> ("firstSet" ::: Word32) -> ("descriptorSets" ::: Vector DescriptorSet) -> ("dynamicOffsets" ::: Vector Word32) -> io ()
- cmdBindIndexBuffer :: MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> IndexType -> io ()
- cmdBindVertexBuffers :: MonadIO io => CommandBuffer -> ("firstBinding" ::: Word32) -> ("buffers" ::: Vector Buffer) -> ("offsets" ::: Vector DeviceSize) -> io ()
- cmdDraw :: MonadIO io => CommandBuffer -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> io ()
- cmdDrawIndexed :: MonadIO io => CommandBuffer -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> io ()
- cmdDrawIndirect :: MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
- cmdDrawIndexedIndirect :: MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
- cmdDispatch :: MonadIO io => CommandBuffer -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> io ()
- cmdDispatchIndirect :: MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> io ()
- cmdCopyBuffer :: MonadIO io => CommandBuffer -> ("srcBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> ("regions" ::: Vector BufferCopy) -> io ()
- cmdCopyImage :: MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageCopy) -> io ()
- cmdBlitImage :: MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageBlit) -> Filter -> io ()
- cmdCopyBufferToImage :: MonadIO io => CommandBuffer -> ("srcBuffer" ::: Buffer) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector BufferImageCopy) -> io ()
- cmdCopyImageToBuffer :: MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstBuffer" ::: Buffer) -> ("regions" ::: Vector BufferImageCopy) -> io ()
- cmdUpdateBuffer :: MonadIO io => CommandBuffer -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("dataSize" ::: DeviceSize) -> ("data" ::: Ptr ()) -> io ()
- cmdFillBuffer :: MonadIO io => CommandBuffer -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> DeviceSize -> ("data" ::: Word32) -> io ()
- cmdClearColorImage :: MonadIO io => CommandBuffer -> Image -> ImageLayout -> ClearColorValue -> ("ranges" ::: Vector ImageSubresourceRange) -> io ()
- cmdClearDepthStencilImage :: MonadIO io => CommandBuffer -> Image -> ImageLayout -> ClearDepthStencilValue -> ("ranges" ::: Vector ImageSubresourceRange) -> io ()
- cmdClearAttachments :: MonadIO io => CommandBuffer -> ("attachments" ::: Vector ClearAttachment) -> ("rects" ::: Vector ClearRect) -> io ()
- cmdResolveImage :: MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageResolve) -> io ()
- cmdSetEvent :: MonadIO io => CommandBuffer -> Event -> ("stageMask" ::: PipelineStageFlags) -> io ()
- cmdResetEvent :: MonadIO io => CommandBuffer -> Event -> ("stageMask" ::: PipelineStageFlags) -> io ()
- cmdWaitEvents :: MonadIO io => CommandBuffer -> ("events" ::: Vector Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector (SomeStruct BufferMemoryBarrier)) -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) -> io ()
- cmdWaitEventsSafe :: MonadIO io => CommandBuffer -> ("events" ::: Vector Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector (SomeStruct BufferMemoryBarrier)) -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) -> io ()
- cmdPipelineBarrier :: MonadIO io => CommandBuffer -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> DependencyFlags -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector (SomeStruct BufferMemoryBarrier)) -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) -> io ()
- cmdBeginQuery :: MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> io ()
- cmdUseQuery :: MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> io r -> io r
- cmdEndQuery :: MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> io ()
- cmdResetQueryPool :: MonadIO io => CommandBuffer -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> io ()
- cmdWriteTimestamp :: MonadIO io => CommandBuffer -> PipelineStageFlagBits -> QueryPool -> ("query" ::: Word32) -> io ()
- cmdCopyQueryPoolResults :: MonadIO io => CommandBuffer -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> io ()
- cmdPushConstants :: MonadIO io => CommandBuffer -> PipelineLayout -> ShaderStageFlags -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("values" ::: Ptr ()) -> io ()
- cmdBeginRenderPass :: forall (a :: [Type]) io. (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io ()
- cmdUseRenderPass :: forall (a :: [Type]) io r. (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io r -> io r
- cmdNextSubpass :: MonadIO io => CommandBuffer -> SubpassContents -> io ()
- cmdEndRenderPass :: MonadIO io => CommandBuffer -> io ()
- cmdExecuteCommands :: MonadIO io => CommandBuffer -> ("commandBuffers" ::: Vector CommandBuffer) -> io ()
- data ClearRect = ClearRect {
- rect :: Rect2D
- baseArrayLayer :: Word32
- layerCount :: Word32
- data ImageSubresourceLayers = ImageSubresourceLayers {}
- data BufferCopy = BufferCopy {}
- data ImageCopy = ImageCopy {}
- data ImageBlit = ImageBlit {}
- data BufferImageCopy = BufferImageCopy {}
- data ImageResolve = ImageResolve {}
- data RenderPassBeginInfo (es :: [Type]) = RenderPassBeginInfo {
- next :: Chain es
- renderPass :: RenderPass
- framebuffer :: Framebuffer
- renderArea :: Rect2D
- clearValues :: Vector ClearValue
- data ClearDepthStencilValue = ClearDepthStencilValue {}
- data ClearAttachment = ClearAttachment {}
- data ClearColorValue
- data ClearValue
- newtype IndexType where
- IndexType Int32
- pattern INDEX_TYPE_NONE_KHR :: IndexType
- pattern INDEX_TYPE_UINT16 :: IndexType
- pattern INDEX_TYPE_UINT32 :: IndexType
- pattern INDEX_TYPE_UINT8 :: IndexType
- newtype SubpassContents where
- newtype StencilFaceFlagBits where
- type StencilFaceFlags = StencilFaceFlagBits
Documentation
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> PipelineBindPoint |
|
| -> Pipeline |
|
| -> io () |
vkCmdBindPipeline - Bind a pipeline object to a command buffer
Description
Once bound, a pipeline binding affects subsequent commands that interact with the given pipeline type in the command buffer until a different pipeline of the same type is bound to the bind point, or until the pipeline bind point is disturbed by binding a shader object as described in Interaction with Pipelines. Commands that do not interact with the given pipeline type must not be affected by the pipeline state.
Valid Usage
- If
pipelineBindPointisPIPELINE_BIND_POINT_COMPUTE, theCommandPoolthatcommandBufferwas allocated from must support compute operations
- If
pipelineBindPointisPIPELINE_BIND_POINT_GRAPHICS, theCommandPoolthatcommandBufferwas allocated from must support graphics operations - If
pipelineBindPointisPIPELINE_BIND_POINT_COMPUTE,pipelinemust be a compute pipeline - If
pipelineBindPointisPIPELINE_BIND_POINT_GRAPHICS,pipelinemust be a graphics pipeline - If the
variableMultisampleRate
feature is not supported,
pipelineis a graphics pipeline, the current subpass uses no attachments, and this is not the first call to this function with a graphics pipeline after transitioning to the current subpass, then the sample count specified by this pipeline must match that set in the previous pipeline - If
PhysicalDeviceSampleLocationsPropertiesEXT::variableSampleLocationsisFALSE, andpipelineis a graphics pipeline created with arenderPassthat is notNULL_HANDLEand with aPipelineSampleLocationsStateCreateInfoEXTstructure having itssampleLocationsEnablemember set toTRUEbut withoutDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTenabled then the current render pass instance must have been begun by specifying aRenderPassSampleLocationsBeginInfoEXTstructure whosepPostSubpassSampleLocationsmember contains an element with asubpassIndexmatching the current subpass index and thesampleLocationsInfomember of that element must match thesampleLocationsInfospecified inPipelineSampleLocationsStateCreateInfoEXTwhen the pipeline was created - This command must not be recorded when transform feedback is active
- If
pipelineBindPointisPIPELINE_BIND_POINT_RAY_TRACING_KHR, theCommandPoolthatcommandBufferwas allocated from must support compute operations - If
pipelineBindPointisPIPELINE_BIND_POINT_RAY_TRACING_KHR,pipelinemust be a ray tracing pipeline - If
pipelineBindPointisPIPELINE_BIND_POINT_RAY_TRACING_KHR,commandBuffermust not be a protected command buffer - If the
pipelineProtectedAccess
feature is enabled, and
commandBufferis a protected command buffer,pipelinemust have been created withoutPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT - If the
pipelineProtectedAccess
feature is enabled, and
commandBufferis not a protected command buffer,pipelinemust have been created withoutPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT -
pipelinemust not have been created withPIPELINE_CREATE_LIBRARY_BIT_KHRset - If
commandBufferis a secondary command buffer withCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2Denabled andpipelineBindPointisPIPELINE_BIND_POINT_GRAPHICS, then thepipelinemust have been created withDYNAMIC_STATE_VIEWPORT_WITH_COUNTorDYNAMIC_STATE_VIEWPORT, andDYNAMIC_STATE_SCISSOR_WITH_COUNTorDYNAMIC_STATE_SCISSORenabled - If
commandBufferis a secondary command buffer withCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2Denabled andpipelineBindPointisPIPELINE_BIND_POINT_GRAPHICSandpipelinewas created withPipelineDiscardRectangleStateCreateInfoEXTstructure and itsdiscardRectangleCountmember is not0, or the pipeline was created withDYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTenabled, then the pipeline must have been created withDYNAMIC_STATE_DISCARD_RECTANGLE_EXTenabled - If
pipelineBindPointisPIPELINE_BIND_POINT_GRAPHICSand the provokingVertexModePerPipeline limit isFALSE, then pipeline’sPipelineRasterizationProvokingVertexStateCreateInfoEXT::provokingVertexModemust be the same as that of any other pipelines previously bound to this bind point within the current render pass instance, including any pipeline already bound when beginning the render pass instance - If
pipelineBindPointisPIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI, theCommandPoolthatcommandBufferwas allocated from must support compute operations - If
pipelineBindPointisPIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI,pipelinemust be a subpass shading pipeline - If
pipelineBindPointisPIPELINE_BIND_POINT_DATA_GRAPH_ARM, theCommandPoolthatcommandBufferwas allocated from must have been created for a queue family that supportsQUEUE_DATA_GRAPH_BIT_ARM - If
pipelineBindPointisPIPELINE_BIND_POINT_DATA_GRAPH_ARM,pipelinemust be a data graph pipeline - If
pipelineis a data graph pipeline and theDataGraphPipelineCreateInfoARMstructure used to create it had aDataGraphProcessingEngineCreateInfoARMstructure in itspNextchain that specified any foreign data processing engines, then the command pool from whichcommandBufferwas allocated must have been created with aCommandPoolCreateInfostructure that had aDataGraphProcessingEngineCreateInfoARMstructure specifying a superset of the foreign data graph processing engines specified at pipeline creation time in itspNextchain - If
pipelineis a data graph pipeline and theDataGraphPipelineCreateInfoARMstructure used to create it did not have aDataGraphProcessingEngineCreateInfoARMstructure in itspNextchain, then the command pool from whichcommandBufferwas allocated must not have been created with aCommandPoolCreateInfothat had aDataGraphProcessingEngineCreateInfoARMstructure in itspNextchain
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pipelineBindPointmust be a validPipelineBindPointvalue -
pipelinemust be a validPipelinehandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_DATA_GRAPH_BIT_ARM, orQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
- Both of
commandBuffer, andpipelinemust 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 | VK_QUEUE_COMPUTE_BIT VK_QUEUE_DATA_GRAPH_BIT_ARM VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdBindPipeline is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("firstViewport" ::: Word32) |
|
| -> ("viewports" ::: Vector Viewport) |
|
| -> io () |
vkCmdSetViewport - Set the viewport dynamically for a command buffer
Description
This command sets the viewport transformation parameters state for
subsequent drawing commands when drawing using
shader objects,
or when the graphics pipeline is created with
DYNAMIC_STATE_VIEWPORT set in
PipelineDynamicStateCreateInfo::pDynamicStates.
Otherwise, this state is specified by the
PipelineViewportStateCreateInfo::pViewports
values used to create the currently active pipeline.
The viewport parameters taken from element i of pViewports replace the
current state for the viewport index firstViewport + i, for i in [0,
viewportCount).
Valid Usage
- The sum of
firstViewportandviewportCountmust be between1andPhysicalDeviceLimits::maxViewports, inclusive
- If the
multiViewport
feature is not enabled,
firstViewportmust be0 - If the
multiViewport
feature is not enabled,
viewportCountmust be1 -
commandBuffermust not haveCommandBufferInheritanceViewportScissorInfoNV::viewportScissor2Denabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pViewportsmust be a valid pointer to an array ofviewportCountvalidViewportstructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
-
viewportCountmust be greater than0
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 | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdSetViewport is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("firstScissor" ::: Word32) |
|
| -> ("scissors" ::: Vector Rect2D) |
|
| -> io () |
vkCmdSetScissor - Set scissor rectangles dynamically for a command buffer
Description
The scissor rectangles taken from element i of pScissors replace the
current state for the scissor index firstScissor + i, for i in [0,
scissorCount).
This command sets the scissor rectangles for subsequent drawing commands
when drawing using
shader objects,
or when the graphics pipeline is created with
DYNAMIC_STATE_SCISSOR set in
PipelineDynamicStateCreateInfo::pDynamicStates.
Otherwise, this state is specified by the
PipelineViewportStateCreateInfo::pScissors
values used to create the currently active pipeline.
Valid Usage
- The sum of
firstScissorandscissorCountmust be between1andPhysicalDeviceLimits::maxViewports, inclusive
- If the
multiViewport
feature is not enabled,
firstScissormust be0 - If the
multiViewport
feature is not enabled,
scissorCountmust be1 - The
xandymembers ofoffsetmember of any element ofpScissorsmust be greater than or equal to0 - Evaluation of (
offset.x+extent.width) must not cause a signed integer addition overflow for any element ofpScissors - Evaluation of (
offset.y+extent.height) must not cause a signed integer addition overflow for any element ofpScissors - If this command is
recorded in a secondary command buffer with
CommandBufferInheritanceViewportScissorInfoNV::viewportScissor2Denabled, then this function must not be called
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pScissorsmust be a valid pointer to an array ofscissorCountRect2Dstructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
-
scissorCountmust be greater than0
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 | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdSetScissor is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("lineWidth" ::: Float) |
|
| -> io () |
vkCmdSetLineWidth - Set line width dynamically for a command buffer
Description
This command sets the line width for subsequent drawing commands when
drawing using
shader objects,
or when the graphics pipeline is created with
DYNAMIC_STATE_LINE_WIDTH set in
PipelineDynamicStateCreateInfo::pDynamicStates.
Otherwise, this state is specified by the
PipelineRasterizationStateCreateInfo::lineWidth
value used to create the currently active pipeline.
Valid Usage
- If the
wideLines
feature is not enabled,
lineWidthmust be1.0
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
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 | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdSetLineWidth is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("depthBiasConstantFactor" ::: Float) |
|
| -> ("depthBiasClamp" ::: Float) |
|
| -> ("depthBiasSlopeFactor" ::: Float) |
|
| -> io () |
vkCmdSetDepthBias - Set depth bias factors and clamp dynamically for a command buffer
Description
This command sets the depth bias parameters for subsequent drawing
commands when drawing using
shader objects,
or when the graphics pipeline is created with
DYNAMIC_STATE_DEPTH_BIAS set in
PipelineDynamicStateCreateInfo::pDynamicStates.
Otherwise, this state is specified by the corresponding
PipelineRasterizationStateCreateInfo::depthBiasConstantFactor,
depthBiasClamp, and depthBiasSlopeFactor values used to create the
currently active pipeline.
Calling this function is equivalent to calling
cmdSetDepthBias2EXT
without a
DepthBiasRepresentationInfoEXT
in the pNext chain of
DepthBiasInfoEXT.
Valid Usage
- If the
depthBiasClamp
feature is not enabled,
depthBiasClampmust be0.0
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
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 | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdSetDepthBias is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("blendConstants" ::: (Float, Float, Float, Float)) |
|
| -> io () |
vkCmdSetBlendConstants - Set the values of blend constants
Description
This command sets blend constants for subsequent drawing commands when
when drawing using
shader objects,
or the graphics pipeline is created with
DYNAMIC_STATE_BLEND_CONSTANTS set in
PipelineDynamicStateCreateInfo::pDynamicStates.
Otherwise, this state is specified by the
PipelineColorBlendStateCreateInfo::blendConstants
values used to create the currently active pipeline.
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
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 | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdSetBlendConstants is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("minDepthBounds" ::: Float) |
|
| -> ("maxDepthBounds" ::: Float) |
|
| -> io () |
vkCmdSetDepthBounds - Set depth bounds range dynamically for a command buffer
Description
This command sets the depth bounds range for subsequent drawing commands
when drawing using
shader objects,
or when the graphics pipeline is created with
DYNAMIC_STATE_DEPTH_BOUNDS set in
PipelineDynamicStateCreateInfo::pDynamicStates.
Otherwise, this state is specified by the
PipelineDepthStencilStateCreateInfo::minDepthBounds
and
PipelineDepthStencilStateCreateInfo::maxDepthBounds
values used to create the currently active pipeline.
Valid Usage
- If the
VK_EXT_depth_range_unrestrictedextension is not enabledminDepthBoundsmust be between0.0and1.0, inclusive
- If the
VK_EXT_depth_range_unrestrictedextension is not enabledmaxDepthBoundsmust be between0.0and1.0, inclusive -
minDepthBoundsmust be less than or equal tomaxDepthBounds
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
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 | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdSetDepthBounds is not affected by conditional rendering
See Also
cmdSetStencilCompareMask Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("faceMask" ::: StencilFaceFlags) |
|
| -> ("compareMask" ::: Word32) |
|
| -> io () |
vkCmdSetStencilCompareMask - Set stencil compare mask dynamically for a command buffer
Description
This command sets the stencil compare mask for subsequent drawing
commands when drawing using
shader objects,
or when the graphics pipeline is created with
DYNAMIC_STATE_STENCIL_COMPARE_MASK
set in
PipelineDynamicStateCreateInfo::pDynamicStates.
Otherwise, this state is specified by the
StencilOpState::compareMask value
used to create the currently active pipeline, for both front and back
faces.
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
faceMaskmust be a valid combination ofStencilFaceFlagBitsvalues -
faceMaskmust not be0 -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
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 | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdSetStencilCompareMask is not affected by conditional rendering
See Also
cmdSetStencilWriteMask Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("faceMask" ::: StencilFaceFlags) |
|
| -> ("writeMask" ::: Word32) |
|
| -> io () |
vkCmdSetStencilWriteMask - Set stencil write mask dynamically for a command buffer
Description
This command sets the stencil write mask for subsequent drawing commands
when drawing using
shader objects,
or when the graphics pipeline is created with
DYNAMIC_STATE_STENCIL_WRITE_MASK set
in
PipelineDynamicStateCreateInfo::pDynamicStates.
Otherwise, this state is specified by the writeMask value used to
create the currently active pipeline, for both
PipelineDepthStencilStateCreateInfo::front
and
PipelineDepthStencilStateCreateInfo::back
faces.
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
faceMaskmust be a valid combination ofStencilFaceFlagBitsvalues -
faceMaskmust not be0 -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
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 | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdSetStencilWriteMask is not affected by conditional rendering
See Also
cmdSetStencilReference Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("faceMask" ::: StencilFaceFlags) |
|
| -> ("reference" ::: Word32) |
|
| -> io () |
vkCmdSetStencilReference - Set stencil reference value dynamically for a command buffer
Description
This command sets the stencil reference value for subsequent drawing
commands when drawing using
shader objects,
or when the graphics pipeline is created with
DYNAMIC_STATE_STENCIL_REFERENCE set
in
PipelineDynamicStateCreateInfo::pDynamicStates.
Otherwise, this state is specified by the
PipelineDepthStencilStateCreateInfo::reference
value used to create the currently active pipeline, for both front and
back faces.
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
faceMaskmust be a valid combination ofStencilFaceFlagBitsvalues -
faceMaskmust not be0 -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
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 | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdSetStencilReference is not affected by conditional rendering
See Also
cmdBindDescriptorSets Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> PipelineBindPoint |
|
| -> PipelineLayout |
|
| -> ("firstSet" ::: Word32) |
|
| -> ("descriptorSets" ::: Vector DescriptorSet) |
|
| -> ("dynamicOffsets" ::: Vector Word32) |
|
| -> io () |
vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer
Description
cmdBindDescriptorSets binds descriptor sets
pDescriptorSets[0..descriptorSetCount-1] to set numbers
[firstSet..firstSet+descriptorSetCount-1] for subsequent
bound pipeline commands
set by pipelineBindPoint. Any bindings that were previously applied
via these sets , or calls to
cmdSetDescriptorBufferOffsetsEXT
or
cmdBindDescriptorBufferEmbeddedSamplersEXT,
are no longer valid.
Once bound, a descriptor set affects rendering of subsequent commands that interact with the given pipeline type in the command buffer until either a different set is bound to the same set number, or the set is disturbed as described in Pipeline Layout Compatibility.
A compatible descriptor set must be bound for all set numbers that any shaders in a pipeline access, at the time that a drawing or dispatching command is recorded to execute using that pipeline. However, if none of the shaders in a pipeline statically use any bindings with a particular set number, then no descriptor set need be bound for that set number, even if the pipeline layout includes a non-trivial descriptor set layout for that set number.
When consuming a descriptor, a descriptor is considered valid if the
descriptor is not undefined as described by
descriptor set allocation.
If the
nullDescriptor
feature is enabled, a null descriptor is also considered valid. A
descriptor that was disturbed by
Pipeline Layout Compatibility,
or was never bound by cmdBindDescriptorSets is not considered valid.
For any given descriptor,
DescriptorBindingFlagBits
and
DescriptorSetLayoutCreateFlagBits
determine if validity is defined in terms of the descriptor being
statically accessed, or dynamically accessed. If the descriptor is
determined to be accessed by the appropriate definition, the consuming
descriptor type in the pipeline must match the
DescriptorType in
DescriptorSetLayoutCreateInfo for the
descriptor to be considered valid. If a descriptor is a mutable
descriptor, the consuming descriptor type in the pipeline must match
the active descriptor type for the descriptor to be considered valid.
Further validation may be carried out beyond validation for descriptor types, e.g. Texel Input Validation.
If any of the sets being bound include dynamic uniform or storage
buffers, then pDynamicOffsets includes one element for each array
element in each dynamic descriptor type binding in each set. Values are
taken from pDynamicOffsets in an order such that all entries for set N
come before set N+1; within a set, entries are ordered by the binding
numbers in the descriptor set layouts; and within a binding array,
elements are in order. dynamicOffsetCount must equal the total
number of dynamic descriptors in the sets being bound.
The effective offset used for dynamic uniform and storage buffer
bindings is the sum of the relative offset taken from pDynamicOffsets,
and the base address of the buffer plus base offset in the descriptor
set. The range of the dynamic uniform and storage buffer bindings is the
buffer range as specified in the descriptor set.
Each of the pDescriptorSets must be compatible with the pipeline
layout specified by layout. The layout used to program the bindings
must also be compatible with the pipeline used in subsequent
bound pipeline commands
with that pipeline type, as defined in the
Pipeline Layout Compatibility
section.
The descriptor set contents bound by a call to cmdBindDescriptorSets
may be consumed at the following times:
- For descriptor bindings created with the
DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BITbit set, the contents may be consumed when the command buffer is submitted to a queue, or during shader execution of the resulting draws and dispatches, or any time in between. Otherwise, - during host execution of the command, or during shader execution of the resulting draws and dispatches, or any time in between.
Thus, the contents of a descriptor set binding must not be altered (overwritten by an update command, or freed) between the first point in time that it may be consumed, and when the command completes executing on the queue.
The contents of pDynamicOffsets are consumed immediately during
execution of cmdBindDescriptorSets. Once all pending uses have
completed, it is legal to update and reuse a descriptor set.
Valid Usage
- If
commandBufferis a secondary command buffer, it must have begun withCommandBufferInheritanceDescriptorHeapInfoEXT::pSamplerHeapBindInfoequal toNULL
- If
commandBufferis a secondary command buffer, it must have begun withCommandBufferInheritanceDescriptorHeapInfoEXT::pResourceHeapBindInfoequal toNULL - Each element of
pDescriptorSetsthat is notNULL_HANDLEmust have been allocated with aDescriptorSetLayoutthat matches (is the same as, or identically defined as) theDescriptorSetLayoutat set n inlayout, where n is the sum offirstSetand the index intopDescriptorSets -
dynamicOffsetCountmust be equal to the total number of dynamic descriptors inpDescriptorSets - The sum of
firstSetanddescriptorSetCountmust be less than or equal toPipelineLayoutCreateInfo::setLayoutCountprovided whenlayoutwas created - Each element of
pDynamicOffsetswhich corresponds to a descriptor binding with typeDESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMICmust be a multiple ofPhysicalDeviceLimits::minUniformBufferOffsetAlignment - Each element of
pDynamicOffsetswhich corresponds to a descriptor binding with typeDESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMICmust be a multiple ofPhysicalDeviceLimits::minStorageBufferOffsetAlignment - For each
dynamic uniform or storage buffer binding in
pDescriptorSets, the sum of the effective offset and the range of the binding must be less than or equal to the size of the buffer - For each
dynamic uniform or storage buffer binding in
pDescriptorSets, if the range was set withWHOLE_SIZEthenpDynamicOffsetswhich corresponds to the descriptor binding must be 0 - Each element of
pDescriptorSetsmust not have been allocated from aDescriptorPoolwith theDESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXTflag set - If the
graphicsPipelineLibrary
feature is not enabled, each element of
pDescriptorSetsmust be a validDescriptorSet - Each element of
pDescriptorSetsmust have been allocated with aDescriptorSetLayoutwhich was not created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If any element
of
pDescriptorSetswas allocated from a descriptor pool created with aDescriptorPoolCreateInfostructure that had aDataGraphProcessingEngineCreateInfoARMstructure specifying foreign data processing engines in itspNextchain, then the command pool from whichcommandBufferwas allocated must have been created with aCommandPoolCreateInfostructure that had aDataGraphProcessingEngineCreateInfoARMstructure in itspNextchain specifying a superset of all the foreign data processing engines specified when creating the descriptor pools from which the elements ofpDescriptorSetswere allocated - If none of the
elements of
pDescriptorSetswere allocated from a descriptor pool created with aDescriptorPoolCreateInfostructure that had aDataGraphProcessingEngineCreateInfoARMstructure specifying foreign data processing engines in itspNextchain, then the command pool from whichcommandBufferwas allocated must not have been created with aCommandPoolCreateInfostructure that had aDataGraphProcessingEngineCreateInfoARMstructure in itspNextchain -
pipelineBindPointmust be supported by thecommandBuffer’s parentCommandPool’s queue family
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pipelineBindPointmust be a validPipelineBindPointvalue -
layoutmust be a validPipelineLayouthandle -
pDescriptorSetsmust be a valid pointer to an array ofdescriptorSetCountvalid orNULL_HANDLEDescriptorSethandles - If
dynamicOffsetCountis not0,pDynamicOffsetsmust be a valid pointer to an array ofdynamicOffsetCountuint32_tvalues -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_DATA_GRAPH_BIT_ARM, orQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
-
descriptorSetCountmust be greater than0 - Each of
commandBuffer,layout, and the elements ofpDescriptorSetsthat 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 | Both | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_DATA_GRAPH_BIT_ARM VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdBindDescriptorSets is not affected by conditional rendering
See Also
VK_VERSION_1_0,
CommandBuffer,
DescriptorSet,
PipelineBindPoint,
PipelineLayout
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> Buffer |
|
| -> ("offset" ::: DeviceSize) |
|
| -> IndexType |
|
| -> io () |
vkCmdBindIndexBuffer - Bind an index buffer to a command buffer
Description
If the
maintenance6
feature is enabled, buffer can be
NULL_HANDLE. If buffer is
NULL_HANDLE and the
nullDescriptor
feature is enabled, every index fetched results in a value of zero.
Valid Usage
- The sum of
offsetand the base address of the range ofDeviceMemoryobject that is backingbuffer, must be a multiple of the size of the type indicated byindexType -
buffermust have been created with theBUFFER_USAGE_INDEX_BUFFER_BITusage flag set - If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
indexTypemust not beINDEX_TYPE_NONE_KHR - If
indexTypeisINDEX_TYPE_UINT8, the indexTypeUint8 feature must be enabled - If the
maintenance6
feature is not enabled,
buffermust not beNULL_HANDLE - If
bufferisNULL_HANDLE, offset must be zero
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
- If
bufferis notNULL_HANDLE,buffermust be a validBufferhandle -
indexTypemust be a validIndexTypevalue -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
- Both of
buffer, andcommandBufferthat 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 | Both | Outside | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdBindIndexBuffer is not affected by conditional rendering
See Also
VK_VERSION_1_0,
Buffer, CommandBuffer,
DeviceSize,
IndexType
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("firstBinding" ::: Word32) |
|
| -> ("buffers" ::: Vector Buffer) |
|
| -> ("offsets" ::: Vector DeviceSize) |
|
| -> io () |
vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer
Description
The values taken from elements i of pBuffers and pOffsets replace
the current state for the vertex input binding firstBinding + i, for i
in [0, bindingCount). The vertex input binding is updated to start at
the offset indicated by pOffsets[i] from the start of the buffer
pBuffers[i]. All vertex input attributes that use each of these
bindings will use these updated addresses in their address calculations
for subsequent drawing commands. If the
nullDescriptor
feature is enabled, elements of pBuffers can be
NULL_HANDLE, and can be used by the
vertex shader. If a vertex input attribute is bound to a vertex input
binding that is NULL_HANDLE, the values
taken from memory are considered to be zero, and missing G, B, or A
components are
filled with (0,0,1).
Valid Usage
-
firstBindingmust be less thanPhysicalDeviceLimits::maxVertexInputBindings
- The sum of
firstBindingandbindingCountmust be less than or equal toPhysicalDeviceLimits::maxVertexInputBindings - All elements of
pOffsetsmust be less than the size of the corresponding element inpBuffers - All elements of
pBuffersmust have been created with theBUFFER_USAGE_VERTEX_BUFFER_BITusage flag set - Each element of
pBuffersthat is non-sparse must be bound completely and contiguously to a singleDeviceMemoryobject - If the
nullDescriptor
feature is not enabled, all elements of
pBuffersmust not beNULL_HANDLE - If an element of
pBuffersisNULL_HANDLE, then the corresponding element ofpOffsetsmust be zero
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pBuffersmust be a valid pointer to an array ofbindingCountvalid orNULL_HANDLEBufferhandles -
pOffsetsmust be a valid pointer to an array ofbindingCountDeviceSizevalues -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
-
bindingCountmust be greater than0 - Both of
commandBuffer, and the elements ofpBuffersthat 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 | Both | Outside | VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdBindVertexBuffers is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("vertexCount" ::: Word32) |
|
| -> ("instanceCount" ::: Word32) |
|
| -> ("firstVertex" ::: Word32) |
|
| -> ("firstInstance" ::: Word32) |
|
| -> io () |
vkCmdDraw - Draw primitives
Description
When the command is executed, primitives are assembled using the current
primitive topology and vertexCount consecutive vertex indices with the
first vertexIndex value equal to firstVertex. The primitives are
drawn instanceCount times with instanceIndex starting with
firstInstance and increasing sequentially for each instance. The
assembled primitives execute the bound graphics pipeline.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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 withmagFilterorminFilterequal toFILTER_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’slevelCountandlayerCountmust be 1 - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’sviewTypemust beIMAGE_VIEW_TYPE_1DorIMAGE_VIEW_TYPE_2D - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values - 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
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_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 - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - 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 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - 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 - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a set n, 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 currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT - For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command
- If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT - Descriptors in each bound descriptor
set, specified via
cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If an image descriptor is
accessed by a shader, the
ImageLayoutmust match the subresource accessible from theImageViewas defined by the image layout matching rules - 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 - Descriptors in bound descriptor buffers,
specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - 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 - If a descriptor is dynamically used with
a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If a pipeline is 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 specified
statically in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it 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 bound shaders must not be a protected resource - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageVieworBufferViewis accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORMis 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
ImageViewcreated with the formatFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - 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
OpImageSampleWeightedQCOMis 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
OpImageSampleWeightedQCOMuses 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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is 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 a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
- If a descriptor with type equal to any
of
DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,DESCRIPTOR_TYPE_SAMPLED_IMAGE,DESCRIPTOR_TYPE_STORAGE_IMAGE, orDESCRIPTOR_TYPE_INPUT_ATTACHMENTis accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written - The
DeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object incommandBuffer - If this command is recorded inside a
tile shading render pass
instance, the stages corresponding to the pipeline bind point used
by this command must only include
SHADER_STAGE_VERTEX_BIT,SHADER_STAGE_FRAGMENT_BIT, and/orSHADER_STAGE_COMPUTE_BIT - If this command is recorded where
per-tile execution model
is enabled, there must be no access to any image while the image
was be transitioned to the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTlayout - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the underlyingTensorARMobject must have been created with theTENSOR_USAGE_SHADER_BIT_ARMusage flag set - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided viaTensorCreateInfoARM::pDescriptionwhen creating the underlyingTensorARMobject - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with theFormatof theTensorViewARMused for the access - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignment - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignment - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignment - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignment - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddress - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validDeviceAddress - For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound
- If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified viaDeviceAddressRangeEXTwhen the descriptor was written - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified byDeviceAddressRangeEXTwhen the descriptor was written - If the
robustBufferAccess2
feature is not enabled, the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified byDeviceAddressRangeEXTwhen the descriptor was written - If any
bound shader
uses an embedded sampler via a
descriptor mapping,
the value of
pBindInfo->reservedRangeSizeset forcmdBindSamplerHeapEXTmust be greater than or equal to minSamplerHeapReservedRangeWithEmbedded - If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set bycmdPushDataEXT - If a
bound shader
was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned to minUniformBufferOffsetAlignment - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_STORAGE_BUFFER_BITusage flag set - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned to minStorageBufferOffsetAlignment - If a pipeline is bound to the pipeline
bind point used by this command, or shader is bound to a shader
stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from aAccelerationStructureKHRobject viagetAccelerationStructureDeviceAddressKHRor handle retrieved from aAccelerationStructureNVobject viagetAccelerationStructureHandleNV - If a shader uses a sampler descriptor
to sample an image as a result of this command, and that sampler
descriptor uses a custom border color with an index defined by
SamplerCustomBorderColorIndexCreateInfoEXT, the value ofSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - 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 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 boundFramebufferas specified by Fragment Input Attachment Compatibility - Input attachment
views accessed in a dynamic render pass with a
InputAttachmentIndexreferenced byRenderingInputAttachmentIndexInfo, or noInputAttachmentIndexifRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexorRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexareNULL, must be created with aImageViewthat is compatible with the corresponding color, depth, or stencil attachment inRenderingInfo - Input attachment
views accessed in a dynamic render pass via a shader object must
have an
InputAttachmentIndexif bothRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexandRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexare non-NULL - If an input attachment
view accessed in a dynamic render pass via a shader object has an
InputAttachmentIndex, theInputAttachmentIndexmust match an index inRenderingInputAttachmentIndexInfo - 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 a color attachment is written by any
prior command in this subpass or by the load, store, or resolve
operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a depth attachment is written by any
prior command in this subpass or by the load, store, or resolve
operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a stencil attachment is written by
any prior command in this subpass or by the load, store, or resolve
operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a color attachment is read in this
command in any way other than as an attachment, or has been read by
any prior command in this subpass as a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, the color attachment must not be written to by this command - If a depth attachment is read in this
command in any way other than as an attachment, or has been read by
any prior command in this subpass as a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, the depth attachment must not be written to by this command - If a stencil attachment is read in this
command in any way other than as an attachment, or has been read by
any prior command in this subpass as a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, the stencil attachment must not be written to by this command - If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command
- 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 and not subsequently invalidated 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 and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBiasEnableisTRUE, thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUEwith a blend equations where anyBlendFactormember isBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, thencmdSetBlendConstantsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBoundsTestEnableisTRUE, thencmdSetDepthBoundsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilCompareMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilWriteMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, the current value of andrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilReferencemust have been called and not subsequently invalidated 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 toTRUE, then the active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleLocationsEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofsampleLocationsEnableisTRUE, thencmdSetSampleLocationsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_CULL_MODEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCullModemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFrontFacemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE,cmdSetDepthTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthWriteEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthCompareOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthBounds
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBoundsTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetStencilTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetViewportWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetScissorWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled, and the state is not inherited, then 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
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, thencmdSetViewportWScalingNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, 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
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NVand the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoarseSampleOrderNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, 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
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled, thencmdSetExclusiveScissorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled, and the most recent call tocmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled, thencmdSetRasterizerDiscardEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBiasEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITor a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value oflogicOpEnableisTRUE, thencmdSetLogicOpEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
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 the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, then for each color attachment, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value ofblendEnablemust beFALSE If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of
rasterizerDiscardEnableisFALSE, and none of the following is enabled:- the
VK_AMD_mixed_attachment_samplesextension - the
VK_NV_framebuffer_mixed_samplesextension - the multisampledRenderToSingleSampled feature
then the current value of
rasterizationSamplesmust be the same as the current color and/or depth/stencil attachments- the
- If a shader object is bound to any
graphics stage, the current render pass instance must have been
begun with
cmdBeginRendering - 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 bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED - If the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the current render
pass instance was begun with
cmdBeginRendering, with aRenderingInfo::colorAttachmentCountequal to1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If there is no shader object bound to
any graphics stage, the current render pass instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If the current render pass instance was
begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, thencmdSetColorBlendEnableEXTmust have set the blend enable toFALSEprior to this drawing command - If the current render pass instance was
begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If there is a shader object bound to any
graphics stage, and the current render pass includes a color
attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetColorBlendEnableEXTmust have set blend enable toFALSEprior to this drawing command - If there is a shader
object bound to any graphics stage, and the current render pass
includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If the current render pass instance was
begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If the current render pass instance was
begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If there is a shader object
bound to any graphics stage, and the current render pass includes a
color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If there is a shader object
bound to any graphics stage, and the current render pass includes a
color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorWriteEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of active color attachments - If the
VK_EXT_discard_rectanglesextension is enabled, a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfoincluded aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created withDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfodid not include aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current
render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView - If the
current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current
render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView - If the
current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If the current render pass instance
was begun with
cmdBeginRenderingandRenderingFragmentShadingRateAttachmentInfoKHR::imageViewwas notNULL_HANDLE, the 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
cmdBeginRendering, the dynamicRenderingLocalRead feature is enabled, theRENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHRflag is specified, and an attachment is being used as a feedback loop as specified by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#rendering-attachment-input-attachment-feedback,RenderingAttachmentFlagsInfoKHR::flagsfor that attachment must includeRENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR - If the current render pass instance
was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the current render pass instance
was created with
RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVEorRENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created withPIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have alayersvalue less than or equal toPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers - If the 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 bound graphics pipeline - If the current render pass
instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the 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 bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If the
bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, 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 ofrasterizationSamplesfor the bound graphics pipeline - If the
bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If the
bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command is called inside a
render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current render pass
instance was begun with
cmdBeginRendering, the bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the current render pass
instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->imageViewwas notNULL_HANDLE, then the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->resolveImageViewwas notNULL_HANDLE, then the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current render pass instance was
begun with a
cmdBeginRenderingcall incommandBuffer, itsRenderingInfo::flagsparameter must not haveRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BITset unlessRENDERING_CONTENTS_INLINE_BIT_KHRis also set -
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
depthClamp
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthClampEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetPolygonModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRasterizationSamplesEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleMaskEXTmust have been called and not subsequently invalidated 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, andalphaToCoverageEnablewasTRUEin the last call tocmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetAlphaToCoverageEnableEXTin the current command buffer setalphaToCoverageEnabletoTRUE, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToOneEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetLogicOpEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorBlendEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorWriteMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_GEOMETRY_BITstage and theDYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled, thencmdSetRasterizationStreamEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofconservativeRasterizationModeisCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, conservativePointAndLineRasterization is not supported, a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line or point topology class, then the current value ofconservativeRasterizationModemust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state, thencmdSetDepthClipEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, a shader object is bound to theSHADER_STAGE_VERTEX_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetProvokingVertexModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled and a shader object is bound to any graphics
stage, or a bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLEdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstippledLineEnableisTRUE, thencmdSetLineStipplemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, the effective rasterization input topology is in line topology class, and the currentlineRasterizationModeisLINE_RASTERIZATION_MODE_BRESENHAMorLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the currentalphaToCoverageEnable,alphaToOneEnableandsampleShadingEnablestates must all beFALSE - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled, thencmdSetDepthClipNegativeOneToOneEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClampControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXTdynamic state enabled, and the current value ofdepthClampEnableisTRUE, thencmdSetDepthClampRangeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled, thencmdSetViewportWScalingEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, thencmdSetViewportSwizzleNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageToColorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageToColorEnableisTRUE, thencmdSetCoverageToColorLocationNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageModulationModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationModeis any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationTableEnableisTRUE, thencmdSetCoverageModulationTableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetShadingRateImageEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
pipelineFragmentShadingRate
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFragmentShadingRateKHRmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageReductionModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - 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 the multisampledRenderToSingleSampled feature is not enabled, and neither theVK_AMD_mixed_attachment_samplesnor theVK_NV_framebuffer_mixed_samplesextensions are 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_RASTERIZATION_SAMPLES_EXTstate enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as therasterizationSamplesmember of that structure - If a shader object is bound
to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorBlendEnableEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments - If a shader object is bound
to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorWriteMaskEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUE, then the number of active color attachments must not exceed advancedBlendMaxColorAttachments - If a graphics pipeline is bound was
created with
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a graphics
pipeline is bound was created with
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendAdvancedEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created withDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then eithercmdSetColorBlendAdvancedEXTorcmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - 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, and the current value ofsampleLocationsEnableisTRUE, 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, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, andsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXTthen the current active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_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_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationsPerPixelmust equalrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If a shader
object is bound to any graphics stage or 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 active color attachment - 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 bound pipeline, 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 there must be an active 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 the
VK_NV_fragment_coverage_to_colorextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then there must be an active 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 the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVorDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic states enabled, then the current values ofcoverageReductionMode,rasterizationSamples, 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_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, 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 the coverageReductionMode feature is not enabled, or the current value ofcoverageReductionModeis notCOVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value ofrasterizationSamplesis greater than sample count of the color attachment, then sample shading must be disabled - 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, 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, 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, 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, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE - If the 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 a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If dynamic state was inherited from
CommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command - For each shader object bound to a
graphics stage, except for shader object bound to the last graphics
stage in the logical pipeline, it must have been created with a
nextStageincluding the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline - If there is no bound graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_VERTEX_BIT - If there is no bound graphics pipeline,
and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT - If there is no bound graphics pipeline,
and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT - If there is no bound graphics pipeline,
and the
geometryShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_GEOMETRY_BIT - If there is no bound graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_FRAGMENT_BIT - If there is no bound graphics pipeline,
and the
taskShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TASK_BIT_EXT - If there is no bound graphics pipeline,
and the
meshShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_MESH_BIT_EXT - If there is no bound graphics pipeline,
and at least one of the
taskShader
and
meshShader
features is enabled, one of the
SHADER_STAGE_VERTEX_BITorSHADER_STAGE_MESH_BIT_EXTstages must have a validShaderEXTbound, and the other must have noShaderEXTbound - If there is no bound graphics pipeline,
and a valid
ShaderEXTis bound to theSHADER_STAGE_VERTEX_BITstage, there must be noShaderEXTbound to either theSHADER_STAGE_TASK_BIT_EXTstage or theSHADER_STAGE_MESH_BIT_EXTstage - If any graphics shader is bound which
was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag in the samecreateShadersEXTcall must also be bound - If any graphics shader is bound which
was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag as part of the samecreateShadersEXTcall must not have anyShaderEXTbound - All bound graphics shader objects must have been created with identical or identically defined push constant ranges
- All bound graphics shader objects must
have either been created with the
SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag set, or with identical or identically defined arrays of descriptor set layouts - If the current render
pass instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the bound graphics pipeline
state includes a fragment shader stage, was created with
DYNAMIC_STATE_DEPTH_WRITE_ENABLEset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpDepthAttachmentReadEXT, thedepthWriteEnableparameter in the last call tocmdSetDepthWriteEnablemust beFALSE - If the bound graphics pipeline
state includes a fragment shader stage, was created with
DYNAMIC_STATE_STENCIL_WRITE_MASKset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpStencilAttachmentReadEXT, thewriteMaskparameter in the last call tocmdSetStencilWriteMaskmust be0 - If a shader object is bound to any
graphics stage or the bound graphics pipeline was created with
DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment isFORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of thepColorWriteMasksparameter ofcmdSetColorWriteMaskEXTmust either include all ofCOLOR_COMPONENT_R_BIT,COLOR_COMPONENT_G_BIT, andCOLOR_COMPONENT_B_BIT, or none of them - If
blending
is enabled for any attachment where either the source or destination
blend factors for that attachment
use the secondary color input,
the maximum value of
Locationfor any output attachment statically used in theFragmentExecutionModelexecuted by this command must be less than maxFragmentDualSrcAttachments - If the current render pass was begun
with
cmdBeginRendering, there is no shader object bound to any graphics stage, the value of each element ofRenderingAttachmentLocationInfo::pColorAttachmentLocationsin the bound pipeline must match the value for the corresponding locations set currently in the current render pass instance - If the current render pass was begun
with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element ofRenderingInputAttachmentIndexInfo::pColorAttachmentInputIndicesin the bound pipeline must match the value for the corresponding index set currently in the current render pass instance - If the current render pass was begun
with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render pass was begun
with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render pass was begun
with
cmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag, the bound graphics pipeline must have been created withPIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT - If the bound graphics pipeline was
created with
PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun withcmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag - If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled
- If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass
- If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofviewportCount - If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofscissorCount - If current render pass instance was
begun with
cmdBeginRenderingwithRenderingInfo::flagswhich includesRENDERING_FRAGMENT_REGION_BIT_EXT, and if sample shading is enabled (explicitly or implicitly), then the minimum fraction for sample shading must equal 0.0 - If the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must have been created with aCustomResolveCreateInfoEXT - If the current render pass instance was
begun with
cmdBeginRenderingand does not contain a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must not have been created with aCustomResolveCreateInfoEXT - If the current render pass
instance was begun with
cmdBeginRenderingandcmdBeginCustomResolveEXThas been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If the current render pass
instance was begun with
cmdBeginRenderingand contains a custom resolve, andcmdBeginCustomResolveEXThas not been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, the bound graphics pipeline must have been created with aCustomResolveCreateInfoEXT::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewequal toNULL_HANDLEmust have the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED - If the
dynamicRenderingUnusedAttachments
feature is enabled, the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView - If the
current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView - If the
current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the current render
pass instance was begun with
cmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0andcmdBeginCustomResolveEXThas been recorded in the render pass instance, then for each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLE, theresolveImageViewmust have been created with a sample count equal to the value ofrasterizationSamplesfor the bound graphics pipeline - If the current render pass
instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->resolveImageView - If the current render pass
instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->resolveImageView - If a shader object is bound to
the fragment stage, the current render pass instance was begun with
cmdBeginRendering, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If a shader object is bound to
the fragment stage, the current render pass instance was begun with
cmdBeginRenderingand contains a custom resolve, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas not yet been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - If
commandBufferis a protected command buffer and protectedNoFault is not supported, any resource written to by thePipelineobject bound to the pipeline bind point used by this command must not be an unprotected resource - If
commandBufferis a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in thePipelineobject bound to the pipeline bind point used by this command must not write to any resource - If any of the shader stages of
the
Pipelinebound to the pipeline bind point used by this command uses the RayQueryKHR capability, thencommandBuffermust not be a protected command buffer - 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 - If the
robustBufferAccess
feature is not enabled, and that pipeline was created without
enabling
PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSforvertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ??? - For each vertex attribute accessed by
this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis a packed format, and the legacyVertexAttributes feature is not enabled, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format - For each vertex attribute accessed by
this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis not a packed format, and either the legacyVertexAttributes feature is not enabled orformathas 64-bit components, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format - If there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGYdynamic state enabled thencmdSetPrimitiveTopologymust have been called and not subsequently invalidated 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 and the dynamicPrimitiveTopologyUnrestricted isFALSE, then theprimitiveTopologyparameter ofcmdSetPrimitiveTopologymust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - If a
SHADER_STAGE_TESSELLATION_CONTROL_BITstage is bound, then the current value ofprimitiveTopologymust bePRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command, then aSHADER_STAGE_TESSELLATION_CONTROL_BITstage must be bound - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_POINT_LISTprior to this drawing command, the maintenance5 feature is not enabled, both aSHADER_STAGE_TESSELLATION_EVALUATION_BITandSHADER_STAGE_GEOMETRY_BITstage are not bound, then theVertexExecutionModelmust have aPointSizedecorated variable that is statically written to - If the bound graphics pipeline was
created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDEdynamic state enabled, but without theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2must not beNULL - If there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled thencmdSetVertexInputEXTmust have been called and not subsequently invalidated in the current command buffer prior to this draw command - If the
vertexAttributeRobustness
feature is not enabled, and the
maintenance9
feature is not enabled, and there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled then all variables with theInputstorage class decorated withLocationin theVertexExecutionModelOpEntryPointmust contain a location inVertexInputAttributeDescription2EXT::location - If there is a shader object bound to
the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a givenInputvariable of the correspondingLocationin theVertexExecutionModelOpEntryPointis 64-bit, then the numeric type associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be the same asVertexInputAttributeDescription2EXT::format - If there is a shader object bound to
the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then the scalar width associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be 64-bit - If there is a shader object bound to
the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and the scalar width associated with aLocationdecoratedInputvariable in theVertexExecutionModelOpEntryPointis 64-bit, then the correspondingVertexInputAttributeDescription2EXT::formatmust have a 64-bit component - If there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then allInputvariables at the correspondingLocationin theVertexExecutionModelOpEntryPointmust not use components that are not present in the format - If there is a shader object bound to the
SHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with both aSHADER_STAGE_TESSELLATION_CONTROL_BITstage and theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled, and the current value ofprimitiveTopologyisPRIMITIVE_TOPOLOGY_PATCH_LIST, thencmdSetPatchControlPointsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
primitiveTopologyListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_POINT_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST,PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, orPRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to theSHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled, thencmdSetPrimitiveRestartEnablemust beFALSE - If the
primitiveTopologyPatchListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_PATCH_LIST, there is a shader object bound to theSHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust beFALSE - The bound graphics pipeline must not
have been created with the
PipelineShaderStageCreateInfo::stagemember of any element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no shader object bound
to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages - If a shader object is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_TESSELLATION_EVALUATION_BITstage and theDYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled, thencmdSetTessellationDomainOriginEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader is bound to both
the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the type of subdivision, they must be the same - If a shader is bound to both
the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the orientation of triangles, they must be the same - If a shader is bound to both
the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the segment spacing, they must be the same - If a shader is bound to both
the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the output patch size, they must be the same - If the bound graphics pipeline state
was created with
PipelineVertexInputDivisorStateCreateInfoin thepNextchain ofGraphicsPipelineCreateInfo::pVertexInputState, any member ofPipelineVertexInputDivisorStateCreateInfo::pVertexBindingDivisorshas a value other than1indivisor, andPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstanceisFALSE, thenfirstInstancemust be0 - If
shader objects
are used for drawing or the bound graphics pipeline state was
created with the
DYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, any member of thepVertexBindingDescriptionsparameter to thecmdSetVertexInputEXTcall that sets this dynamic state has a value other than1indivisor, andPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstanceisFALSE, thenfirstInstancemust be0
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
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 | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdDraw is affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("indexCount" ::: Word32) |
|
| -> ("instanceCount" ::: Word32) |
|
| -> ("firstIndex" ::: Word32) |
|
| -> ("vertexOffset" ::: Int32) |
|
| -> ("firstInstance" ::: Word32) |
|
| -> io () |
vkCmdDrawIndexed - Draw primitives with indexed vertices
Description
When the command is executed, primitives are assembled using the current
primitive topology and indexCount vertices whose indices are retrieved
from the index buffer. The index buffer is treated as an array of
tightly packed unsigned integers of size defined by the
cmdBindIndexBuffer2::indexType
or the cmdBindIndexBuffer::indexType parameter with which the buffer
was bound.
The first vertex index is at an offset of firstIndex × indexSize +
offset within the bound index buffer, where offset is the offset
specified by cmdBindIndexBuffer or
cmdBindIndexBuffer2,
and indexSize is the byte size of the type specified by indexType.
Subsequent index values are retrieved from consecutive locations in the
index buffer. Indices are first compared to the primitive restart value,
then zero extended to 32 bits (if the indexType is
INDEX_TYPE_UINT8 or
INDEX_TYPE_UINT16) and have
vertexOffset added to them, before being supplied as the vertexIndex
value.
The primitives are drawn instanceCount times with instanceIndex
starting with firstInstance and increasing sequentially for each
instance. The assembled primitives execute the bound graphics pipeline.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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 withmagFilterorminFilterequal toFILTER_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’slevelCountandlayerCountmust be 1 - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’sviewTypemust beIMAGE_VIEW_TYPE_1DorIMAGE_VIEW_TYPE_2D - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values - 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
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_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 - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - 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 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - 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 - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a set n, 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 currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT - For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command
- If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If an image descriptor is
accessed by a shader, the
ImageLayoutmust match the subresource accessible from theImageViewas defined by the image layout matching rules - 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 - Descriptors in bound descriptor
buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - 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 - If a descriptor is dynamically
used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If a pipeline is 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 specified
statically in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it 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 bound shaders must not be a protected resource - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageVieworBufferViewis accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORMis 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
ImageViewcreated with the formatFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - 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
OpImageSampleWeightedQCOMis 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
OpImageSampleWeightedQCOMuses 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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is 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 a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
- If a descriptor with type equal
to any of
DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,DESCRIPTOR_TYPE_SAMPLED_IMAGE,DESCRIPTOR_TYPE_STORAGE_IMAGE, orDESCRIPTOR_TYPE_INPUT_ATTACHMENTis accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written - The
DeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object incommandBuffer - If this command is recorded
inside a
tile shading render pass
instance, the stages corresponding to the pipeline bind point used
by this command must only include
SHADER_STAGE_VERTEX_BIT,SHADER_STAGE_FRAGMENT_BIT, and/orSHADER_STAGE_COMPUTE_BIT - If this command is recorded where
per-tile execution model
is enabled, there must be no access to any image while the image
was be transitioned to the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTlayout - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the underlyingTensorARMobject must have been created with theTENSOR_USAGE_SHADER_BIT_ARMusage flag set - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided viaTensorCreateInfoARM::pDescriptionwhen creating the underlyingTensorARMobject - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with theFormatof theTensorViewARMused for the access - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddress - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validDeviceAddress - For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound
- If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified viaDeviceAddressRangeEXTwhen the descriptor was written - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified byDeviceAddressRangeEXTwhen the descriptor was written - If the
robustBufferAccess2
feature is not enabled, the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified byDeviceAddressRangeEXTwhen the descriptor was written - If any
bound shader
uses an embedded sampler via a
descriptor mapping,
the value of
pBindInfo->reservedRangeSizeset forcmdBindSamplerHeapEXTmust be greater than or equal to minSamplerHeapReservedRangeWithEmbedded - If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set bycmdPushDataEXT - If a
bound shader
was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned to minUniformBufferOffsetAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_STORAGE_BUFFER_BITusage flag set - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned to minStorageBufferOffsetAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from aAccelerationStructureKHRobject viagetAccelerationStructureDeviceAddressKHRor handle retrieved from aAccelerationStructureNVobject viagetAccelerationStructureHandleNV - If a shader uses a sampler
descriptor to sample an image as a result of this command, and that
sampler descriptor uses a custom border color with an index defined
by
SamplerCustomBorderColorIndexCreateInfoEXT, the value ofSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - 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 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 boundFramebufferas specified by Fragment Input Attachment Compatibility - Input
attachment views accessed in a dynamic render pass with a
InputAttachmentIndexreferenced byRenderingInputAttachmentIndexInfo, or noInputAttachmentIndexifRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexorRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexareNULL, must be created with aImageViewthat is compatible with the corresponding color, depth, or stencil attachment inRenderingInfo - Input
attachment views accessed in a dynamic render pass via a shader
object must have an
InputAttachmentIndexif bothRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexandRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexare non-NULL - If an input
attachment view accessed in a dynamic render pass via a shader
object has an
InputAttachmentIndex, theInputAttachmentIndexmust match an index inRenderingInputAttachmentIndexInfo - 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 a color attachment is written
by any prior command in this subpass or by the load, store, or
resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a depth attachment is written
by any prior command in this subpass or by the load, store, or
resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a stencil attachment is
written by any prior command in this subpass or by the load, store,
or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a color attachment is read in
this command in any way other than as an attachment, or has been
read by any prior command in this subpass as a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, the color attachment must not be written to by this command - If a depth attachment is read in
this command in any way other than as an attachment, or has been
read by any prior command in this subpass as a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, the depth attachment must not be written to by this command - If a stencil attachment is read
in this command in any way other than as an attachment, or has been
read by any prior command in this subpass as a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, the stencil attachment must not be written to by this command - If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command
- 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 and not subsequently invalidated 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 and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBiasEnableisTRUE, thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUEwith a blend equations where anyBlendFactormember isBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, thencmdSetBlendConstantsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBoundsTestEnableisTRUE, thencmdSetDepthBoundsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilCompareMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilWriteMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, the current value of andrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilReferencemust have been called and not subsequently invalidated 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 toTRUE, then the active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleLocationsEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofsampleLocationsEnableisTRUE, thencmdSetSampleLocationsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_CULL_MODEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCullModemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFrontFacemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE,cmdSetDepthTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthWriteEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthCompareOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthBounds
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBoundsTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetStencilTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetViewportWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetScissorWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled, and the state is not inherited, then 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
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, thencmdSetViewportWScalingNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, 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
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NVand the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoarseSampleOrderNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, 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
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled, thencmdSetExclusiveScissorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled, and the most recent call tocmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled, thencmdSetRasterizerDiscardEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBiasEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITor a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value oflogicOpEnableisTRUE, thencmdSetLogicOpEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
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 the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, then for each color attachment, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value ofblendEnablemust beFALSE If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of
rasterizerDiscardEnableisFALSE, and none of the following is enabled:- the
VK_AMD_mixed_attachment_samplesextension - the
VK_NV_framebuffer_mixed_samplesextension - the multisampledRenderToSingleSampled feature
then the current value of
rasterizationSamplesmust be the same as the current color and/or depth/stencil attachments- the
- If a shader object is bound to
any graphics stage, the current render pass instance must have
been begun with
cmdBeginRendering - 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 bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If
the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline - If
the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED - If
the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering, with aRenderingInfo::colorAttachmentCountequal to1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If there is no shader object
bound to any graphics stage, the current render pass instance was
begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, thencmdSetColorBlendEnableEXTmust have set the blend enable toFALSEprior to this drawing command - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If there is a shader object bound
to any graphics stage, and the current render pass includes a color
attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetColorBlendEnableEXTmust have set blend enable toFALSEprior to this drawing command - If there is a
shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If there is a shader
object bound to any graphics stage, and the current render pass
includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If there is a shader
object bound to any graphics stage, and the current render pass
includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorWriteEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of active color attachments - If the
VK_EXT_discard_rectanglesextension is enabled, a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfoincluded aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created withDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfodid not include aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If
the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If
current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView - If
the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If
the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If
current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView - If
the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRenderingandRenderingFragmentShadingRateAttachmentInfoKHR::imageViewwas notNULL_HANDLE, the 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
cmdBeginRendering, the dynamicRenderingLocalRead feature is enabled, theRENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHRflag is specified, and an attachment is being used as a feedback loop as specified by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#rendering-attachment-input-attachment-feedback,RenderingAttachmentFlagsInfoKHR::flagsfor that attachment must includeRENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR - If the current render pass
instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the current render pass
instance was created with
RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVEorRENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created withPIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have alayersvalue less than or equal toPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers - If the 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 bound graphics pipeline - If the current render
pass instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the 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 bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If
the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, 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 ofrasterizationSamplesfor the bound graphics pipeline - If
the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If
the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command is called inside
a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current render pass
instance was begun with
cmdBeginRendering, the bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->imageViewwas notNULL_HANDLE, then the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->resolveImageViewwas notNULL_HANDLE, then the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the current render
pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current render
pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current render pass
instance was begun with a
cmdBeginRenderingcall incommandBuffer, itsRenderingInfo::flagsparameter must not haveRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BITset unlessRENDERING_CONTENTS_INLINE_BIT_KHRis also set -
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
depthClamp
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthClampEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetPolygonModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRasterizationSamplesEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleMaskEXTmust have been called and not subsequently invalidated 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, andalphaToCoverageEnablewasTRUEin the last call tocmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader
object is bound to any graphics stage, and the most recent call to
cmdSetAlphaToCoverageEnableEXTin the current command buffer setalphaToCoverageEnabletoTRUE, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToOneEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetLogicOpEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorBlendEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorWriteMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_GEOMETRY_BITstage and theDYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled, thencmdSetRasterizationStreamEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofconservativeRasterizationModeisCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
VK_EXT_conservative_rasterizationextension is enabled, conservativePointAndLineRasterization is not supported, a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line or point topology class, then the current value ofconservativeRasterizationModemust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state, thencmdSetDepthClipEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, a shader object is bound to theSHADER_STAGE_VERTEX_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetProvokingVertexModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled and a shader object is bound to any graphics
stage, or a bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLEdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstippledLineEnableisTRUE, thencmdSetLineStipplemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, the effective rasterization input topology is in line topology class, and the currentlineRasterizationModeisLINE_RASTERIZATION_MODE_BRESENHAMorLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the currentalphaToCoverageEnable,alphaToOneEnableandsampleShadingEnablestates must all beFALSE - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled, thencmdSetDepthClipNegativeOneToOneEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClampControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXTdynamic state enabled, and the current value ofdepthClampEnableisTRUE, thencmdSetDepthClampRangeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled, thencmdSetViewportWScalingEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, thencmdSetViewportSwizzleNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageToColorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageToColorEnableisTRUE, thencmdSetCoverageToColorLocationNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageModulationModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationModeis any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationTableEnableisTRUE, thencmdSetCoverageModulationTableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetShadingRateImageEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
pipelineFragmentShadingRate
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFragmentShadingRateKHRmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageReductionModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - 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 the multisampledRenderToSingleSampled feature is not enabled, and neither theVK_AMD_mixed_attachment_samplesnor theVK_NV_framebuffer_mixed_samplesextensions are 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_RASTERIZATION_SAMPLES_EXTstate enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as therasterizationSamplesmember of that structure - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorBlendEnableEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorWriteMaskEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUE, then the number of active color attachments must not exceed advancedBlendMaxColorAttachments - If a graphics pipeline is bound
was created with
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a graphics
pipeline is bound was created with
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendAdvancedEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created withDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then eithercmdSetColorBlendAdvancedEXTorcmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE -
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, and the current value ofsampleLocationsEnableisTRUE, 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, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, andsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXTthen the current active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_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_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationsPerPixelmust equalrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If a
shader object is bound to any graphics stage or 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 active color attachment - 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 bound pipeline, 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 there must be an active 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 the
VK_NV_fragment_coverage_to_colorextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then there must be an active 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 the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVorDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic states enabled, then the current values ofcoverageReductionMode,rasterizationSamples, 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_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, 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 the coverageReductionMode feature is not enabled, or the current value ofcoverageReductionModeis notCOVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value ofrasterizationSamplesis greater than sample count of the color attachment, then sample shading must be disabled - 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, 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, 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, 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, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE - If the 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 a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If dynamic state was inherited
from
CommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command - For each shader object bound
to a graphics stage, except for shader object bound to the last
graphics stage in the logical pipeline, it must have been created
with a
nextStageincluding the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline - If there is no bound graphics
pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_VERTEX_BIT - If there is no bound graphics
pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT - If there is no bound graphics
pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT - If there is no bound graphics
pipeline, and the
geometryShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_GEOMETRY_BIT - If there is no bound graphics
pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_FRAGMENT_BIT - If there is no bound graphics
pipeline, and the
taskShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TASK_BIT_EXT - If there is no bound graphics
pipeline, and the
meshShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_MESH_BIT_EXT - If there is no bound graphics
pipeline, and at least one of the
taskShader
and
meshShader
features is enabled, one of the
SHADER_STAGE_VERTEX_BITorSHADER_STAGE_MESH_BIT_EXTstages must have a validShaderEXTbound, and the other must have noShaderEXTbound - If there is no bound graphics
pipeline, and a valid
ShaderEXTis bound to theSHADER_STAGE_VERTEX_BITstage, there must be noShaderEXTbound to either theSHADER_STAGE_TASK_BIT_EXTstage or theSHADER_STAGE_MESH_BIT_EXTstage - If any graphics shader is bound
which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag in the samecreateShadersEXTcall must also be bound - If any graphics shader is bound
which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag as part of the samecreateShadersEXTcall must not have anyShaderEXTbound - All bound graphics shader objects must have been created with identical or identically defined push constant ranges
- All bound graphics shader objects
must have either been created with the
SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag set, or with identical or identically defined arrays of descriptor set layouts - If the current
render pass instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the bound graphics
pipeline state includes a fragment shader stage, was created with
DYNAMIC_STATE_DEPTH_WRITE_ENABLEset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpDepthAttachmentReadEXT, thedepthWriteEnableparameter in the last call tocmdSetDepthWriteEnablemust beFALSE - If the bound graphics
pipeline state includes a fragment shader stage, was created with
DYNAMIC_STATE_STENCIL_WRITE_MASKset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpStencilAttachmentReadEXT, thewriteMaskparameter in the last call tocmdSetStencilWriteMaskmust be0 - If a shader object is bound to
any graphics stage or the bound graphics pipeline was created with
DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment isFORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of thepColorWriteMasksparameter ofcmdSetColorWriteMaskEXTmust either include all ofCOLOR_COMPONENT_R_BIT,COLOR_COMPONENT_G_BIT, andCOLOR_COMPONENT_B_BIT, or none of them - If
blending
is enabled for any attachment where either the source or destination
blend factors for that attachment
use the secondary color input,
the maximum value of
Locationfor any output attachment statically used in theFragmentExecutionModelexecuted by this command must be less than maxFragmentDualSrcAttachments - If the current render pass was
begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, the value of each element ofRenderingAttachmentLocationInfo::pColorAttachmentLocationsin the bound pipeline must match the value for the corresponding locations set currently in the current render pass instance - If the current render pass was
begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element ofRenderingInputAttachmentIndexInfo::pColorAttachmentInputIndicesin the bound pipeline must match the value for the corresponding index set currently in the current render pass instance - If the current render pass was
begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render pass was
begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render pass was
begun with
cmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag, the bound graphics pipeline must have been created withPIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT - If the bound graphics pipeline
was created with
PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun withcmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag - If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled
- If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass
- If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofviewportCount - If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofscissorCount - If current render pass instance
was begun with
cmdBeginRenderingwithRenderingInfo::flagswhich includesRENDERING_FRAGMENT_REGION_BIT_EXT, and if sample shading is enabled (explicitly or implicitly), then the minimum fraction for sample shading must equal 0.0 - If the current render pass
instance was begun with
cmdBeginRenderingand contains a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must have been created with aCustomResolveCreateInfoEXT - If the current render pass
instance was begun with
cmdBeginRenderingand does not contain a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must not have been created with aCustomResolveCreateInfoEXT - If the current render
pass instance was begun with
cmdBeginRenderingandcmdBeginCustomResolveEXThas been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If the current render
pass instance was begun with
cmdBeginRenderingand contains a custom resolve, andcmdBeginCustomResolveEXThas not been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, the bound graphics pipeline must have been created with aCustomResolveCreateInfoEXT::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewequal toNULL_HANDLEmust have the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED - If
the
dynamicRenderingUnusedAttachments
feature is enabled, the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass instance
was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView - If
the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass instance
was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView - If
the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0andcmdBeginCustomResolveEXThas been recorded in the render pass instance, then for each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLE, theresolveImageViewmust have been created with a sample count equal to the value ofrasterizationSamplesfor the bound graphics pipeline - If the current render
pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->resolveImageView - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->resolveImageView - If a shader object is
bound to the fragment stage, the current render pass instance was
begun with
cmdBeginRendering, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If a shader object is
bound to the fragment stage, the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas not yet been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - If
commandBufferis a protected command buffer and protectedNoFault is not supported, any resource written to by thePipelineobject bound to the pipeline bind point used by this command must not be an unprotected resource - If
commandBufferis a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in thePipelineobject bound to the pipeline bind point used by this command must not write to any resource - If any of the shader
stages of the
Pipelinebound to the pipeline bind point used by this command uses the RayQueryKHR capability, thencommandBuffermust not be a protected command buffer - 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 - If the
robustBufferAccess
feature is not enabled, and that pipeline was created without
enabling
PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSforvertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ??? - For each vertex attribute
accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis a packed format, and the legacyVertexAttributes feature is not enabled, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format - For each vertex attribute
accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis not a packed format, and either the legacyVertexAttributes feature is not enabled orformathas 64-bit components, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format - If there is a shader object bound
to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGYdynamic state enabled thencmdSetPrimitiveTopologymust have been called and not subsequently invalidated 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 and the dynamicPrimitiveTopologyUnrestricted isFALSE, then theprimitiveTopologyparameter ofcmdSetPrimitiveTopologymust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - If a
SHADER_STAGE_TESSELLATION_CONTROL_BITstage is bound, then the current value ofprimitiveTopologymust bePRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command, then aSHADER_STAGE_TESSELLATION_CONTROL_BITstage must be bound - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_POINT_LISTprior to this drawing command, the maintenance5 feature is not enabled, both aSHADER_STAGE_TESSELLATION_EVALUATION_BITandSHADER_STAGE_GEOMETRY_BITstage are not bound, then theVertexExecutionModelmust have aPointSizedecorated variable that is statically written to - If the bound graphics
pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDEdynamic state enabled, but without theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2must not beNULL - If there is a shader object bound
to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled thencmdSetVertexInputEXTmust have been called and not subsequently invalidated in the current command buffer prior to this draw command - If the
vertexAttributeRobustness
feature is not enabled, and the
maintenance9
feature is not enabled, and there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled then all variables with theInputstorage class decorated withLocationin theVertexExecutionModelOpEntryPointmust contain a location inVertexInputAttributeDescription2EXT::location - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a givenInputvariable of the correspondingLocationin theVertexExecutionModelOpEntryPointis 64-bit, then the numeric type associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be the same asVertexInputAttributeDescription2EXT::format - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then the scalar width associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be 64-bit - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and the scalar width associated with aLocationdecoratedInputvariable in theVertexExecutionModelOpEntryPointis 64-bit, then the correspondingVertexInputAttributeDescription2EXT::formatmust have a 64-bit component - If there is a shader object bound
to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then allInputvariables at the correspondingLocationin theVertexExecutionModelOpEntryPointmust not use components that are not present in the format - If there is a shader object bound
to the
SHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with both aSHADER_STAGE_TESSELLATION_CONTROL_BITstage and theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled, and the current value ofprimitiveTopologyisPRIMITIVE_TOPOLOGY_PATCH_LIST, thencmdSetPatchControlPointsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If there is a shader object bound
to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
primitiveTopologyListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_POINT_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST,PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, orPRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to theSHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled, thencmdSetPrimitiveRestartEnablemust beFALSE - If the
primitiveTopologyPatchListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_PATCH_LIST, there is a shader object bound to theSHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust beFALSE - The bound graphics pipeline
must not have been created with the
PipelineShaderStageCreateInfo::stagemember of any element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no shader object
bound to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages - If a shader object is bound to
the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_TESSELLATION_EVALUATION_BITstage and theDYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled, thencmdSetTessellationDomainOriginEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader is bound
to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the type of subdivision, they must be the same - If a shader is bound
to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the orientation of triangles, they must be the same - If a shader is bound
to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the segment spacing, they must be the same - If a shader is bound
to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the output patch size, they must be the same - If the maintenance6 feature is not enabled, a valid index buffer must be bound
- If the bound graphics pipeline
state was created with
PipelineVertexInputDivisorStateCreateInfoin thepNextchain ofGraphicsPipelineCreateInfo::pVertexInputState, any member ofPipelineVertexInputDivisorStateCreateInfo::pVertexBindingDivisorshas a value other than1indivisor, andPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstanceisFALSE, thenfirstInstancemust be0 - If
shader objects
are used for drawing or the bound graphics pipeline state was
created with the
DYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, any member of thepVertexBindingDescriptionsparameter to thecmdSetVertexInputEXTcall that sets this dynamic state has a value other than1indivisor, andPhysicalDeviceVertexAttributeDivisorProperties::supportsNonZeroFirstInstanceisFALSE, thenfirstInstancemust be0 - If the
robustBufferAccess2
feature is not enabled, (
indexSize× (firstIndex+indexCount) +offset) must be less than or equal to the size of the bound index buffer, withindexSizebeing based on the type specified byindexType, where the index buffer,indexType, andoffsetare specified viacmdBindIndexBufferorcmdBindIndexBuffer2. IfcmdBindIndexBuffer2is used to bind the index buffer, the size of the bound index buffer iscmdBindIndexBuffer2::size
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
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 | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdDrawIndexed is affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> Buffer |
|
| -> ("offset" ::: DeviceSize) |
|
| -> ("drawCount" ::: Word32) |
|
| -> ("stride" ::: Word32) |
|
| -> io () |
vkCmdDrawIndirect - Draw primitives with indirect parameters
Description
cmdDrawIndirect behaves similarly to cmdDraw except that the
parameters are read by the device from a buffer during execution.
drawCount draws are executed by the command, with parameters taken
from buffer starting at offset and increasing by stride bytes for
each successive draw. The parameters of each draw are encoded in an
array of DrawIndirectCommand structures. If
drawCount is less than or equal to one, stride is ignored.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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 withmagFilterorminFilterequal toFILTER_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’slevelCountandlayerCountmust be 1 - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’sviewTypemust beIMAGE_VIEW_TYPE_1DorIMAGE_VIEW_TYPE_2D - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values - 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
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_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 - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - 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 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - 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 - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a set n, 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 currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT - For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command
- If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If an image descriptor is
accessed by a shader, the
ImageLayoutmust match the subresource accessible from theImageViewas defined by the image layout matching rules - 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 - Descriptors in bound descriptor
buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - 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 - If a descriptor is dynamically
used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If a pipeline is 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 specified
statically in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it 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 bound shaders must not be a protected resource - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageVieworBufferViewis accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORMis 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
ImageViewcreated with the formatFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - 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
OpImageSampleWeightedQCOMis 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
OpImageSampleWeightedQCOMuses 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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is 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 a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
- If a descriptor with type equal
to any of
DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,DESCRIPTOR_TYPE_SAMPLED_IMAGE,DESCRIPTOR_TYPE_STORAGE_IMAGE, orDESCRIPTOR_TYPE_INPUT_ATTACHMENTis accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written - The
DeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object incommandBuffer - If this command is recorded
inside a
tile shading render pass
instance, the stages corresponding to the pipeline bind point used
by this command must only include
SHADER_STAGE_VERTEX_BIT,SHADER_STAGE_FRAGMENT_BIT, and/orSHADER_STAGE_COMPUTE_BIT - If this command is recorded
where
per-tile execution model
is enabled, there must be no access to any image while the image
was be transitioned to the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTlayout - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the underlyingTensorARMobject must have been created with theTENSOR_USAGE_SHADER_BIT_ARMusage flag set - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided viaTensorCreateInfoARM::pDescriptionwhen creating the underlyingTensorARMobject - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with theFormatof theTensorViewARMused for the access - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddress - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validDeviceAddress - For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound
- If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified viaDeviceAddressRangeEXTwhen the descriptor was written - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified byDeviceAddressRangeEXTwhen the descriptor was written - If the
robustBufferAccess2
feature is not enabled, the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified byDeviceAddressRangeEXTwhen the descriptor was written - If any
bound shader
uses an embedded sampler via a
descriptor mapping,
the value of
pBindInfo->reservedRangeSizeset forcmdBindSamplerHeapEXTmust be greater than or equal to minSamplerHeapReservedRangeWithEmbedded - If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set bycmdPushDataEXT - If a
bound shader
was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned to minUniformBufferOffsetAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_STORAGE_BUFFER_BITusage flag set - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned to minStorageBufferOffsetAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from aAccelerationStructureKHRobject viagetAccelerationStructureDeviceAddressKHRor handle retrieved from aAccelerationStructureNVobject viagetAccelerationStructureHandleNV - If a shader uses a sampler
descriptor to sample an image as a result of this command, and that
sampler descriptor uses a custom border color with an index defined
by
SamplerCustomBorderColorIndexCreateInfoEXT, the value ofSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - 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 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 boundFramebufferas specified by Fragment Input Attachment Compatibility - Input
attachment views accessed in a dynamic render pass with a
InputAttachmentIndexreferenced byRenderingInputAttachmentIndexInfo, or noInputAttachmentIndexifRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexorRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexareNULL, must be created with aImageViewthat is compatible with the corresponding color, depth, or stencil attachment inRenderingInfo - Input
attachment views accessed in a dynamic render pass via a shader
object must have an
InputAttachmentIndexif bothRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexandRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexare non-NULL - If an input
attachment view accessed in a dynamic render pass via a shader
object has an
InputAttachmentIndex, theInputAttachmentIndexmust match an index inRenderingInputAttachmentIndexInfo - 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 a color attachment is written
by any prior command in this subpass or by the load, store, or
resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a depth attachment is written
by any prior command in this subpass or by the load, store, or
resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a stencil attachment is
written by any prior command in this subpass or by the load, store,
or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a color attachment is read in
this command in any way other than as an attachment, or has been
read by any prior command in this subpass as a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, the color attachment must not be written to by this command - If a depth attachment is read in
this command in any way other than as an attachment, or has been
read by any prior command in this subpass as a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, the depth attachment must not be written to by this command - If a stencil attachment is read
in this command in any way other than as an attachment, or has been
read by any prior command in this subpass as a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, the stencil attachment must not be written to by this command - If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command
- 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 and not subsequently invalidated 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 and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBiasEnableisTRUE, thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUEwith a blend equations where anyBlendFactormember isBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, thencmdSetBlendConstantsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBoundsTestEnableisTRUE, thencmdSetDepthBoundsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilCompareMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilWriteMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, the current value of andrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilReferencemust have been called and not subsequently invalidated 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 toTRUE, then the active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleLocationsEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofsampleLocationsEnableisTRUE, thencmdSetSampleLocationsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_CULL_MODEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCullModemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFrontFacemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE,cmdSetDepthTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthWriteEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthCompareOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthBounds
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBoundsTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetStencilTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetViewportWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetScissorWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled, and the state is not inherited, then 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
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, thencmdSetViewportWScalingNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, 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
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NVand the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoarseSampleOrderNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, 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
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled, thencmdSetExclusiveScissorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled, and the most recent call tocmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled, thencmdSetRasterizerDiscardEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBiasEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to the
SHADER_STAGE_FRAGMENT_BITor a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value oflogicOpEnableisTRUE, thencmdSetLogicOpEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
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 the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, then for each color attachment, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value ofblendEnablemust beFALSE If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of
rasterizerDiscardEnableisFALSE, and none of the following is enabled:- the
VK_AMD_mixed_attachment_samplesextension - the
VK_NV_framebuffer_mixed_samplesextension - the multisampledRenderToSingleSampled feature
then the current value of
rasterizationSamplesmust be the same as the current color and/or depth/stencil attachments- the
- If a shader object is bound to
any graphics stage, the current render pass instance must have
been begun with
cmdBeginRendering - 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 bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If
the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline - If
the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED - If
the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering, with aRenderingInfo::colorAttachmentCountequal to1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If there is no shader object
bound to any graphics stage, the current render pass instance was
begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, thencmdSetColorBlendEnableEXTmust have set the blend enable toFALSEprior to this drawing command - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If there is a shader object
bound to any graphics stage, and the current render pass includes a
color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetColorBlendEnableEXTmust have set blend enable toFALSEprior to this drawing command - If there is a
shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If there is a shader
object bound to any graphics stage, and the current render pass
includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If there is a shader
object bound to any graphics stage, and the current render pass
includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorWriteEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of active color attachments - If the
VK_EXT_discard_rectanglesextension is enabled, a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfoincluded aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created withDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfodid not include aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If
the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If
current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView - If
the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If
the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If
current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView - If
the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRenderingandRenderingFragmentShadingRateAttachmentInfoKHR::imageViewwas notNULL_HANDLE, the 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
cmdBeginRendering, the dynamicRenderingLocalRead feature is enabled, theRENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHRflag is specified, and an attachment is being used as a feedback loop as specified by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#rendering-attachment-input-attachment-feedback,RenderingAttachmentFlagsInfoKHR::flagsfor that attachment must includeRENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR - If the current render pass
instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the current render pass
instance was created with
RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVEorRENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created withPIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have alayersvalue less than or equal toPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers - If the 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 bound graphics pipeline - If the current
render pass instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the 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 bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If
the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, 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 ofrasterizationSamplesfor the bound graphics pipeline - If
the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If
the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command is called
inside a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current render pass
instance was begun with
cmdBeginRendering, the bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->imageViewwas notNULL_HANDLE, then the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->resolveImageViewwas notNULL_HANDLE, then the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current render pass
instance was begun with a
cmdBeginRenderingcall incommandBuffer, itsRenderingInfo::flagsparameter must not haveRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BITset unlessRENDERING_CONTENTS_INLINE_BIT_KHRis also set -
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
depthClamp
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthClampEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetPolygonModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRasterizationSamplesEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleMaskEXTmust have been called and not subsequently invalidated 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, andalphaToCoverageEnablewasTRUEin the last call tocmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader
object is bound to any graphics stage, and the most recent call to
cmdSetAlphaToCoverageEnableEXTin the current command buffer setalphaToCoverageEnabletoTRUE, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToOneEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetLogicOpEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorBlendEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorWriteMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_GEOMETRY_BITstage and theDYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled, thencmdSetRasterizationStreamEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofconservativeRasterizationModeisCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
VK_EXT_conservative_rasterizationextension is enabled, conservativePointAndLineRasterization is not supported, a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line or point topology class, then the current value ofconservativeRasterizationModemust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state, thencmdSetDepthClipEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, a shader object is bound to theSHADER_STAGE_VERTEX_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetProvokingVertexModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled and a shader object is bound to any graphics
stage, or a bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLEdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstippledLineEnableisTRUE, thencmdSetLineStipplemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage or a graphics pipeline is bound which was created
with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, the effective rasterization input topology is in line topology class, and the currentlineRasterizationModeisLINE_RASTERIZATION_MODE_BRESENHAMorLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the currentalphaToCoverageEnable,alphaToOneEnableandsampleShadingEnablestates must all beFALSE - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled, thencmdSetDepthClipNegativeOneToOneEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClampControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXTdynamic state enabled, and the current value ofdepthClampEnableisTRUE, thencmdSetDepthClampRangeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled, thencmdSetViewportWScalingEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, thencmdSetViewportSwizzleNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageToColorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageToColorEnableisTRUE, thencmdSetCoverageToColorLocationNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageModulationModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationModeis any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationTableEnableisTRUE, thencmdSetCoverageModulationTableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetShadingRateImageEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
pipelineFragmentShadingRate
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFragmentShadingRateKHRmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageReductionModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - 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 the multisampledRenderToSingleSampled feature is not enabled, and neither theVK_AMD_mixed_attachment_samplesnor theVK_NV_framebuffer_mixed_samplesextensions are 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_RASTERIZATION_SAMPLES_EXTstate enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as therasterizationSamplesmember of that structure - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorBlendEnableEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorWriteMaskEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUE, then the number of active color attachments must not exceed advancedBlendMaxColorAttachments - If a graphics pipeline is bound
was created with
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a graphics
pipeline is bound was created with
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendAdvancedEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created withDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then eithercmdSetColorBlendAdvancedEXTorcmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE -
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, and the current value ofsampleLocationsEnableisTRUE, 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, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, andsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXTthen the current active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_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_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationsPerPixelmust equalrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If a
shader object is bound to any graphics stage or 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 active color attachment - 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 bound pipeline, 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 there must be an active 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 the
VK_NV_fragment_coverage_to_colorextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then there must be an active 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 the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVorDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic states enabled, then the current values ofcoverageReductionMode,rasterizationSamples, 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_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, 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 the coverageReductionMode feature is not enabled, or the current value ofcoverageReductionModeis notCOVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value ofrasterizationSamplesis greater than sample count of the color attachment, then sample shading must be disabled - 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, 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, 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, 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, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE - If the 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 a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If dynamic state was inherited
from
CommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command - For each shader object
bound to a graphics stage, except for shader object bound to the
last graphics stage in the logical pipeline, it must have been
created with a
nextStageincluding the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline - If there is no bound graphics
pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_VERTEX_BIT - If there is no bound graphics
pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT - If there is no bound graphics
pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT - If there is no bound graphics
pipeline, and the
geometryShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_GEOMETRY_BIT - If there is no bound graphics
pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_FRAGMENT_BIT - If there is no bound graphics
pipeline, and the
taskShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TASK_BIT_EXT - If there is no bound graphics
pipeline, and the
meshShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_MESH_BIT_EXT - If there is no bound graphics
pipeline, and at least one of the
taskShader
and
meshShader
features is enabled, one of the
SHADER_STAGE_VERTEX_BITorSHADER_STAGE_MESH_BIT_EXTstages must have a validShaderEXTbound, and the other must have noShaderEXTbound - If there is no bound graphics
pipeline, and a valid
ShaderEXTis bound to theSHADER_STAGE_VERTEX_BITstage, there must be noShaderEXTbound to either theSHADER_STAGE_TASK_BIT_EXTstage or theSHADER_STAGE_MESH_BIT_EXTstage - If any graphics shader is bound
which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag in the samecreateShadersEXTcall must also be bound - If any graphics shader is bound
which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag as part of the samecreateShadersEXTcall must not have anyShaderEXTbound - All bound graphics shader objects must have been created with identical or identically defined push constant ranges
- All bound graphics shader
objects must have either been created with the
SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag set, or with identical or identically defined arrays of descriptor set layouts - If the current
render pass instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the bound graphics
pipeline state includes a fragment shader stage, was created with
DYNAMIC_STATE_DEPTH_WRITE_ENABLEset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpDepthAttachmentReadEXT, thedepthWriteEnableparameter in the last call tocmdSetDepthWriteEnablemust beFALSE - If the bound graphics
pipeline state includes a fragment shader stage, was created with
DYNAMIC_STATE_STENCIL_WRITE_MASKset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpStencilAttachmentReadEXT, thewriteMaskparameter in the last call tocmdSetStencilWriteMaskmust be0 - If a shader object is bound to
any graphics stage or the bound graphics pipeline was created with
DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment isFORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of thepColorWriteMasksparameter ofcmdSetColorWriteMaskEXTmust either include all ofCOLOR_COMPONENT_R_BIT,COLOR_COMPONENT_G_BIT, andCOLOR_COMPONENT_B_BIT, or none of them - If
blending
is enabled for any attachment where either the source or destination
blend factors for that attachment
use the secondary color input,
the maximum value of
Locationfor any output attachment statically used in theFragmentExecutionModelexecuted by this command must be less than maxFragmentDualSrcAttachments - If the current render pass was
begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, the value of each element ofRenderingAttachmentLocationInfo::pColorAttachmentLocationsin the bound pipeline must match the value for the corresponding locations set currently in the current render pass instance - If the current render pass was
begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element ofRenderingInputAttachmentIndexInfo::pColorAttachmentInputIndicesin the bound pipeline must match the value for the corresponding index set currently in the current render pass instance - If the current render pass was
begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render pass was
begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render pass was
begun with
cmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag, the bound graphics pipeline must have been created withPIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT - If the bound graphics pipeline
was created with
PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun withcmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag - If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled
- If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass
- If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofviewportCount - If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofscissorCount - If current render pass instance
was begun with
cmdBeginRenderingwithRenderingInfo::flagswhich includesRENDERING_FRAGMENT_REGION_BIT_EXT, and if sample shading is enabled (explicitly or implicitly), then the minimum fraction for sample shading must equal 0.0 - If the current render pass
instance was begun with
cmdBeginRenderingand contains a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must have been created with aCustomResolveCreateInfoEXT - If the current render pass
instance was begun with
cmdBeginRenderingand does not contain a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must not have been created with aCustomResolveCreateInfoEXT - If the current render
pass instance was begun with
cmdBeginRenderingandcmdBeginCustomResolveEXThas been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If the current render
pass instance was begun with
cmdBeginRenderingand contains a custom resolve, andcmdBeginCustomResolveEXThas not been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, the bound graphics pipeline must have been created with aCustomResolveCreateInfoEXT::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewequal toNULL_HANDLEmust have the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED - If
the
dynamicRenderingUnusedAttachments
feature is enabled, the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass instance
was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView - If
the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass instance
was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView - If
the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0andcmdBeginCustomResolveEXThas been recorded in the render pass instance, then for each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLE, theresolveImageViewmust have been created with a sample count equal to the value ofrasterizationSamplesfor the bound graphics pipeline - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->resolveImageView - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->resolveImageView - If a shader object is
bound to the fragment stage, the current render pass instance was
begun with
cmdBeginRendering, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If a shader object is
bound to the fragment stage, the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas not yet been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - 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 - If the
robustBufferAccess
feature is not enabled, and that pipeline was created without
enabling
PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSforvertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ??? - For each vertex attribute
accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis a packed format, and the legacyVertexAttributes feature is not enabled, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format - For each vertex attribute
accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis not a packed format, and either the legacyVertexAttributes feature is not enabled orformathas 64-bit components, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGYdynamic state enabled thencmdSetPrimitiveTopologymust have been called and not subsequently invalidated 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 and the dynamicPrimitiveTopologyUnrestricted isFALSE, then theprimitiveTopologyparameter ofcmdSetPrimitiveTopologymust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - If a
SHADER_STAGE_TESSELLATION_CONTROL_BITstage is bound, then the current value ofprimitiveTopologymust bePRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command, then aSHADER_STAGE_TESSELLATION_CONTROL_BITstage must be bound - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_POINT_LISTprior to this drawing command, the maintenance5 feature is not enabled, both aSHADER_STAGE_TESSELLATION_EVALUATION_BITandSHADER_STAGE_GEOMETRY_BITstage are not bound, then theVertexExecutionModelmust have aPointSizedecorated variable that is statically written to - If the bound graphics
pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDEdynamic state enabled, but without theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2must not beNULL - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled thencmdSetVertexInputEXTmust have been called and not subsequently invalidated in the current command buffer prior to this draw command - If the
vertexAttributeRobustness
feature is not enabled, and the
maintenance9
feature is not enabled, and there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled then all variables with theInputstorage class decorated withLocationin theVertexExecutionModelOpEntryPointmust contain a location inVertexInputAttributeDescription2EXT::location - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a givenInputvariable of the correspondingLocationin theVertexExecutionModelOpEntryPointis 64-bit, then the numeric type associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be the same asVertexInputAttributeDescription2EXT::format - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then the scalar width associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be 64-bit - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and the scalar width associated with aLocationdecoratedInputvariable in theVertexExecutionModelOpEntryPointis 64-bit, then the correspondingVertexInputAttributeDescription2EXT::formatmust have a 64-bit component - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then allInputvariables at the correspondingLocationin theVertexExecutionModelOpEntryPointmust not use components that are not present in the format - If there is a shader object
bound to the
SHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with both aSHADER_STAGE_TESSELLATION_CONTROL_BITstage and theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled, and the current value ofprimitiveTopologyisPRIMITIVE_TOPOLOGY_PATCH_LIST, thencmdSetPatchControlPointsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
primitiveTopologyListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_POINT_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST,PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, orPRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to theSHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled, thencmdSetPrimitiveRestartEnablemust beFALSE - If the
primitiveTopologyPatchListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_PATCH_LIST, there is a shader object bound to theSHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust beFALSE - The bound graphics pipeline
must not have been created with the
PipelineShaderStageCreateInfo::stagemember of any element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no shader object
bound to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages - If a shader object is bound to
the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_TESSELLATION_EVALUATION_BITstage and theDYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled, thencmdSetTessellationDomainOriginEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader is bound
to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the type of subdivision, they must be the same - If a shader is bound
to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the orientation of triangles, they must be the same - If a shader is bound
to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the segment spacing, they must be the same - If a shader is bound
to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the output patch size, they must be the same - If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITusage flag set -
offsetmust be a multiple of4 -
commandBuffermust not be a protected command buffer - If the
multiDrawIndirect
feature is not enabled,
drawCountmust be0or1 -
drawCountmust be less than or equal toPhysicalDeviceLimits::maxDrawIndirectCount - If
drawCountis greater than1,stridemust be a multiple of4and must be greater than or equal tosizeof(DrawIndirectCommand) - If
drawCountis equal to1, (offset+sizeof(DrawIndirectCommand)) must be less than or equal to the size ofbuffer - If
drawCountis greater than1, (stride× (drawCount- 1) +offset+sizeof(DrawIndirectCommand)) must be less than or equal to the size ofbuffer
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
buffermust be a validBufferhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
- Both of
buffer, andcommandBuffermust 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 | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdDrawIndirect is affected by conditional rendering
See Also
cmdDrawIndexedIndirect Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> Buffer |
|
| -> ("offset" ::: DeviceSize) |
|
| -> ("drawCount" ::: Word32) |
|
| -> ("stride" ::: Word32) |
|
| -> io () |
vkCmdDrawIndexedIndirect - Draw primitives with indirect parameters and indexed vertices
Description
cmdDrawIndexedIndirect behaves similarly to cmdDrawIndexed except
that the parameters are read by the device from a buffer during
execution. drawCount draws are executed by the command, with
parameters taken from buffer starting at offset and increasing by
stride bytes for each successive draw. The parameters of each draw are
encoded in an array of
DrawIndexedIndirectCommand structures. If
drawCount is less than or equal to one, stride is ignored.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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 withmagFilterorminFilterequal toFILTER_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’slevelCountandlayerCountmust be 1 - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’sviewTypemust beIMAGE_VIEW_TYPE_1DorIMAGE_VIEW_TYPE_2D - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values - 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
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_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 - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - 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 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - 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 - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a set n, 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 currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT - For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command
- If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If an image
descriptor is accessed by a shader, the
ImageLayoutmust match the subresource accessible from theImageViewas defined by the image layout matching rules - 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 - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - 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 - If a descriptor is
dynamically used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If a pipeline is 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
specified statically in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it 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 bound shaders must not be a protected resource - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageVieworBufferViewis accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORMis 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
ImageViewcreated with the formatFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - 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
OpImageSampleWeightedQCOMis 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
OpImageSampleWeightedQCOMuses 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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is 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 a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
- If a descriptor with type
equal to any of
DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,DESCRIPTOR_TYPE_SAMPLED_IMAGE,DESCRIPTOR_TYPE_STORAGE_IMAGE, orDESCRIPTOR_TYPE_INPUT_ATTACHMENTis accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written - The
DeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object incommandBuffer - If this command is
recorded inside a
tile shading render pass
instance, the stages corresponding to the pipeline bind point used
by this command must only include
SHADER_STAGE_VERTEX_BIT,SHADER_STAGE_FRAGMENT_BIT, and/orSHADER_STAGE_COMPUTE_BIT - If this command is
recorded where
per-tile execution model
is enabled, there must be no access to any image while the image
was be transitioned to the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTlayout - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the underlyingTensorARMobject must have been created with theTENSOR_USAGE_SHADER_BIT_ARMusage flag set - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided viaTensorCreateInfoARM::pDescriptionwhen creating the underlyingTensorARMobject - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with theFormatof theTensorViewARMused for the access - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddress - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validDeviceAddress - For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound
- If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified viaDeviceAddressRangeEXTwhen the descriptor was written - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified byDeviceAddressRangeEXTwhen the descriptor was written - If the
robustBufferAccess2
feature is not enabled, the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified byDeviceAddressRangeEXTwhen the descriptor was written - If any
bound shader
uses an embedded sampler via a
descriptor mapping,
the value of
pBindInfo->reservedRangeSizeset forcmdBindSamplerHeapEXTmust be greater than or equal to minSamplerHeapReservedRangeWithEmbedded - If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set bycmdPushDataEXT - If a
bound shader
was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned to minUniformBufferOffsetAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_STORAGE_BUFFER_BITusage flag set - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned to minStorageBufferOffsetAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from aAccelerationStructureKHRobject viagetAccelerationStructureDeviceAddressKHRor handle retrieved from aAccelerationStructureNVobject viagetAccelerationStructureHandleNV - If a shader uses a
sampler descriptor to sample an image as a result of this command,
and that sampler descriptor uses a custom border color with an index
defined by
SamplerCustomBorderColorIndexCreateInfoEXT, the value ofSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - 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
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 boundFramebufferas specified by Fragment Input Attachment Compatibility -
Input attachment views accessed in a dynamic render pass with a
InputAttachmentIndexreferenced byRenderingInputAttachmentIndexInfo, or noInputAttachmentIndexifRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexorRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexareNULL, must be created with aImageViewthat is compatible with the corresponding color, depth, or stencil attachment inRenderingInfo -
Input attachment views accessed in a dynamic render pass via a
shader object must have an
InputAttachmentIndexif bothRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexandRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexare non-NULL - If an
input attachment view accessed in a dynamic render pass via a shader
object has an
InputAttachmentIndex, theInputAttachmentIndexmust match an index inRenderingInputAttachmentIndexInfo - 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 a color attachment is
written by any prior command in this subpass or by the load, store,
or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a depth attachment is
written by any prior command in this subpass or by the load, store,
or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a stencil attachment
is written by any prior command in this subpass or by the load,
store, or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a color attachment is
read in this command in any way other than as an attachment, or has
been read by any prior command in this subpass as a non-attachment,
and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, the color attachment must not be written to by this command - If a depth attachment is
read in this command in any way other than as an attachment, or has
been read by any prior command in this subpass as a non-attachment,
and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, the depth attachment must not be written to by this command - If a stencil attachment
is read in this command in any way other than as an attachment, or
has been read by any prior command in this subpass as a
non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, the stencil attachment must not be written to by this command - If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command
- 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 and not subsequently invalidated 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 and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBiasEnableisTRUE, thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUEwith a blend equations where anyBlendFactormember isBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, thencmdSetBlendConstantsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBoundsTestEnableisTRUE, thencmdSetDepthBoundsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilCompareMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilWriteMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, the current value of andrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilReferencemust have been called and not subsequently invalidated 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 toTRUE, then the active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleLocationsEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofsampleLocationsEnableisTRUE, thencmdSetSampleLocationsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_CULL_MODEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCullModemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFrontFacemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE,cmdSetDepthTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthWriteEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthCompareOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthBounds
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBoundsTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetStencilTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetViewportWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetScissorWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled, and the state is not inherited, then 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
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, thencmdSetViewportWScalingNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, 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
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NVand the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoarseSampleOrderNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, 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
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled, thencmdSetExclusiveScissorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled, and the most recent call tocmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled, thencmdSetRasterizerDiscardEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBiasEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITor a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value oflogicOpEnableisTRUE, thencmdSetLogicOpEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
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 the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 - If a shader object
is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, then for each color attachment, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value ofblendEnablemust beFALSE If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of
rasterizerDiscardEnableisFALSE, and none of the following is enabled:- the
VK_AMD_mixed_attachment_samplesextension - the
VK_NV_framebuffer_mixed_samplesextension - the multisampledRenderToSingleSampled feature
then the current value of
rasterizationSamplesmust be the same as the current color and/or depth/stencil attachments- the
- If a shader object is
bound to any graphics stage, the current render pass instance must
have been begun with
cmdBeginRendering - 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 bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount -
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline -
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED -
If the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering, with aRenderingInfo::colorAttachmentCountequal to1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If there is no shader
object bound to any graphics stage, the current render pass instance
was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If the current render
pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, thencmdSetColorBlendEnableEXTmust have set the blend enable toFALSEprior to this drawing command - If the current render
pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If there is a shader
object bound to any graphics stage, and the current render pass
includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetColorBlendEnableEXTmust have set blend enable toFALSEprior to this drawing command - If there
is a shader object bound to any graphics stage, and the current
render pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If the current render
pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If the current render
pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If there is a
shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If there is a
shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorWriteEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of active color attachments - If the
VK_EXT_discard_rectanglesextension is enabled, a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfoincluded aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created withDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfodid not include aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED -
If current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView, the value of the format must beFORMAT_UNDEFINED -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED -
If current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRenderingandRenderingFragmentShadingRateAttachmentInfoKHR::imageViewwas notNULL_HANDLE, the 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
cmdBeginRendering, the dynamicRenderingLocalRead feature is enabled, theRENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHRflag is specified, and an attachment is being used as a feedback loop as specified by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#rendering-attachment-input-attachment-feedback,RenderingAttachmentFlagsInfoKHR::flagsfor that attachment must includeRENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR - If the current
render pass instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the current render
pass instance was created with
RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVEorRENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created withPIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have alayersvalue less than or equal toPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers - If the
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 bound graphics pipeline - If the
current render pass instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the 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 bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, 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 ofrasterizationSamplesfor the bound graphics pipeline -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command is
called inside a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current
render pass instance was begun with
cmdBeginRendering, the bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->imageViewwas notNULL_HANDLE, then the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->resolveImageViewwas notNULL_HANDLE, then the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current render
pass instance was begun with a
cmdBeginRenderingcall incommandBuffer, itsRenderingInfo::flagsparameter must not haveRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BITset unlessRENDERING_CONTENTS_INLINE_BIT_KHRis also set -
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
depthClamp
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthClampEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetPolygonModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRasterizationSamplesEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleMaskEXTmust have been called and not subsequently invalidated 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, andalphaToCoverageEnablewasTRUEin the last call tocmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a
shader object is bound to any graphics stage, and the most recent
call to
cmdSetAlphaToCoverageEnableEXTin the current command buffer setalphaToCoverageEnabletoTRUE, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToOneEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetLogicOpEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorBlendEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorWriteMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_GEOMETRY_BITstage and theDYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled, thencmdSetRasterizationStreamEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofconservativeRasterizationModeisCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
VK_EXT_conservative_rasterizationextension is enabled, conservativePointAndLineRasterization is not supported, a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line or point topology class, then the current value ofconservativeRasterizationModemust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state, thencmdSetDepthClipEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, a shader object is bound to theSHADER_STAGE_VERTEX_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetProvokingVertexModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled and a shader object is bound to any graphics
stage, or a bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLEdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstippledLineEnableisTRUE, thencmdSetLineStipplemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, the effective rasterization input topology is in line topology class, and the currentlineRasterizationModeisLINE_RASTERIZATION_MODE_BRESENHAMorLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the currentalphaToCoverageEnable,alphaToOneEnableandsampleShadingEnablestates must all beFALSE - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled, thencmdSetDepthClipNegativeOneToOneEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClampControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXTdynamic state enabled, and the current value ofdepthClampEnableisTRUE, thencmdSetDepthClampRangeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled, thencmdSetViewportWScalingEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, thencmdSetViewportSwizzleNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageToColorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageToColorEnableisTRUE, thencmdSetCoverageToColorLocationNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageModulationModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationModeis any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationTableEnableisTRUE, thencmdSetCoverageModulationTableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetShadingRateImageEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If
the
pipelineFragmentShadingRate
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFragmentShadingRateKHRmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageReductionModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - 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 the multisampledRenderToSingleSampled feature is not enabled, and neither theVK_AMD_mixed_attachment_samplesnor theVK_NV_framebuffer_mixed_samplesextensions are 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_RASTERIZATION_SAMPLES_EXTstate enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as therasterizationSamplesmember of that structure - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorBlendEnableEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorWriteMaskEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUE, then the number of active color attachments must not exceed advancedBlendMaxColorAttachments - If a graphics pipeline is
bound was created with
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a
graphics pipeline is bound was created with
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendAdvancedEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created withDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then eithercmdSetColorBlendAdvancedEXTorcmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE -
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, and the current value ofsampleLocationsEnableisTRUE, 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, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, andsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXTthen the current active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_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_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationsPerPixelmust equalrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT -
If a shader object is bound to any graphics stage or 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 active color attachment - 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 bound pipeline, 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 there must be an active 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 the
VK_NV_fragment_coverage_to_colorextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then there must be an active 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 the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVorDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic states enabled, then the current values ofcoverageReductionMode,rasterizationSamples, 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_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, 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 the coverageReductionMode feature is not enabled, or the current value ofcoverageReductionModeis notCOVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value ofrasterizationSamplesis greater than sample count of the color attachment, then sample shading must be disabled - 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, 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, 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, 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, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE - If the 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 a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If dynamic state was
inherited from
CommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command - For each shader
object bound to a graphics stage, except for shader object bound to
the last graphics stage in the logical pipeline, it must have been
created with a
nextStageincluding the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline - If there is no bound
graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_VERTEX_BIT - If there is no bound
graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT - If there is no bound
graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT - If there is no bound
graphics pipeline, and the
geometryShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_GEOMETRY_BIT - If there is no bound
graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_FRAGMENT_BIT - If there is no bound
graphics pipeline, and the
taskShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TASK_BIT_EXT - If there is no bound
graphics pipeline, and the
meshShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_MESH_BIT_EXT - If there is no bound
graphics pipeline, and at least one of the
taskShader
and
meshShader
features is enabled, one of the
SHADER_STAGE_VERTEX_BITorSHADER_STAGE_MESH_BIT_EXTstages must have a validShaderEXTbound, and the other must have noShaderEXTbound - If there is no bound
graphics pipeline, and a valid
ShaderEXTis bound to theSHADER_STAGE_VERTEX_BITstage, there must be noShaderEXTbound to either theSHADER_STAGE_TASK_BIT_EXTstage or theSHADER_STAGE_MESH_BIT_EXTstage - If any graphics shader is
bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag in the samecreateShadersEXTcall must also be bound - If any graphics shader is
bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag as part of the samecreateShadersEXTcall must not have anyShaderEXTbound - All bound graphics shader objects must have been created with identical or identically defined push constant ranges
- All bound graphics shader
objects must have either been created with the
SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag set, or with identical or identically defined arrays of descriptor set layouts - If the
current render pass instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the bound
graphics pipeline state includes a fragment shader stage, was
created with
DYNAMIC_STATE_DEPTH_WRITE_ENABLEset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpDepthAttachmentReadEXT, thedepthWriteEnableparameter in the last call tocmdSetDepthWriteEnablemust beFALSE - If the bound
graphics pipeline state includes a fragment shader stage, was
created with
DYNAMIC_STATE_STENCIL_WRITE_MASKset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpStencilAttachmentReadEXT, thewriteMaskparameter in the last call tocmdSetStencilWriteMaskmust be0 - If a shader object is
bound to any graphics stage or the bound graphics pipeline was
created with
DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment isFORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of thepColorWriteMasksparameter ofcmdSetColorWriteMaskEXTmust either include all ofCOLOR_COMPONENT_R_BIT,COLOR_COMPONENT_G_BIT, andCOLOR_COMPONENT_B_BIT, or none of them -
If
blending
is enabled for any attachment where either the source or destination
blend factors for that attachment
use the secondary color input,
the maximum value of
Locationfor any output attachment statically used in theFragmentExecutionModelexecuted by this command must be less than maxFragmentDualSrcAttachments - If the current render
pass was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, the value of each element ofRenderingAttachmentLocationInfo::pColorAttachmentLocationsin the bound pipeline must match the value for the corresponding locations set currently in the current render pass instance - If the current render
pass was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element ofRenderingInputAttachmentIndexInfo::pColorAttachmentInputIndicesin the bound pipeline must match the value for the corresponding index set currently in the current render pass instance - If the current render
pass was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render
pass was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render
pass was begun with
cmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag, the bound graphics pipeline must have been created withPIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT - If the bound graphics
pipeline was created with
PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun withcmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag - If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled
- If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass
- If
the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofviewportCount - If
the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofscissorCount - If current render pass
instance was begun with
cmdBeginRenderingwithRenderingInfo::flagswhich includesRENDERING_FRAGMENT_REGION_BIT_EXT, and if sample shading is enabled (explicitly or implicitly), then the minimum fraction for sample shading must equal 0.0 - If the current render
pass instance was begun with
cmdBeginRenderingand contains a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must have been created with aCustomResolveCreateInfoEXT - If the current render
pass instance was begun with
cmdBeginRenderingand does not contain a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must not have been created with aCustomResolveCreateInfoEXT - If the current
render pass instance was begun with
cmdBeginRenderingandcmdBeginCustomResolveEXThas been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If the current
render pass instance was begun with
cmdBeginRenderingand contains a custom resolve, andcmdBeginCustomResolveEXThas not been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, the bound graphics pipeline must have been created with aCustomResolveCreateInfoEXT::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewequal toNULL_HANDLEmust have the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED -
If the
dynamicRenderingUnusedAttachments
feature is enabled, the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the current render
pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView -
If the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the current render
pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView -
If the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0andcmdBeginCustomResolveEXThas been recorded in the render pass instance, then for each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLE, theresolveImageViewmust have been created with a sample count equal to the value ofrasterizationSamplesfor the bound graphics pipeline - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->resolveImageView - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->resolveImageView - If a shader
object is bound to the fragment stage, the current render pass
instance was begun with
cmdBeginRendering, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If a shader
object is bound to the fragment stage, the current render pass
instance was begun with
cmdBeginRenderingand contains a custom resolve, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas not yet been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - 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 - If the
robustBufferAccess
feature is not enabled, and that pipeline was created without
enabling
PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSforvertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ??? - For each vertex
attribute accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis a packed format, and the legacyVertexAttributes feature is not enabled, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format - For each vertex
attribute accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis not a packed format, and either the legacyVertexAttributes feature is not enabled orformathas 64-bit components, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGYdynamic state enabled thencmdSetPrimitiveTopologymust have been called and not subsequently invalidated 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 and the dynamicPrimitiveTopologyUnrestricted isFALSE, then theprimitiveTopologyparameter ofcmdSetPrimitiveTopologymust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - If a
SHADER_STAGE_TESSELLATION_CONTROL_BITstage is bound, then the current value ofprimitiveTopologymust bePRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command, then aSHADER_STAGE_TESSELLATION_CONTROL_BITstage must be bound - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_POINT_LISTprior to this drawing command, the maintenance5 feature is not enabled, both aSHADER_STAGE_TESSELLATION_EVALUATION_BITandSHADER_STAGE_GEOMETRY_BITstage are not bound, then theVertexExecutionModelmust have aPointSizedecorated variable that is statically written to - If the bound graphics
pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDEdynamic state enabled, but without theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2must not beNULL - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled thencmdSetVertexInputEXTmust have been called and not subsequently invalidated in the current command buffer prior to this draw command - If the
vertexAttributeRobustness
feature is not enabled, and the
maintenance9
feature is not enabled, and there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled then all variables with theInputstorage class decorated withLocationin theVertexExecutionModelOpEntryPointmust contain a location inVertexInputAttributeDescription2EXT::location - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a givenInputvariable of the correspondingLocationin theVertexExecutionModelOpEntryPointis 64-bit, then the numeric type associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be the same asVertexInputAttributeDescription2EXT::format - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then the scalar width associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be 64-bit - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and the scalar width associated with aLocationdecoratedInputvariable in theVertexExecutionModelOpEntryPointis 64-bit, then the correspondingVertexInputAttributeDescription2EXT::formatmust have a 64-bit component - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then allInputvariables at the correspondingLocationin theVertexExecutionModelOpEntryPointmust not use components that are not present in the format - If there is a shader
object bound to the
SHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with both aSHADER_STAGE_TESSELLATION_CONTROL_BITstage and theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled, and the current value ofprimitiveTopologyisPRIMITIVE_TOPOLOGY_PATCH_LIST, thencmdSetPatchControlPointsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
primitiveTopologyListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_POINT_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST,PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, orPRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to theSHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled, thencmdSetPrimitiveRestartEnablemust beFALSE - If the
primitiveTopologyPatchListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_PATCH_LIST, there is a shader object bound to theSHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust beFALSE - The bound graphics
pipeline must not have been created with the
PipelineShaderStageCreateInfo::stagemember of any element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no shader
object bound to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages - If a shader object is
bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_TESSELLATION_EVALUATION_BITstage and theDYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled, thencmdSetTessellationDomainOriginEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader is
bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the type of subdivision, they must be the same - If a shader is
bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the orientation of triangles, they must be the same - If a shader is
bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the segment spacing, they must be the same - If a shader is
bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the output patch size, they must be the same - If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITusage flag set -
offsetmust be a multiple of4 -
commandBuffermust not be a protected command buffer - If the
multiDrawIndirect
feature is not enabled,
drawCountmust be0or1 -
drawCountmust be less than or equal toPhysicalDeviceLimits::maxDrawIndirectCount - If the maintenance6 feature is not enabled, a valid index buffer must be bound
- If
drawCountis greater than1,stridemust be a multiple of4and must be greater than or equal tosizeof(DrawIndexedIndirectCommand) - If
drawCountis equal to1, (offset+sizeof(DrawIndexedIndirectCommand)) must be less than or equal to the size ofbuffer - If
drawCountis greater than1, (stride× (drawCount- 1) +offset+sizeof(DrawIndexedIndirectCommand)) must be less than or equal to the size ofbuffer
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
buffermust be a validBufferhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
- Both of
buffer, andcommandBuffermust 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 | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdDrawIndexedIndirect is affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("groupCountX" ::: Word32) |
|
| -> ("groupCountY" ::: Word32) |
|
| -> ("groupCountZ" ::: Word32) |
|
| -> io () |
vkCmdDispatch - Dispatch compute work items
Description
When the command is executed, a global workgroup consisting of
groupCountX × groupCountY × groupCountZ local workgroups is
assembled.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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 withmagFilterorminFilterequal toFILTER_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’slevelCountandlayerCountmust be 1 - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’sviewTypemust beIMAGE_VIEW_TYPE_1DorIMAGE_VIEW_TYPE_2D - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values - 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
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_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 - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - 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 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - 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 - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a set n, 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 currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT - For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command
- If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT - Descriptors in each bound descriptor
set, specified via
cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If an image descriptor is
accessed by a shader, the
ImageLayoutmust match the subresource accessible from theImageViewas defined by the image layout matching rules - 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 - Descriptors in bound descriptor
buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - 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 - If a descriptor is dynamically used
with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If a pipeline is 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 specified
statically in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it 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 bound shaders must not be a protected resource - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageVieworBufferViewis accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORMis 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
ImageViewcreated with the formatFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - 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
OpImageSampleWeightedQCOMis 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
OpImageSampleWeightedQCOMuses 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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is 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 a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
- If a descriptor with type equal to
any of
DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,DESCRIPTOR_TYPE_SAMPLED_IMAGE,DESCRIPTOR_TYPE_STORAGE_IMAGE, orDESCRIPTOR_TYPE_INPUT_ATTACHMENTis accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written - The
DeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object incommandBuffer - If this command is recorded inside a
tile shading render pass
instance, the stages corresponding to the pipeline bind point used
by this command must only include
SHADER_STAGE_VERTEX_BIT,SHADER_STAGE_FRAGMENT_BIT, and/orSHADER_STAGE_COMPUTE_BIT - If this command is recorded where
per-tile execution model
is enabled, there must be no access to any image while the image
was be transitioned to the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTlayout - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the underlyingTensorARMobject must have been created with theTENSOR_USAGE_SHADER_BIT_ARMusage flag set - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided viaTensorCreateInfoARM::pDescriptionwhen creating the underlyingTensorARMobject - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with theFormatof theTensorViewARMused for the access - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddress - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validDeviceAddress - For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound
- If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified viaDeviceAddressRangeEXTwhen the descriptor was written - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified byDeviceAddressRangeEXTwhen the descriptor was written - If the
robustBufferAccess2
feature is not enabled, the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified byDeviceAddressRangeEXTwhen the descriptor was written - If any
bound shader
uses an embedded sampler via a
descriptor mapping,
the value of
pBindInfo->reservedRangeSizeset forcmdBindSamplerHeapEXTmust be greater than or equal to minSamplerHeapReservedRangeWithEmbedded - If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set bycmdPushDataEXT - If a
bound shader
was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned to minUniformBufferOffsetAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_STORAGE_BUFFER_BITusage flag set - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned to minStorageBufferOffsetAlignment - If a pipeline is bound to the
pipeline bind point used by this command, or shader is bound to a
shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from aAccelerationStructureKHRobject viagetAccelerationStructureDeviceAddressKHRor handle retrieved from aAccelerationStructureNVobject viagetAccelerationStructureHandleNV - If a shader uses a sampler
descriptor to sample an image as a result of this command, and that
sampler descriptor uses a custom border color with an index defined
by
SamplerCustomBorderColorIndexCreateInfoEXT, the value ofSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If the per-tile execution model is not enabled, this command must be called outside of a render pass instance
- If this command is recorded
where
per-tile execution model
is enabled, and if the
Pipelineobject bound to the pipeline bind point used by this command writes to a variable of storage classStorageClassTileAttachmentQCOM, the correspondingImageViewusing must not have been created with anaspectMaskthat containsIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT - If the per-tile execution model is enabled, the tileShadingPerTileDispatch feature must be enabled
- Memory backing image subresources used as tile attachments in the current render pass must not be written in any way other than as a tile attachment by this command
- If any recorded command in the current subpass will write to an image subresource as a tile attachment, this command must not read from the memory backing that image subresource in any other way than as a tile attachment
- If there is no bound compute
pipeline, a valid
ShaderEXTmust be bound to theSHADER_STAGE_COMPUTE_BITstage - If
commandBufferis a protected command buffer and protectedNoFault is not supported, any resource written to by thePipelineobject bound to the pipeline bind point used by this command must not be an unprotected resource - If
commandBufferis a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in thePipelineobject bound to the pipeline bind point used by this command must not write to any resource - If any of the shader stages
of the
Pipelinebound to the pipeline bind point used by this command uses the RayQueryKHR capability, thencommandBuffermust not be a protected command buffer -
groupCountXmust be less than or equal toPhysicalDeviceLimits::maxComputeWorkGroupCount[0] -
groupCountYmust be less than or equal toPhysicalDeviceLimits::maxComputeWorkGroupCount[1] -
groupCountZmust be less than or equal toPhysicalDeviceLimits::maxComputeWorkGroupCount[2]
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIToperations - This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
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 | VK_QUEUE_COMPUTE_BIT | Action |
Conditional Rendering
vkCmdDispatch is affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> Buffer |
|
| -> ("offset" ::: DeviceSize) |
|
| -> io () |
vkCmdDispatchIndirect - Dispatch compute work items with indirect parameters
Description
cmdDispatchIndirect behaves similarly to cmdDispatch except that the
parameters are read by the device from a buffer during execution. The
parameters of the dispatch are encoded in a
DispatchIndirectCommand structure taken from
buffer starting at offset.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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 withmagFilterorminFilterequal toFILTER_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal 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_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’slevelCountandlayerCountmust be 1 - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’sviewTypemust beIMAGE_VIEW_TYPE_1DorIMAGE_VIEW_TYPE_2D - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values - 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
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_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 - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - 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 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - 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 - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a set n, 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 currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT - For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command
- If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If an image
descriptor is accessed by a shader, the
ImageLayoutmust match the subresource accessible from theImageViewas defined by the image layout matching rules - 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 - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - 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 - If a descriptor is
dynamically used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If a pipeline is 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
specified statically in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it 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_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, 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 the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it 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 bound shaders must not be a protected resource - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageVieworBufferViewis accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORMis 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
ImageViewcreated with the formatFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - 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
OpImageSampleWeightedQCOMis 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
OpImageSampleWeightedQCOMuses 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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,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
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is 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 a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
- If a descriptor with type
equal to any of
DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,DESCRIPTOR_TYPE_SAMPLED_IMAGE,DESCRIPTOR_TYPE_STORAGE_IMAGE, orDESCRIPTOR_TYPE_INPUT_ATTACHMENTis accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written - The
DeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object incommandBuffer - If this command is recorded
inside a
tile shading render pass
instance, the stages corresponding to the pipeline bind point used
by this command must only include
SHADER_STAGE_VERTEX_BIT,SHADER_STAGE_FRAGMENT_BIT, and/orSHADER_STAGE_COMPUTE_BIT - If this command is recorded
where
per-tile execution model
is enabled, there must be no access to any image while the image
was be transitioned to the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTlayout - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the underlyingTensorARMobject must have been created with theTENSOR_USAGE_SHADER_BIT_ARMusage flag set - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided viaTensorCreateInfoARM::pDescriptionwhen creating the underlyingTensorARMobject - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with theFormatof theTensorViewARMused for the access - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddress - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validDeviceAddress - For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound
- If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified viaDeviceAddressRangeEXTwhen the descriptor was written - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified byDeviceAddressRangeEXTwhen the descriptor was written - If the
robustBufferAccess2
feature is not enabled, the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified byDeviceAddressRangeEXTwhen the descriptor was written - If any
bound shader
uses an embedded sampler via a
descriptor mapping,
the value of
pBindInfo->reservedRangeSizeset forcmdBindSamplerHeapEXTmust be greater than or equal to minSamplerHeapReservedRangeWithEmbedded - If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set bycmdPushDataEXT - If a
bound shader
was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned to minUniformBufferOffsetAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_STORAGE_BUFFER_BITusage flag set - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned to minStorageBufferOffsetAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from aAccelerationStructureKHRobject viagetAccelerationStructureDeviceAddressKHRor handle retrieved from aAccelerationStructureNVobject viagetAccelerationStructureHandleNV - If a shader uses a sampler
descriptor to sample an image as a result of this command, and that
sampler descriptor uses a custom border color with an index defined
by
SamplerCustomBorderColorIndexCreateInfoEXT, the value ofSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If the per-tile execution model is not enabled, this command must be called outside of a render pass instance
- If this command is
recorded where
per-tile execution model
is enabled, and if the
Pipelineobject bound to the pipeline bind point used by this command writes to a variable of storage classStorageClassTileAttachmentQCOM, the correspondingImageViewusing must not have been created with anaspectMaskthat containsIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT - If the per-tile execution model is enabled, the tileShadingPerTileDispatch feature must be enabled
- Memory backing image subresources used as tile attachments in the current render pass must not be written in any way other than as a tile attachment by this command
- If any recorded command in the current subpass will write to an image subresource as a tile attachment, this command must not read from the memory backing that image subresource in any other way than as a tile attachment
- If there is no bound compute
pipeline, a valid
ShaderEXTmust be bound to theSHADER_STAGE_COMPUTE_BITstage - If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITusage flag set -
offsetmust be a multiple of4 -
commandBuffermust not be a protected command buffer - The sum of
offsetand the size ofDispatchIndirectCommandmust be less than or equal to the size ofbuffer
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
buffermust be a validBufferhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIToperations - This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
- Both of
buffer, andcommandBuffermust 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 | VK_QUEUE_COMPUTE_BIT | Action |
Conditional Rendering
vkCmdDispatchIndirect is affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("srcBuffer" ::: Buffer) |
|
| -> ("dstBuffer" ::: Buffer) |
|
| -> ("regions" ::: Vector BufferCopy) |
|
| -> io () |
vkCmdCopyBuffer - Copy data between buffer regions
Description
Each source region specified by pRegions is copied from the source
buffer to the destination region of the destination buffer. If any of
the specified regions in srcBuffer overlaps in memory with any of the
specified regions in dstBuffer, values read from those overlapping
regions are undefined.
Valid Usage
- If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,srcBuffermust not be a protected buffer
- If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,dstBuffermust not be a protected buffer - If
commandBufferis a protected command buffer and protectedNoFault is not supported,dstBuffermust not be an unprotected buffer - The
srcOffsetmember of each element ofpRegionsmust be less than the size ofsrcBuffer - The
dstOffsetmember of each element ofpRegionsmust be less than the size ofdstBuffer - The
sizemember of each element ofpRegionsmust be less than or equal to the size ofsrcBufferminussrcOffset - The
sizemember of each element ofpRegionsmust be less than or equal to the size ofdstBufferminusdstOffset - The union of the source
regions, and the union of the destination regions, specified by the
elements of
pRegions, must not overlap in memory -
srcBuffermust have been created with theBUFFER_USAGE_TRANSFER_SRC_BITusage flag set - If
srcBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
dstBuffermust have been created with theBUFFER_USAGE_TRANSFER_DST_BITusage flag set - If
dstBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
srcBuffermust be a validBufferhandle -
dstBuffermust be a validBufferhandle -
pRegionsmust be a valid pointer to an array ofregionCountvalidBufferCopystructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, orQUEUE_TRANSFER_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
regionCountmust be greater than0 - Each of
commandBuffer,dstBuffer, andsrcBuffermust 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 | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_TRANSFER_BIT | Action |
Conditional Rendering
vkCmdCopyBuffer is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("srcImage" ::: Image) |
|
| -> ("srcImageLayout" ::: ImageLayout) |
|
| -> ("dstImage" ::: Image) |
|
| -> ("dstImageLayout" ::: ImageLayout) |
|
| -> ("regions" ::: Vector ImageCopy) |
|
| -> io () |
vkCmdCopyImage - Copy data between images
Description
Each source region specified by pRegions is copied from the source
image to the destination region of the destination image. If any of the
specified regions in srcImage overlaps in memory with any of the
specified regions in dstImage, values read from those overlapping
regions are undefined. If any region accesses a depth aspect in
dstImage and the VK_EXT_depth_range_unrestricted extension is not
enabled, values copied from srcImage outside of the range [0,1] will
be written as undefined values to the destination image.
Multi-planar images can only be copied on a per-plane basis, and the subresources used in each region when copying to or from such images must specify only one plane, though different regions can specify different planes. When copying planes of multi-planar images, the format considered is the compatible format for that plane, rather than the format of the multi-planar image.
If the format of the destination image has a different block extent than the source image (e.g. one is a compressed format), the offset and extent for each of the regions specified is scaled according to the block extents of each format to match in size. Copy regions for each image must be aligned to a multiple of the texel block extent in each dimension, except at the edges of the image, where region extents must match the edge of the image.
Image data can be copied between images with different image types. If
one image is IMAGE_TYPE_3D and the other
image is IMAGE_TYPE_2D with multiple
layers, then each slice is copied to or from a different layer; depth
slices in the 3D image correspond to layerCount layers in the 2D
image, with an effective depth of 1 used for the 2D image. If the
maintenance5
feature is enabled, all other combinations are allowed and function as
if 1D images are 2D images with a height of 1. Otherwise, other
combinations of image types are disallowed.
Valid Usage
- If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,srcImagemust not be a protected image
- If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,dstImagemust not be a protected image - If
commandBufferis a protected command buffer and protectedNoFault is not supported,dstImagemust not be an unprotected image - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BIT, and the maintenance10 feature is not enabled, for each element ofpRegions, where theaspectMaskmember ofsrcSubresourceisIMAGE_ASPECT_COLOR_BIT, theaspectMaskofdstSubresourcemust not beIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITbut does supportQUEUE_COMPUTE_BIT, and in any element ofpRegionstheaspectMaskmember ofsrcSubresourceisIMAGE_ASPECT_COLOR_BITand theaspectMaskofdstSubresourceisIMAGE_ASPECT_DEPTH_BIT, then the format features ofdstImagemust containFORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITandQUEUE_COMPUTE_BIT, but does supportQUEUE_TRANSFER_BIT, and in any element ofpRegionstheaspectMaskmember ofsrcSubresourceisIMAGE_ASPECT_COLOR_BITand theaspectMaskofdstSubresourceisIMAGE_ASPECT_DEPTH_BIT, then the format features ofdstImagemust containFORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITbut does supportQUEUE_COMPUTE_BIT, and in any element ofpRegionstheaspectMaskmember ofsrcSubresourceisIMAGE_ASPECT_COLOR_BITand theaspectMaskofdstSubresourceisIMAGE_ASPECT_STENCIL_BIT, then the format features ofdstImagemust containFORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITandQUEUE_COMPUTE_BIT, but does supportQUEUE_TRANSFER_BIT, and in any element ofpRegionstheaspectMaskmember ofsrcSubresourceisIMAGE_ASPECT_COLOR_BITand theaspectMaskofdstSubresourceisIMAGE_ASPECT_STENCIL_BIT, then the format features ofdstImagemust containFORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BIT, and the maintenance10 feature is not enabled, for each element ofpRegions, where theaspectMaskmember ofdstSubresourceisIMAGE_ASPECT_COLOR_BITthen theaspectMaskofsrcSubresourcemust not beIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITbut does supportQUEUE_COMPUTE_BIT, and in any element ofpRegionstheaspectMaskmember ofdstSubresourceisIMAGE_ASPECT_COLOR_BITand theaspectMaskofsrcSubresourceisIMAGE_ASPECT_DEPTH_BIT, then the format features ofsrcImagemust containFORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITandQUEUE_COMPUTE_BIT, but does supportQUEUE_TRANSFER_BIT, and in any element ofpRegionstheaspectMaskmember ofdstSubresourceisIMAGE_ASPECT_COLOR_BITand theaspectMaskofsrcSubresourceisIMAGE_ASPECT_DEPTH_BIT, then the format features ofsrcImagemust containFORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITbut does supportQUEUE_COMPUTE_BIT, and in any element ofpRegionstheaspectMaskmember ofdstSubresourceisIMAGE_ASPECT_COLOR_BITand theaspectMaskofsrcSubresourceisIMAGE_ASPECT_STENCIL_BIT, then the format features ofsrcImagemust containFORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR - If the queue family used
to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITandQUEUE_COMPUTE_BIT, but does supportQUEUE_TRANSFER_BIT, and in any element ofpRegionstheaspectMaskmember ofdstSubresourceisIMAGE_ASPECT_COLOR_BITand theaspectMaskofsrcSubresourceisIMAGE_ASPECT_STENCIL_BIT, then the format features ofsrcImagemust containFORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR - The union of all source
regions, and the union of all destination regions, specified by the
elements of
pRegions, must not overlap in memory - The
format features
of
srcImagemust containFORMAT_FEATURE_TRANSFER_SRC_BIT -
srcImageLayoutmust specify the layout of the image subresources ofsrcImagespecified inpRegionsat the time this command is executed on aDevice -
srcImageLayoutmust beIMAGE_LAYOUT_SHARED_PRESENT_KHR,IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, orIMAGE_LAYOUT_GENERAL - If
srcImageanddstImageare the same, and any elements ofpRegionscontains thesrcSubresourceanddstSubresourcewith matchingmipLeveland overlapping array layers, then thesrcImageLayoutanddstImageLayoutmust beIMAGE_LAYOUT_GENERALorIMAGE_LAYOUT_SHARED_PRESENT_KHR - The
format features
of
dstImagemust containFORMAT_FEATURE_TRANSFER_DST_BIT -
dstImageLayoutmust specify the layout of the image subresources ofdstImagespecified inpRegionsat the time this command is executed on aDevice -
dstImageLayoutmust beIMAGE_LAYOUT_SHARED_PRESENT_KHR,IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, orIMAGE_LAYOUT_GENERAL - If the
Formatof each ofsrcImageanddstImageis not a multi-planar format, theFormatof each ofsrcImageanddstImagemust be size-compatible - In a copy to or from a plane of a
multi-planar image,
the
Formatof the image and plane must be compatible according to the description of compatible planes for the plane being copied - If the
Formatof each ofsrcImageanddstImageis a compressed image format, the formats must have the same texel block extent - The sample count of
srcImageanddstImagemust match - The
srcOffsetandextentmembers of each element ofpRegionsmust respect the image transfer granularity requirements ofcommandBuffer’s command pool’s queue family, as described inQueueFamilyProperties - The
dstOffsetandextentmembers of each element ofpRegionsmust respect the image transfer granularity requirements ofcommandBuffer’s command pool’s queue family, as described inQueueFamilyProperties - If neither
srcImagenordstImagehas a multi-planar format and the maintenance8 feature is not enabled then for each element ofpRegions,srcSubresource.aspectMaskanddstSubresource.aspectMaskmust match - For each element of
pRegionswheresrcSubresource.aspectMaskanddstSubresource.aspectMaskeach contain at least one ofIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT,srcSubresource.aspectMaskanddstSubresource.aspectMaskmust match - If
srcSubresource.aspectMaskisIMAGE_ASPECT_COLOR_BIT, thendstSubresource.aspectMaskmust not contain bothIMAGE_ASPECT_DEPTH_BITandIMAGE_ASPECT_STENCIL_BIT - If
dstSubresource.aspectMaskisIMAGE_ASPECT_COLOR_BIT, thensrcSubresource.aspectMaskmust not contain bothIMAGE_ASPECT_DEPTH_BITandIMAGE_ASPECT_STENCIL_BIT - If
srcImagehas a multi-planar format, then for each element ofpRegions,srcSubresource.aspectMaskmust be a single valid multi-planar aspect mask bit - If
dstImagehas a multi-planar format, then for each element ofpRegions,dstSubresource.aspectMaskmust be a single valid multi-planar aspect mask bit - If
srcImagehas a multi-planar format and thedstImagedoes not have a multi-planar image format, then for each element ofpRegions,dstSubresource.aspectMaskmust beIMAGE_ASPECT_COLOR_BIT - If
dstImagehas a multi-planar format and thesrcImagedoes not have a multi-planar image format, then for each element ofpRegions,srcSubresource.aspectMaskmust beIMAGE_ASPECT_COLOR_BIT - If
srcSubresource.aspectMaskisIMAGE_ASPECT_COLOR_BITanddstSubresource.aspectMaskisIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT, then theFormatvalues ofsrcImageanddstImagemust be compatible according to the list of compatible depth-stencil and color formats - If
srcSubresource.aspectMaskisIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BITanddstSubresource.aspectMaskisIMAGE_ASPECT_COLOR_BIT, then theFormatvalues ofsrcImageanddstImagemust be compatible according to the list of compatible depth-stencil and color formats - If the
VK_KHR_maintenance1
extension is not enabled, or
PhysicalDeviceProperties::apiVersionis less than Vulkan 1.1, and eithersrcImageordstImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,srcSubresource.baseArrayLayeranddstSubresource.baseArrayLayermust both be0, andsrcSubresource.layerCountanddstSubresource.layerCountmust both be1 - If
srcImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,srcSubresource.baseArrayLayermust be0andsrcSubresource.layerCountmust be1 - If
dstImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,dstSubresource.baseArrayLayermust be0anddstSubresource.layerCountmust be1 - For each element of
pRegions,srcSubresource.aspectMaskmust specify aspects present insrcImage - For each element of
pRegions,dstSubresource.aspectMaskmust specify aspects present indstImage - For each element of
pRegions,srcOffset.xand (extent.width+srcOffset.x) must both be greater than or equal to0and less than or equal to the width of the specifiedsrcSubresourceofsrcImage - For each element of
pRegions,srcOffset.yand (extent.height+srcOffset.y) must both be greater than or equal to0and less than or equal to the height of the specifiedsrcSubresourceofsrcImage - If
srcImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,srcOffset.ymust be0andextent.heightmust be1 - If
srcImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,srcOffset.zand (extent.depth+srcOffset.z) must both be greater than or equal to0and less than or equal to the depth of the specifiedsrcSubresourceofsrcImage - If
srcImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,srcOffset.zmust be0andextent.depthmust be1 - If
dstImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,dstOffset.zmust be0 - If either the
Formatof each ofsrcImageanddstImageis not a compressed image format, anddstImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,extent.depthmust be1 - If
srcImageis of typeIMAGE_TYPE_2D, then for each element ofpRegions,srcOffset.zmust be0 - If
dstImageis of typeIMAGE_TYPE_2D, then for each element ofpRegions,dstOffset.zmust be0 - If the
VK_KHR_maintenance1
extension is not enabled, and
PhysicalDeviceProperties::apiVersionis less than Vulkan 1.1,srcImageanddstImagemust have the sameImageType - If the
VK_KHR_maintenance1
extension is not enabled, and
PhysicalDeviceProperties::apiVersionis less than Vulkan 1.1,srcImageordstImageis of typeIMAGE_TYPE_2D, then for each element ofpRegions,extent.depthmust be1 - If
srcImageanddstImagehave a differentImageType, and the maintenance5 feature is not enabled, one must beIMAGE_TYPE_3Dand the other must beIMAGE_TYPE_2D - If
srcImageanddstImagehave the sameImageType, for each element ofpRegions, if neither of thelayerCountmembers ofsrcSubresourceordstSubresourceareREMAINING_ARRAY_LAYERS, thelayerCountmembers ofsrcSubresourceordstSubresourcemust match - If
srcImageanddstImagehave the sameImageType, and one of thelayerCountmembers ofsrcSubresourceordstSubresourceisREMAINING_ARRAY_LAYERS, the other member must be eitherREMAINING_ARRAY_LAYERSor equal to thearrayLayersmember of theImageCreateInfoused to create the image minusbaseArrayLayer - If
srcImageanddstImageare both of typeIMAGE_TYPE_2D, then for each element ofpRegions,extent.depthmust be1 - If
srcImageis of typeIMAGE_TYPE_2D, anddstImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,extent.depthmust equalsrcSubresource.layerCount - If
dstImageis of typeIMAGE_TYPE_2D, andsrcImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,extent.depthmust equaldstSubresource.layerCount - For each element of
pRegions,dstOffset.xand (extent.width+dstOffset.x), whereextentis adjusted for size-compatibility, must both be greater than or equal to0and less than or equal to the width of the specifieddstSubresourceofdstImage - For each element of
pRegions,dstOffset.yand (extent.height+dstOffset.y), whereextentis adjusted for size-compatibility, must both be greater than or equal to0and less than or equal to the height of the specifieddstSubresourceofdstImage - If
dstImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,dstOffset.ymust be0 - If either the
Formatof each ofsrcImageanddstImageis not a compressed image format, anddstImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,extent.heightmust be1, whereextentis adjusted for size-compatibility - If
dstImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,dstOffset.zand (extent.depth+dstOffset.z), whereextentis adjusted for size-compatibility, must both be greater than or equal to0and less than or equal to the depth of the specifieddstSubresourceofdstImage - For each element of
pRegions,srcOffset.xmust be a multiple of the texel block extent width of theFormatofsrcImage - For each element of
pRegions,srcOffset.ymust be a multiple of the texel block extent height of theFormatofsrcImage - For each element of
pRegions,srcOffset.zmust be a multiple of the texel block extent depth of theFormatofsrcImage - For each element of
pRegions,dstOffset.xmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions,dstOffset.ymust be a multiple of the texel block extent height of theFormatofdstImage - For each element of
pRegions,dstOffset.zmust be a multiple of the texel block extent depth of theFormatofdstImage - For each element of
pRegions, if the sum ofsrcOffset.xandextent.widthdoes not equal the width of the subresource specified bysrcSubresource,extent.widthmust be a multiple of the texel block extent width of theFormatofsrcImage - For each element of
pRegions, if the sum ofsrcOffset.yandextent.heightdoes not equal the height of the subresource specified bysrcSubresource,extent.heightmust be a multiple of the texel block extent height of theFormatofsrcImage - For each element of
pRegions, if the sum ofsrcOffset.zandextent.depthdoes not equal the depth of the subresource specified bysrcSubresource,extent.depthmust be a multiple of the texel block extent depth of theFormatofsrcImage - If the
aspectmember of any element ofpRegionsincludes any flag other thanIMAGE_ASPECT_STENCIL_BITorsrcImagewas not created with separate stencil usage,srcImagemust have been created with theIMAGE_USAGE_TRANSFER_SRC_BITusage flag set - If the
aspectmember of any element ofpRegionsincludes any flag other thanIMAGE_ASPECT_STENCIL_BITordstImagewas not created with separate stencil usage,dstImagemust have been created with theIMAGE_USAGE_TRANSFER_DST_BITusage flag set - If the
aspectmember of any element ofpRegionsincludesIMAGE_ASPECT_STENCIL_BIT, andsrcImagewas created with separate stencil usage,srcImagemust have been created with theIMAGE_USAGE_TRANSFER_SRC_BITusage flag set - If the
aspectmember of any element ofpRegionsincludesIMAGE_ASPECT_STENCIL_BIT, anddstImagewas created with separate stencil usage,srcImagemust have been created with theIMAGE_USAGE_TRANSFER_DST_BITusage flag set - If
srcImageis non-sparse then the image or each specified disjoint plane must be bound completely and contiguously to a singleDeviceMemoryobject - The
srcSubresource.mipLevelmember of each element ofpRegionsmust be less than themipLevelsspecified inImageCreateInfowhensrcImagewas created - If
srcSubresource.layerCountis notREMAINING_ARRAY_LAYERS,srcSubresource.baseArrayLayer+srcSubresource.layerCountof each element ofpRegionsmust be less than or equal to thearrayLayersspecified inImageCreateInfowhensrcImagewas created -
srcImagemust not have been created withflagscontainingIMAGE_CREATE_SUBSAMPLED_BIT_EXT - If
dstImageis non-sparse then the image or each specified disjoint plane must be bound completely and contiguously to a singleDeviceMemoryobject - The
dstSubresource.mipLevelmember of each element ofpRegionsmust be less than themipLevelsspecified inImageCreateInfowhendstImagewas created - If
dstSubresource.layerCountis notREMAINING_ARRAY_LAYERS,dstSubresource.baseArrayLayer+dstSubresource.layerCountof each element ofpRegionsmust be less than or equal to thearrayLayersspecified inImageCreateInfowhendstImagewas created -
dstImagemust not have been created withflagscontainingIMAGE_CREATE_SUBSAMPLED_BIT_EXT
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
srcImagemust be a validImagehandle -
srcImageLayoutmust be a validImageLayoutvalue -
dstImagemust be a validImagehandle -
dstImageLayoutmust be a validImageLayoutvalue -
pRegionsmust be a valid pointer to an array ofregionCountvalidImageCopystructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, orQUEUE_TRANSFER_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
regionCountmust be greater than0 - Each of
commandBuffer,dstImage, andsrcImagemust 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 | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_TRANSFER_BIT | Action |
Conditional Rendering
vkCmdCopyImage is not affected by conditional rendering
See Also
VK_VERSION_1_0,
CommandBuffer, Image,
ImageCopy, ImageLayout
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("srcImage" ::: Image) |
|
| -> ("srcImageLayout" ::: ImageLayout) |
|
| -> ("dstImage" ::: Image) |
|
| -> ("dstImageLayout" ::: ImageLayout) |
|
| -> ("regions" ::: Vector ImageBlit) |
|
| -> Filter |
|
| -> io () |
vkCmdBlitImage - Copy regions of an image, potentially performing format conversion,
Description
cmdBlitImage must not be used for multisampled source or destination
images. Use cmdResolveImage for this purpose.
As the sizes of the source and destination extents can differ in any dimension, texels in the source extent are scaled and filtered to the destination extent. Scaling occurs via the following operations:
For each destination texel, the integer coordinate of that texel is converted to an unnormalized texture coordinate, using the effective inverse of the equations described in unnormalized to integer conversion:
- ubase = i + ½
- vbase = j + ½
- wbase = k + ½
These base coordinates are then offset by the first destination offset:
- uoffset = ubase - xdst0
- voffset = vbase - ydst0
- woffset = wbase - zdst0
- aoffset = a -
baseArrayCountdst
The scale is determined from the source and destination regions, and applied to the offset coordinates:
- scaleu = (xsrc1 - xsrc0) / (xdst1 - xdst0)
- scalev = (ysrc1 - ysrc0) / (ydst1 - ydst0)
- scalew = (zsrc1 - zsrc0) / (zdst1 - zdst0)
- uscaled = uoffset × scaleu
- vscaled = voffset × scalev
- wscaled = woffset × scalew
Finally the source offset is added to the scaled coordinates, to determine the final unnormalized coordinates used to sample from
srcImage:- u = uscaled + xsrc0
- v = vscaled + ysrc0
- w = wscaled + zsrc0
- q =
mipLevel - a = aoffset +
baseArrayCountsrc
These coordinates are used to sample from the source image, as described
in
Image Operations chapter,
with the filter mode equal to that of filter, a mipmap mode of
SAMPLER_MIPMAP_MODE_NEAREST and
an address mode of
SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE.
Implementations must clamp at the edge of the source image, and may
additionally clamp to the edge of the source region.
Due to allowable rounding errors in the generation of the source texture coordinates, it is not always possible to guarantee exactly which source texels will be sampled for a given blit. As rounding errors are implementation-dependent, the exact results of a blitting operation are also implementation-dependent.
Blits are done layer by layer starting with the baseArrayLayer member
of srcSubresource for the source and dstSubresource for the
destination. layerCount layers are blitted to the destination image.
When blitting 3D textures, slices in the destination region bounded by
dstOffsets[0].z and dstOffsets[1].z are sampled from slices in the
source region bounded by srcOffsets[0].z and srcOffsets[1].z. If the
filter parameter is FILTER_LINEAR then
the value sampled from the source image is taken by doing linear
filtering using the interpolated z coordinate represented by w
in the previous equations. If the filter parameter is
FILTER_NEAREST then the value sampled from
the source image is taken from the single nearest slice, with an
implementation-dependent arithmetic rounding mode.
The following filtering and conversion rules apply:
- Integer formats can only be converted to other integer formats with the same signedness.
- No format conversion is supported between depth/stencil images. The formats must match.
- Format conversions on unorm, snorm, scaled and packed float formats of the copied aspect of the image are performed by first converting the pixels to float values.
- For sRGB source formats, nonlinear RGB values are converted to linear representation prior to filtering.
- After filtering, the float values are first clamped and then cast to the destination image format. In case of sRGB destination format, linear RGB values are converted to nonlinear representation before writing the pixel to the image.
Signed and unsigned integers are converted by first clamping to the representable range of the destination format, then casting the value.
Valid Usage
- If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,srcImagemust not be a protected image
- If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,dstImagemust not be a protected image - If
commandBufferis a protected command buffer and protectedNoFault is not supported,dstImagemust not be an unprotected image - The union of all destination
regions, specified by the elements of
pRegions, must not overlap in memory with any texel that may be sampled during the blit operation - The
format features
of
srcImagemust containFORMAT_FEATURE_BLIT_SRC_BIT -
srcImagemust not use a format that requires a sampler Y′CBCR conversion -
srcImagemust have been created with theIMAGE_USAGE_TRANSFER_SRC_BITusage flag set - If
srcImageis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
srcImageLayoutmust specify the layout of the image subresources ofsrcImagespecified inpRegionsat the time this command is executed on aDevice -
srcImageLayoutmust beIMAGE_LAYOUT_SHARED_PRESENT_KHR,IMAGE_LAYOUT_TRANSFER_SRC_OPTIMALorIMAGE_LAYOUT_GENERAL - If
srcImageanddstImageare the same, and an elements ofpRegionscontains thesrcSubresourceanddstSubresourcewith matchingmipLeveland overlapping array layers, then thesrcImageLayoutanddstImageLayoutmust beIMAGE_LAYOUT_GENERALorIMAGE_LAYOUT_SHARED_PRESENT_KHR - The
format features
of
dstImagemust containFORMAT_FEATURE_BLIT_DST_BIT -
dstImagemust not use a format that requires a sampler Y′CBCR conversion -
dstImagemust have been created with theIMAGE_USAGE_TRANSFER_DST_BITusage flag set - If
dstImageis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
dstImageLayoutmust specify the layout of the image subresources ofdstImagespecified inpRegionsat the time this command is executed on aDevice -
dstImageLayoutmust beIMAGE_LAYOUT_SHARED_PRESENT_KHR,IMAGE_LAYOUT_TRANSFER_DST_OPTIMALorIMAGE_LAYOUT_GENERAL - If either of
srcImageordstImagewas created with a signed integerFormat, the other must also have been created with a signed integerFormat - If either of
srcImageordstImagewas created with an unsigned integerFormat, the other must also have been created with an unsigned integerFormat - If either of
srcImageordstImagewas created with a depth/stencil format, the other must have exactly the same format - If
srcImagewas created with a depth/stencil format,filtermust beFILTER_NEAREST -
srcImagemust have been created with asamplesvalue ofSAMPLE_COUNT_1_BIT -
dstImagemust have been created with asamplesvalue ofSAMPLE_COUNT_1_BIT - If
filterisFILTER_LINEAR, then the format features ofsrcImagemust containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If
filterisFILTER_CUBIC_EXT, then the format features ofsrcImagemust containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - If
filterisFILTER_CUBIC_EXT,srcImagemust be of typeIMAGE_TYPE_2D - The
srcSubresource.mipLevelmember of each element ofpRegionsmust be less than themipLevelsspecified inImageCreateInfowhensrcImagewas created - The
dstSubresource.mipLevelmember of each element ofpRegionsmust be less than themipLevelsspecified inImageCreateInfowhendstImagewas created - If
srcSubresource.layerCountis notREMAINING_ARRAY_LAYERS,srcSubresource.baseArrayLayer+srcSubresource.layerCountof each element ofpRegionsmust be less than or equal to thearrayLayersspecified inImageCreateInfowhensrcImagewas created - If
dstSubresource.layerCountis notREMAINING_ARRAY_LAYERS,dstSubresource.baseArrayLayer+dstSubresource.layerCountof each element ofpRegionsmust be less than or equal to thearrayLayersspecified inImageCreateInfowhendstImagewas created -
dstImageandsrcImagemust not have been created withflagscontainingIMAGE_CREATE_SUBSAMPLED_BIT_EXT - If the
maintenance8
feature is enabled and
srcImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,srcSubresource.baseArrayLayermust be0, andsrcSubresource.layerCountanddstSubresource.layerCountmust each be1 - If the
maintenance8
feature is enabled and
dstImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,dstSubresource.baseArrayLayermust be0, andsrcSubresource.layerCountanddstSubresource.layerCountmust each be1 - If the
maintenance8
feature is enabled,
dstImageisIMAGE_TYPE_3D, andsrcImageis not of typeIMAGE_TYPE_3D, then for each element ofpRegions, the absolute difference of thezmember of each member ofdstOffsetsmust equalsrcSubresource.layerCount - If the
maintenance8
feature is enabled,
srcImageisIMAGE_TYPE_3D, anddstImageis not of typeIMAGE_TYPE_3D, then for each element ofpRegions, the absolute difference of thezmember of each member ofsrcOffsetsmust equaldstSubresource.layerCount - If the
maintenance8
feature is not enabled and either
srcImageordstImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,srcSubresource.baseArrayLayeranddstSubresource.baseArrayLayermust each be0, andsrcSubresource.layerCountanddstSubresource.layerCountmust each be1 - For each element of
pRegions,srcSubresource.aspectMaskmust specify aspects present insrcImage - For each element of
pRegions,dstSubresource.aspectMaskmust specify aspects present indstImage - For each element of
pRegions,srcOffsets[0].x andsrcOffsets[1].x must both be greater than or equal to0and less than or equal to the width of the specifiedsrcSubresourceofsrcImage - For each element of
pRegions,srcOffsets[0].y andsrcOffsets[1].y must both be greater than or equal to0and less than or equal to the height of the specifiedsrcSubresourceofsrcImage - If
srcImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,srcOffsets[0].y must be0andsrcOffsets[1].y must be1 - For each element of
pRegions,srcOffsets[0].z andsrcOffsets[1].z must both be greater than or equal to0and less than or equal to the depth of the specifiedsrcSubresourceofsrcImage - If
srcImageis of typeIMAGE_TYPE_1DorIMAGE_TYPE_2D, then for each element ofpRegions,srcOffsets[0].z must be0andsrcOffsets[1].z must be1 - For each element of
pRegions,dstOffsets[0].x anddstOffsets[1].x must both be greater than or equal to0and less than or equal to the width of the specifieddstSubresourceofdstImage - For each element of
pRegions,dstOffsets[0].y anddstOffsets[1].y must both be greater than or equal to0and less than or equal to the height of the specifieddstSubresourceofdstImage - If
dstImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,dstOffsets[0].y must be0anddstOffsets[1].y must be1 - For each element of
pRegions,dstOffsets[0].z anddstOffsets[1].z must both be greater than or equal to0and less than or equal to the depth of the specifieddstSubresourceofdstImage - If
dstImageis of typeIMAGE_TYPE_1DorIMAGE_TYPE_2D, then for each element ofpRegions,dstOffsets[0].z must be0anddstOffsets[1].z must be1
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
srcImagemust be a validImagehandle -
srcImageLayoutmust be a validImageLayoutvalue -
dstImagemust be a validImagehandle -
dstImageLayoutmust be a validImageLayoutvalue -
pRegionsmust be a valid pointer to an array ofregionCountvalidImageBlitstructures -
filtermust be a validFiltervalue -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
regionCountmust be greater than0 - Each of
commandBuffer,dstImage, andsrcImagemust 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 | Outside | Outside | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdBlitImage is not affected by conditional rendering
See Also
VK_VERSION_1_0,
CommandBuffer,
Filter, Image,
ImageBlit, ImageLayout
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("srcBuffer" ::: Buffer) |
|
| -> ("dstImage" ::: Image) |
|
| -> ("dstImageLayout" ::: ImageLayout) |
|
| -> ("regions" ::: Vector BufferImageCopy) |
|
| -> io () |
vkCmdCopyBufferToImage - Copy data from a buffer into an image
Description
Each source region specified by pRegions is copied from the source
buffer to the destination region of the destination image according to
the
addressing calculations
for each resource. If any of the specified regions in srcBuffer
overlaps in memory with any of the specified regions in dstImage,
values read from those overlapping regions are undefined. If any region
accesses a depth aspect in dstImage and the
VK_EXT_depth_range_unrestricted extension is not enabled, values
copied from srcBuffer outside of the range [0,1] will be written as
undefined values to the destination image.
Copy regions for the image must be aligned to a multiple of the texel block extent in each dimension, except at the edges of the image, where region extents must match the edge of the image.
Valid Usage
- If
dstImageis non-sparse then the image or each specified disjoint plane must be bound completely and contiguously to a singleDeviceMemoryobject
- The
imageSubresource.mipLevelmember of each element ofpRegionsmust be less than themipLevelsspecified inImageCreateInfowhendstImagewas created - If
imageSubresource.layerCountis notREMAINING_ARRAY_LAYERS,imageSubresource.baseArrayLayer+imageSubresource.layerCountof each element ofpRegionsmust be less than or equal to thearrayLayersspecified inImageCreateInfowhendstImagewas created -
dstImagemust not have been created withflagscontainingIMAGE_CREATE_SUBSAMPLED_BIT_EXT - For each
element of
pRegions,imageOffset.xand (imageExtent.width+imageOffset.x) must both be greater than or equal to0and less than or equal to the width of the specifiedimageSubresourceofdstImage - For each
element of
pRegions,imageOffset.yand (imageExtent.height+imageOffset.y) must both be greater than or equal to0and less than or equal to the height of the specifiedimageSubresourceofdstImage -
dstImagemust have a sample count equal toSAMPLE_COUNT_1_BIT - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,srcBuffermust not be a protected buffer - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,dstImagemust not be a protected image - If
commandBufferis a protected command buffer and protectedNoFault is not supported,dstImagemust not be an unprotected image - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITorQUEUE_COMPUTE_BIT, thebufferOffsetmember of any element ofpRegionsmust be a multiple of4 - The
imageOffsetandimageExtentmembers of each element ofpRegionsmust respect the image transfer granularity requirements ofcommandBuffer’s command pool’s queue family, as described inQueueFamilyProperties - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BIT, and the maintenance10 feature is not enabled, for each element ofpRegions, theaspectMaskmember ofimageSubresourcemust not beIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITbut does supportQUEUE_COMPUTE_BIT, and in any element ofpRegionstheaspectMaskmember ofimageSubresourceisIMAGE_ASPECT_DEPTH_BIT, then the format features ofdstImagemust containFORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITandQUEUE_COMPUTE_BIT, but does supportQUEUE_TRANSFER_BIT, and in any element ofpRegionstheaspectMaskmember ofimageSubresourceisIMAGE_ASPECT_DEPTH_BIT, then the format features ofdstImagemust containFORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITbut does supportQUEUE_COMPUTE_BIT, and in any element ofpRegionstheaspectMaskmember ofimageSubresourceisIMAGE_ASPECT_STENCIL_BIT, then the format features ofdstImagemust containFORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITandQUEUE_COMPUTE_BIT, but does supportQUEUE_TRANSFER_BIT, and in any element ofpRegionstheaspectMaskmember ofimageSubresourceisIMAGE_ASPECT_STENCIL_BIT, then the format features ofdstImagemust containFORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR -
srcBuffermust be large enough to contain all buffer locations that are accessed according to Buffer and Image Addressing, for each element ofpRegions - The union of all source
regions, and the union of all destination regions, specified by the
elements of
pRegions, must not overlap in memory -
srcBuffermust have been created with theBUFFER_USAGE_TRANSFER_SRC_BITusage flag set - The
format features
of
dstImagemust containFORMAT_FEATURE_TRANSFER_DST_BIT - If
srcBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
dstImagemust have been created with theIMAGE_USAGE_TRANSFER_DST_BITusage flag set -
dstImageLayoutmust specify the layout of the image subresources ofdstImagespecified inpRegionsat the time this command is executed on aDevice -
dstImageLayoutmust beIMAGE_LAYOUT_SHARED_PRESENT_KHR,IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, orIMAGE_LAYOUT_GENERAL - If
VK_EXT_depth_range_unrestricted
is not enabled, for each element of
pRegionswhoseimageSubresourcecontains a depth aspect, the data insrcBuffermust be in the range [0,1] - If
dstImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,imageOffset.ymust be0andimageExtent.heightmust be1 - For each element of
pRegions,imageOffset.zand (imageExtent.depth+imageOffset.z) must both be greater than or equal to0and less than or equal to the depth of the specifiedimageSubresourceofdstImage - If
dstImageis of typeIMAGE_TYPE_1DorIMAGE_TYPE_2D, then for each element ofpRegions,imageOffset.zmust be0andimageExtent.depthmust be1 - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_IDENTITY_BIT_KHRorSURFACE_TRANSFORM_ROTATE_270_BIT_KHR,imageOffset.xmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_180_BIT_KHRorSURFACE_TRANSFORM_ROTATE_90_BIT_KHR, andimageOffset.xdoes not equal the width of the subresource specified byimageSubresource,imageOffset.xmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_IDENTITY_BIT_KHRorSURFACE_TRANSFORM_ROTATE_90_BIT_KHR,imageOffset.ymust be a multiple of the texel block extent height of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_270_BIT_KHRorSURFACE_TRANSFORM_ROTATE_180_BIT_KHR, andimageOffset.ydoes not equal the height of the subresource specified byimageSubresource,imageOffset.ymust be a multiple of the texel block extent height of theFormatofdstImage - For each element of
pRegions,imageOffset.zmust be a multiple of the texel block extent depth of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum ofimageOffset.xandextent.widthdoes not equal the width of the subresource specified byimageSubresource,extent.widthmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference ofimageOffset.xandextent.heightmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference ofimageOffset.xandextent.widthmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum ofimageOffset.xandextent.heightdoes not equal the width of the subresource specified byimageSubresource,extent.heightmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum ofimageOffset.yandextent.heightdoes not equal the height of the subresource specified byimageSubresource,extent.heightmust be a multiple of the texel block extent height of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum ofimageOffset.yandextent.widthdoes not equal the height of the subresource specified byimageSubresource,extent.widthmust be a multiple of the texel block extent height of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference ofimageOffset.yandextent.heightmust be a multiple of the texel block extent height of theFormatofdstImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference ofimageOffset.yandextent.widthmust be a multiple of the texel block extent height of theFormatofdstImage - For each element of
pRegions, if the sum ofimageOffset.zandextent.depthdoes not equal the depth of the subresource specified bysrcSubresource,extent.depthmust be a multiple of the texel block extent depth of theFormatofdstImage - For each
element of
pRegions,imageSubresource.aspectMaskmust specify aspects present indstImage - If
dstImagehas a multi-planar format, then for each element ofpRegions,imageSubresource.aspectMaskmust be a single valid multi-planar aspect mask bit - If
dstImageis of typeIMAGE_TYPE_3D, for each element ofpRegions,imageSubresource.baseArrayLayermust be0andimageSubresource.layerCountmust be1 - For each element
of
pRegions,bufferRowLengthmust be a multiple of the texel block extent width of theFormatofdstImage - For each
element of
pRegions,bufferImageHeightmust be a multiple of the texel block extent height of theFormatofdstImage - For each element
of
pRegions,bufferRowLengthdivided by the texel block extent width and then multiplied by the texel block size ofdstImagemust be less than or equal to 231-1 - If
dstImagedoes not have either a depth/stencil format or a multi-planar format, then for each element ofpRegions,bufferOffsetmust be a multiple of the texel block size - If
dstImagehas a multi-planar format, then for each element ofpRegions,bufferOffsetmust be a multiple of the element size of the compatible format for the format and theaspectMaskof theimageSubresourceas defined in ??? - If
dstImagehas a depth/stencil format, thebufferOffsetmember of any element ofpRegionsmust be a multiple of4
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
srcBuffermust be a validBufferhandle -
dstImagemust be a validImagehandle -
dstImageLayoutmust be a validImageLayoutvalue -
pRegionsmust be a valid pointer to an array ofregionCountvalidBufferImageCopystructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, orQUEUE_TRANSFER_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
regionCountmust be greater than0 - Each of
commandBuffer,dstImage, andsrcBuffermust 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 | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_TRANSFER_BIT | Action |
Conditional Rendering
vkCmdCopyBufferToImage is not affected by conditional rendering
See Also
VK_VERSION_1_0,
Buffer, BufferImageCopy,
CommandBuffer, Image,
ImageLayout
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("srcImage" ::: Image) |
|
| -> ("srcImageLayout" ::: ImageLayout) |
|
| -> ("dstBuffer" ::: Buffer) |
|
| -> ("regions" ::: Vector BufferImageCopy) |
|
| -> io () |
vkCmdCopyImageToBuffer - Copy image data into a buffer
Description
Each source region specified by pRegions is copied from the source
image to the destination region of the destination buffer according to
the
addressing calculations
for each resource. If any of the specified regions in srcImage
overlaps in memory with any of the specified regions in dstBuffer,
values read from those overlapping regions are undefined.
Copy regions for the image must be aligned to a multiple of the texel block extent in each dimension, except at the edges of the image, where region extents must match the edge of the image.
Valid Usage
- If
srcImageis non-sparse then the image or each specified disjoint plane must be bound completely and contiguously to a singleDeviceMemoryobject
- The
imageSubresource.mipLevelmember of each element ofpRegionsmust be less than themipLevelsspecified inImageCreateInfowhensrcImagewas created - If
imageSubresource.layerCountis notREMAINING_ARRAY_LAYERS,imageSubresource.baseArrayLayer+imageSubresource.layerCountof each element ofpRegionsmust be less than or equal to thearrayLayersspecified inImageCreateInfowhensrcImagewas created -
srcImagemust not have been created withflagscontainingIMAGE_CREATE_SUBSAMPLED_BIT_EXT - For each
element of
pRegions,imageOffset.xand (imageExtent.width+imageOffset.x) must both be greater than or equal to0and less than or equal to the width of the specifiedimageSubresourceofsrcImage - For each
element of
pRegions,imageOffset.yand (imageExtent.height+imageOffset.y) must both be greater than or equal to0and less than or equal to the height of the specifiedimageSubresourceofsrcImage -
srcImagemust have a sample count equal toSAMPLE_COUNT_1_BIT - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,srcImagemust not be a protected image - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,dstBuffermust not be a protected buffer - If
commandBufferis a protected command buffer and protectedNoFault is not supported,dstBuffermust not be an unprotected buffer - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITorQUEUE_COMPUTE_BIT, thebufferOffsetmember of any element ofpRegionsmust be a multiple of4 - The
imageOffsetandimageExtentmembers of each element ofpRegionsmust respect the image transfer granularity requirements ofcommandBuffer’s command pool’s queue family, as described inQueueFamilyProperties - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BIT, and the maintenance10 feature is not enabled, for each element ofpRegions, theaspectMaskmember ofimageSubresourcemust not beIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITbut does supportQUEUE_COMPUTE_BIT, and in any element ofpRegionstheaspectMaskmember ofimageSubresourceisIMAGE_ASPECT_DEPTH_BIT, then the format features ofsrcImagemust containFORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITandQUEUE_COMPUTE_BIT, but does supportQUEUE_TRANSFER_BIT, and in any element ofpRegionstheaspectMaskmember ofimageSubresourceisIMAGE_ASPECT_DEPTH_BIT, then the format features ofsrcImagemust containFORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITbut does supportQUEUE_COMPUTE_BIT, and in any element ofpRegionstheaspectMaskmember ofimageSubresourceisIMAGE_ASPECT_STENCIL_BIT, then the format features ofsrcImagemust containFORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR - If the queue
family used to create the
CommandPoolwhichcommandBufferwas allocated from does not supportQUEUE_GRAPHICS_BITandQUEUE_COMPUTE_BIT, but does supportQUEUE_TRANSFER_BIT, and in any element ofpRegionstheaspectMaskmember ofimageSubresourceisIMAGE_ASPECT_STENCIL_BIT, then the format features ofsrcImagemust containFORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR -
dstBuffermust be large enough to contain all buffer locations that are accessed according to Buffer and Image Addressing, for each element ofpRegions - The union of all source
regions, and the union of all destination regions, specified by the
elements of
pRegions, must not overlap in memory -
srcImagemust have been created with theIMAGE_USAGE_TRANSFER_SRC_BITusage flag set - The
format features
of
srcImagemust containFORMAT_FEATURE_TRANSFER_SRC_BIT -
dstBuffermust have been created with theBUFFER_USAGE_TRANSFER_DST_BITusage flag set - If
dstBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
srcImageLayoutmust specify the layout of the image subresources ofsrcImagespecified inpRegionsat the time this command is executed on aDevice -
srcImageLayoutmust beIMAGE_LAYOUT_SHARED_PRESENT_KHR,IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, orIMAGE_LAYOUT_GENERAL - If
srcImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,imageOffset.ymust be0andimageExtent.heightmust be1 - For each element of
pRegions,imageOffset.zand (imageExtent.depth+imageOffset.z) must both be greater than or equal to0and less than or equal to the depth of the specifiedimageSubresourceofsrcImage - If
srcImageis of typeIMAGE_TYPE_1DorIMAGE_TYPE_2D, then for each element ofpRegions,imageOffset.zmust be0andimageExtent.depthmust be1 - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_IDENTITY_BIT_KHRorSURFACE_TRANSFORM_ROTATE_270_BIT_KHR,imageOffset.xmust be a multiple of the texel block extent width of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_180_BIT_KHRorSURFACE_TRANSFORM_ROTATE_90_BIT_KHR, andimageOffset.xdoes not equal the width of the subresource specified byimageSubresource,imageOffset.xmust be a multiple of the texel block extent width of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_IDENTITY_BIT_KHRorSURFACE_TRANSFORM_ROTATE_90_BIT_KHR,imageOffset.ymust be a multiple of the texel block extent height of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_270_BIT_KHRorSURFACE_TRANSFORM_ROTATE_180_BIT_KHR, andimageOffset.ydoes not equal the height of the subresource specified byimageSubresource,imageOffset.ymust be a multiple of the texel block extent height of theFormatofsrcImage - For each element of
pRegions,imageOffset.zmust be a multiple of the texel block extent depth of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum ofimageOffset.xandextent.widthdoes not equal the width of the subresource specified byimageSubresource,extent.widthmust be a multiple of the texel block extent width of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference ofimageOffset.xandextent.heightmust be a multiple of the texel block extent width of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference ofimageOffset.xandextent.widthmust be a multiple of the texel block extent width of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum ofimageOffset.xandextent.heightdoes not equal the width of the subresource specified byimageSubresource,extent.heightmust be a multiple of the texel block extent width of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum ofimageOffset.yandextent.heightdoes not equal the height of the subresource specified byimageSubresource,extent.heightmust be a multiple of the texel block extent height of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum ofimageOffset.yandextent.widthdoes not equal the height of the subresource specified byimageSubresource,extent.widthmust be a multiple of the texel block extent height of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference ofimageOffset.yandextent.heightmust be a multiple of the texel block extent height of theFormatofsrcImage - For each element of
pRegions, ifCopyCommandTransformInfoQCOM::transformis equal toSURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference ofimageOffset.yandextent.widthmust be a multiple of the texel block extent height of theFormatofsrcImage - For each element of
pRegions, if the sum ofimageOffset.zandextent.depthdoes not equal the depth of the subresource specified bysrcSubresource,extent.depthmust be a multiple of the texel block extent depth of theFormatofsrcImage - For each
element of
pRegions,imageSubresource.aspectMaskmust specify aspects present insrcImage - If
srcImagehas a multi-planar format, then for each element ofpRegions,imageSubresource.aspectMaskmust be a single valid multi-planar aspect mask bit - If
srcImageis of typeIMAGE_TYPE_3D, for each element ofpRegions,imageSubresource.baseArrayLayermust be0andimageSubresource.layerCountmust be1 - For each element
of
pRegions,bufferRowLengthmust be a multiple of the texel block extent width of theFormatofsrcImage - For each
element of
pRegions,bufferImageHeightmust be a multiple of the texel block extent height of theFormatofsrcImage - For each element
of
pRegions,bufferRowLengthdivided by the texel block extent width and then multiplied by the texel block size ofsrcImagemust be less than or equal to 231-1 - If
srcImagedoes not have either a depth/stencil format or a multi-planar format, then for each element ofpRegions,bufferOffsetmust be a multiple of the texel block size - If
srcImagehas a multi-planar format, then for each element ofpRegions,bufferOffsetmust be a multiple of the element size of the compatible format for the format and theaspectMaskof theimageSubresourceas defined in ??? - If
srcImagehas a depth/stencil format, thebufferOffsetmember of any element ofpRegionsmust be a multiple of4
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
srcImagemust be a validImagehandle -
srcImageLayoutmust be a validImageLayoutvalue -
dstBuffermust be a validBufferhandle -
pRegionsmust be a valid pointer to an array ofregionCountvalidBufferImageCopystructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, orQUEUE_TRANSFER_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
regionCountmust be greater than0 - Each of
commandBuffer,dstBuffer, andsrcImagemust 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 | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_TRANSFER_BIT | Action |
Conditional Rendering
vkCmdCopyImageToBuffer is not affected by conditional rendering
See Also
VK_VERSION_1_0,
Buffer, BufferImageCopy,
CommandBuffer, Image,
ImageLayout
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("dstBuffer" ::: Buffer) |
|
| -> ("dstOffset" ::: DeviceSize) |
|
| -> ("dataSize" ::: DeviceSize) |
|
| -> ("data" ::: Ptr ()) |
|
| -> io () |
vkCmdUpdateBuffer - Update a buffer’s contents from host memory
Description
dataSize must be less than or equal to 65536 bytes. For larger
updates, applications can use buffer to buffer
copies.
Buffer updates performed with cmdUpdateBuffer first copy the data into
command buffer memory when the command is recorded (which requires
additional storage and may incur an additional allocation), and then
copy the data from the command buffer into dstBuffer when the command
is executed on a device.
The additional cost of this functionality compared to
buffer to buffer copies
means it should only be used for very small amounts of data, and is why
it is limited to at most 65536 bytes. Applications can work around
this restriction by issuing multiple cmdUpdateBuffer commands to
different ranges of the same buffer, but doing so is not recommended.
The source data is copied from pData to the command buffer when the
command is called.
cmdUpdateBuffer is only allowed outside of a render pass. This command
is treated as a “transfer” operation for the purposes of synchronization
barriers. The
BUFFER_USAGE_TRANSFER_DST_BIT
must be specified in usage of
BufferCreateInfo in order for the buffer to be
compatible with cmdUpdateBuffer.
Valid Usage
-
dataSizemust be less than or equal to the size ofdstBufferminusdstOffset -
dstBuffermust have been created with theBUFFER_USAGE_TRANSFER_DST_BITusage flag set - If
dstBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
dstOffsetmust be a multiple of4 -
dataSizemust be less than or equal to65536 -
dataSizemust be a multiple of4 - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,dstBuffermust not be a protected buffer - If
commandBufferis a protected command buffer and protectedNoFault is not supported,dstBuffermust not be an unprotected buffer
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
dstBuffermust be a validBufferhandle -
pDatamust be a valid pointer to an array ofdataSizebytes -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, orQUEUE_TRANSFER_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
dataSizemust be greater than0 - Both of
commandBuffer, anddstBuffermust 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 | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_TRANSFER_BIT | Action |
Conditional Rendering
vkCmdUpdateBuffer is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("dstBuffer" ::: Buffer) |
|
| -> ("dstOffset" ::: DeviceSize) |
|
| -> DeviceSize |
|
| -> ("data" ::: Word32) |
|
| -> io () |
vkCmdFillBuffer - Fill a region of a buffer with a fixed value
Description
cmdFillBuffer is treated as a “transfer” operation for the purposes of
synchronization barriers. It is only compatible with buffers created
with the
BUFFER_USAGE_TRANSFER_DST_BIT
usage flag set.
Valid Usage
-
dstOffsetmust be a multiple of4 - If
sizeis not equal toWHOLE_SIZE,sizemust be greater than0 - If
sizeis not equal toWHOLE_SIZE,sizemust be less than or equal to the size ofdstBufferminusdstOffset - If
sizeis not equal toWHOLE_SIZE,sizemust be a multiple of4 -
dstBuffermust have been created with theBUFFER_USAGE_TRANSFER_DST_BITusage flag set - If the
VK_KHR_maintenance1
extension is not enabled and
PhysicalDeviceProperties::apiVersionis less than Vulkan 1.1, theCommandPoolthatcommandBufferwas allocated from must support graphics or compute operations - If
dstBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,dstBuffermust not be a protected buffer - If
commandBufferis a protected command buffer and protectedNoFault is not supported,dstBuffermust not be an unprotected buffer
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
dstBuffermust be a validBufferhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, orQUEUE_TRANSFER_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
- Both of
commandBuffer, anddstBuffermust 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 | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_TRANSFER_BIT | Action |
Conditional Rendering
vkCmdFillBuffer is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> Image |
|
| -> ImageLayout |
|
| -> ClearColorValue |
|
| -> ("ranges" ::: Vector ImageSubresourceRange) |
|
| -> io () |
vkCmdClearColorImage - Clear regions of a color image
Description
Each specified range in pRanges is cleared to the value specified by
pColor.
Valid Usage
- The
format features
of
imagemust containFORMAT_FEATURE_TRANSFER_DST_BIT
-
imagemust have been created with theIMAGE_USAGE_TRANSFER_DST_BITusage flag set -
imagemust not use any of the formats that require a sampler Y′CBCR conversion - If
imageis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
imageLayoutmust specify the layout of the image subresource ranges ofimagespecified inpRangesat the time this command is executed on aDevice -
imageLayoutmust beIMAGE_LAYOUT_SHARED_PRESENT_KHR,IMAGE_LAYOUT_TRANSFER_DST_OPTIMALorIMAGE_LAYOUT_GENERAL - The
ImageSubresourceRange::aspectMaskmembers of the elements of thepRangesarray must each only includeIMAGE_ASPECT_COLOR_BIT - The
ImageSubresourceRange::baseMipLevelmembers of the elements of thepRangesarray must each be less than themipLevelsspecified inImageCreateInfowhenimagewas created - For each
ImageSubresourceRangeelement ofpRanges, if thelevelCountmember is notREMAINING_MIP_LEVELS, thenbaseMipLevel+levelCountmust be less than or equal to themipLevelsspecified inImageCreateInfowhenimagewas created - The
ImageSubresourceRange::baseArrayLayermembers of the elements of thepRangesarray must each be less than thearrayLayersspecified inImageCreateInfowhenimagewas created - For each
ImageSubresourceRangeelement ofpRanges, if thelayerCountmember is notREMAINING_ARRAY_LAYERS, thenbaseArrayLayer+layerCountmust be less than or equal to thearrayLayersspecified inImageCreateInfowhenimagewas created -
imagemust not have a compressed or depth/stencil format -
pColormust be a valid pointer to aClearColorValueunion - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,imagemust not be a protected image - If
commandBufferis a protected command buffer and protectedNoFault is not supported, must not be an unprotected image - If
image’s format has components other than R and G, it must not have a 64-bit component width
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
imagemust be a validImagehandle -
imageLayoutmust be a validImageLayoutvalue -
pRangesmust be a valid pointer to an array ofrangeCountvalidImageSubresourceRangestructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT, orQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
rangeCountmust be greater than0 - Both of
commandBuffer, andimagemust 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 | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdClearColorImage is not affected by conditional rendering
See Also
VK_VERSION_1_0,
ClearColorValue, CommandBuffer,
Image,
ImageLayout,
ImageSubresourceRange
cmdClearDepthStencilImage Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> Image |
|
| -> ImageLayout |
|
| -> ClearDepthStencilValue |
|
| -> ("ranges" ::: Vector ImageSubresourceRange) |
|
| -> io () |
vkCmdClearDepthStencilImage - Fill regions of a combined depth/stencil image
Valid Usage
- The
format features
of
imagemust containFORMAT_FEATURE_TRANSFER_DST_BIT
- If the
aspectmember of any element ofpRangesincludesIMAGE_ASPECT_STENCIL_BIT, andimagewas created with separate stencil usage, it must have been created with theIMAGE_USAGE_TRANSFER_DST_BITusage flag set - If the
aspectmember of any element ofpRangesincludesIMAGE_ASPECT_STENCIL_BIT, andimagewas not created with separate stencil usage, theIMAGE_USAGE_TRANSFER_DST_BITusage flag must have been set in theImageCreateInfo::usageused to createimage - If the
aspectmember of any element ofpRangesincludesIMAGE_ASPECT_DEPTH_BIT,imagemust have been created with theIMAGE_USAGE_TRANSFER_DST_BITusage flag set - If
imageis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
imageLayoutmust specify the layout of the image subresource ranges ofimagespecified inpRangesat the time this command is executed on aDevice -
imageLayoutmust be either ofIMAGE_LAYOUT_TRANSFER_DST_OPTIMALorIMAGE_LAYOUT_GENERAL - The
ImageSubresourceRange::aspectMaskmember of each element of thepRangesarray must not include bits other thanIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT - If the
image’s format does not have a stencil component, then theImageSubresourceRange::aspectMaskmember of each element of thepRangesarray must not include theIMAGE_ASPECT_STENCIL_BITbit - If the
image’s format does not have a depth component, then theImageSubresourceRange::aspectMaskmember of each element of thepRangesarray must not include theIMAGE_ASPECT_DEPTH_BITbit - The
ImageSubresourceRange::baseMipLevelmembers of the elements of thepRangesarray must each be less than themipLevelsspecified inImageCreateInfowhenimagewas created - For each
ImageSubresourceRangeelement ofpRanges, if thelevelCountmember is notREMAINING_MIP_LEVELS, thenbaseMipLevel+levelCountmust be less than or equal to themipLevelsspecified inImageCreateInfowhenimagewas created - The
ImageSubresourceRange::baseArrayLayermembers of the elements of thepRangesarray must each be less than thearrayLayersspecified inImageCreateInfowhenimagewas created - For each
ImageSubresourceRangeelement ofpRanges, if thelayerCountmember is notREMAINING_ARRAY_LAYERS, thenbaseArrayLayer+layerCountmust be less than or equal to thearrayLayersspecified inImageCreateInfowhenimagewas created -
imagemust have a depth/stencil format - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,imagemust not be a protected image - If
commandBufferis a protected command buffer and protectedNoFault is not supported,imagemust not be an unprotected image
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
imagemust be a validImagehandle -
imageLayoutmust be a validImageLayoutvalue -
pDepthStencilmust be a valid pointer to a validClearDepthStencilValuestructure -
pRangesmust be a valid pointer to an array ofrangeCountvalidImageSubresourceRangestructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
rangeCountmust be greater than0 - Both of
commandBuffer, andimagemust 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 | Outside | Outside | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdClearDepthStencilImage is not affected by conditional rendering
See Also
VK_VERSION_1_0,
ClearDepthStencilValue, CommandBuffer,
Image,
ImageLayout,
ImageSubresourceRange
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("attachments" ::: Vector ClearAttachment) |
|
| -> ("rects" ::: Vector ClearRect) |
|
| -> io () |
vkCmdClearAttachments - Clear regions within bound framebuffer attachments
Description
If the render pass has a fragment density map attachment, clears follow the operations of fragment density maps as if each clear region was a primitive which generates fragments. The clear color is applied to all pixels inside each fragment’s area regardless if the pixels lie outside of the clear region. Clears may have a different set of supported fragment areas than draws.
Unlike other
clear commands,
cmdClearAttachments is not a transfer command. It performs its
operations in
rasterization order.
For color attachments, the operations are executed as color attachment
writes, by the
PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
stage. For depth/stencil attachments, the operations are executed as
depth writes
and
stencil writes
by the
PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
and
PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
stages.
cmdClearAttachments is not affected by the bound pipeline state.
It is generally preferable to clear attachments by using the
ATTACHMENT_LOAD_OP_CLEAR load
operation at the start of rendering, as it is more efficient on some
implementations.
If any attachment’s aspectMask to be cleared is not backed by an image
view, the clear has no effect on that aspect.
If an attachment being cleared refers to an image view created with an
aspectMask equal to one of
IMAGE_ASPECT_PLANE_0_BIT,
IMAGE_ASPECT_PLANE_1_BIT or
IMAGE_ASPECT_PLANE_2_BIT, it
is considered to be
IMAGE_ASPECT_COLOR_BIT for
purposes of this command, and must be cleared with the
IMAGE_ASPECT_COLOR_BIT aspect
as specified by
image view creation.
Valid Usage
- If the current render
pass instance does not use dynamic rendering, and the
aspectMaskmember of any element ofpAttachmentscontainsIMAGE_ASPECT_DEPTH_BIT, the current subpass instance’s depth-stencil attachment must be eitherATTACHMENT_UNUSEDor the attachmentformatmust contain a depth component
- If the current render
pass instance does not use dynamic rendering, and the
aspectMaskmember of any element ofpAttachmentscontainsIMAGE_ASPECT_STENCIL_BIT, the current subpass instance’s depth-stencil attachment must be eitherATTACHMENT_UNUSEDor the attachmentformatmust contain a stencil component - If the
aspectMaskmember of any element ofpAttachmentscontainsIMAGE_ASPECT_COLOR_BIT, thecolorAttachmentmust be a valid color attachment index in the current render pass instance - The
rectmember of each element ofpRectsmust have anextent.widthgreater than0 - The
rectmember of each element ofpRectsmust have anextent.heightgreater than0 - The rectangular region
specified by each element of
pRectsmust be contained within the render area of the current render pass instance - The layers specified by
each element of
pRectsmust be contained within every attachment thatpAttachmentsrefers to, i.e. for each element ofpRects,ClearRect::baseArrayLayer+ClearRect::layerCountmust be less than or equal to the number of layers rendered to in the current render pass instance - The
layerCountmember of each element ofpRectsmust not be0 - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported, each attachment to be cleared must not be a protected image - If
commandBufferis a protected command buffer and protectedNoFault is not supported, each attachment to be cleared must not be an unprotected image - If the render pass
instance this is recorded in uses multiview, then
baseArrayLayermust be zero andlayerCountmust be one - The
colorAttachmentmember of each element ofpAttachmentsmust not identify a color attachment that is currently mapped toATTACHMENT_UNUSEDincommandBufferviaRenderingAttachmentLocationInfo - If the subpass this is
recorded in performs an external format resolve, the
aspectMaskmember of any element ofpAttachmentsmust not includeVK_IMAGE_ASPECT_PLANE_i_BITfor any index i - If the attachment format has components other than R and G, it must not have a 64-bit component width
- This command must not be recorded when per-tile execution model is enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pAttachmentsmust be a valid pointer to an array ofattachmentCountvalidClearAttachmentstructures -
pRectsmust be a valid pointer to an array ofrectCountClearRectstructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
attachmentCountmust be greater than0 -
rectCountmust be greater than0
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 | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdClearAttachments is affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("srcImage" ::: Image) |
|
| -> ("srcImageLayout" ::: ImageLayout) |
|
| -> ("dstImage" ::: Image) |
|
| -> ("dstImageLayout" ::: ImageLayout) |
|
| -> ("regions" ::: Vector ImageResolve) |
|
| -> io () |
vkCmdResolveImage - Resolve regions of an image
Description
During the resolve the samples corresponding to each pixel location in the source are converted to a single sample before being written to the destination.
If the source format is a floating-point or normalized type, the resolve mode is chosen as implementation-dependent behavior. If the resolve mode requires to calculate the result from multiple samples, such as by computing an average or weighted average of the samples, the values for each pixel are resolved with implementation-defined numerical precision.
If the
numeric format
of srcImage uses sRGB encoding and the resolve mode requires the
implementation to convert the samples to floating-point to perform the
calculations, the implementation should convert samples from nonlinear
to linear before resolving the samples as described in the “sRGB EOTF”
section of the
Khronos Data Format Specification.
In this case, the implementation must convert the linear averaged
value to nonlinear before writing the resolved result to dstImage. If
the
maintenance10
feature is enabled, whether a nonlinear to linear conversion happens for
sRGB encoded resolve is controlled by
resolveSrgbFormatAppliesTransferFunction.
If the source format is an integer type, a single sample’s value is selected for each pixel.
srcOffset and dstOffset select the initial x, y, and z offsets
in texels of the sub-regions of the source and destination image data.
extent is the size in texels of the source image to resolve in
width, height and depth. Each element of pRegions must be a
region that is contained within its corresponding image.
Resolves are done layer by layer starting with baseArrayLayer member
of srcSubresource for the source and dstSubresource for the
destination. layerCount layers are resolved to the destination image.
Valid Usage
- If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,srcImagemust not be a protected image
- If
commandBufferis an unprotected command buffer and protectedNoFault is not supported,dstImagemust not be a protected image - If
commandBufferis a protected command buffer and protectedNoFault is not supported,dstImagemust not be an unprotected image - The union of all source
regions, and the union of all destination regions, specified by the
elements of
pRegions, must not overlap in memory - If
srcImageis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
srcImagemust have a sample count equal to any valid sample count value other thanSAMPLE_COUNT_1_BIT - If
dstImageis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
dstImagemust have a sample count equal toSAMPLE_COUNT_1_BIT -
srcImageLayoutmust specify the layout of the image subresources ofsrcImagespecified inpRegionsat the time this command is executed on aDevice -
srcImageLayoutmust beIMAGE_LAYOUT_SHARED_PRESENT_KHR,IMAGE_LAYOUT_TRANSFER_SRC_OPTIMALorIMAGE_LAYOUT_GENERAL -
dstImageLayoutmust specify the layout of the image subresources ofdstImagespecified inpRegionsat the time this command is executed on aDevice -
dstImageLayoutmust beIMAGE_LAYOUT_SHARED_PRESENT_KHR,IMAGE_LAYOUT_TRANSFER_DST_OPTIMALorIMAGE_LAYOUT_GENERAL - If the
maintenance10
feature is enabled, the
format features
of
dstImagemust containFORMAT_FEATURE_COLOR_ATTACHMENT_BITorFORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT - The
format features
of
dstImagemust containFORMAT_FEATURE_COLOR_ATTACHMENT_BITif the maintenance10 feature is not enabled - If the
linearColorAttachment
feature is enabled and the image is created with
IMAGE_TILING_LINEAR, the format features ofdstImagemust containFORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV -
srcImageanddstImagemust have been created with the same image format - The
srcSubresource.mipLevelmember of each element ofpRegionsmust be less than themipLevelsspecified inImageCreateInfowhensrcImagewas created - The
dstSubresource.mipLevelmember of each element ofpRegionsmust be less than themipLevelsspecified inImageCreateInfowhendstImagewas created - If
srcSubresource.layerCountis notREMAINING_ARRAY_LAYERS,srcSubresource.baseArrayLayer+srcSubresource.layerCountof each element ofpRegionsmust be less than or equal to thearrayLayersspecified inImageCreateInfowhensrcImagewas created - If
dstSubresource.layerCountis notREMAINING_ARRAY_LAYERS,dstSubresource.baseArrayLayer+dstSubresource.layerCountof each element ofpRegionsmust be less than or equal to thearrayLayersspecified inImageCreateInfowhendstImagewas created -
dstImageandsrcImagemust not have been created withflagscontainingIMAGE_CREATE_SUBSAMPLED_BIT_EXT - If
dstImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,srcSubresource.layerCountmust be1 - If
dstImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,dstSubresource.baseArrayLayermust be0anddstSubresource.layerCountmust be1 - For each element of
pRegions,srcOffset.xand (extent.width+srcOffset.x) must both be greater than or equal to0and less than or equal to the width of the specifiedsrcSubresourceofsrcImage - For each element of
pRegions,srcOffset.yand (extent.height+srcOffset.y) must both be greater than or equal to0and less than or equal to the height of the specifiedsrcSubresourceofsrcImage - If
srcImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,srcOffset.ymust be0andextent.heightmust be1 - For each element of
pRegions,srcOffset.zand (extent.depth+srcOffset.z) must both be greater than or equal to0and less than or equal to the depth of the specifiedsrcSubresourceofsrcImage - If
srcImageis of typeIMAGE_TYPE_1DorIMAGE_TYPE_2D, then for each element ofpRegions,srcOffset.zmust be0andextent.depthmust be1 - For each element of
pRegions,dstOffset.xand (extent.width+dstOffset.x) must both be greater than or equal to0and less than or equal to the width of the specifieddstSubresourceofdstImage - For each element of
pRegions,dstOffset.yand (extent.height+dstOffset.y) must both be greater than or equal to0and less than or equal to the height of the specifieddstSubresourceofdstImage - If
dstImageis of typeIMAGE_TYPE_1D, then for each element ofpRegions,dstOffset.ymust be0andextent.heightmust be1 - For each element of
pRegions,dstOffset.zand (extent.depth+dstOffset.z) must both be greater than or equal to0and less than or equal to the depth of the specifieddstSubresourceofdstImage - If
dstImageis of typeIMAGE_TYPE_1DorIMAGE_TYPE_2D, then for each element ofpRegions,dstOffset.zmust be0andextent.depthmust be1 -
srcImagemust have been created with theIMAGE_USAGE_TRANSFER_SRC_BITusage flag set - The
format features
of
srcImagemust containFORMAT_FEATURE_TRANSFER_SRC_BIT -
dstImagemust have been created with theIMAGE_USAGE_TRANSFER_DST_BITusage flag set - The
format features
of
dstImagemust containFORMAT_FEATURE_TRANSFER_DST_BIT -
srcSubresource.aspectMaskfor each element inpRegionsmust not specify an aspect which is not part of the image format ofsrcImage -
dstSubresource.aspectMaskfor each element inpRegionsmust not specify an aspect which is not part of the image format ofdstImage -
srcSubresource.aspectMaskmust equaldstSubresource.aspectMaskfor each element inpRegions
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
srcImagemust be a validImagehandle -
srcImageLayoutmust be a validImageLayoutvalue -
dstImagemust be a validImagehandle -
dstImageLayoutmust be a validImageLayoutvalue -
pRegionsmust be a valid pointer to an array ofregionCountvalidImageResolvestructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
regionCountmust be greater than0 - Each of
commandBuffer,dstImage, andsrcImagemust 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 | Outside | Outside | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdResolveImage is not affected by conditional rendering
See Also
VK_VERSION_1_0,
CommandBuffer, Image,
ImageLayout, ImageResolve
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> Event |
|
| -> ("stageMask" ::: PipelineStageFlags) |
|
| -> io () |
vkCmdSetEvent - Set an event object to signaled state
Description
cmdSetEvent behaves identically to
cmdSetEvent2,
except that it does not define an access scope, and must only be used
with cmdWaitEvents, not
cmdWaitEvents2.
Valid Usage
- If the
geometryShader
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BITorPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT - If the
conditionalRendering
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT - If the
fragmentDensityMap
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT - If the
transformFeedback
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT - If the
meshShader
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT - If the
taskShader
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT - If neither of the
shadingRateImage
or the
attachmentFragmentShadingRate
features are enabled,
stageMaskmust not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the
synchronization2
feature is not enabled,
stageMaskmust not be0 - If neither the
VK_NV_ray_tracing
extension or the
rayTracingPipeline
feature are enabled,
stageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - If the
accelerationStructure
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR - Any pipeline stage included in
stageMaskmust be supported by the capabilities of the queue family specified by thequeueFamilyIndexmember of theCommandPoolCreateInfostructure that was used to create theCommandPoolthatcommandBufferwas allocated from, as specified in the table of supported pipeline stages -
stageMaskmust not includePIPELINE_STAGE_HOST_BIT - The current device mask of
commandBuffermust include exactly one physical device
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
eventmust be a validEventhandle -
stageMaskmust be a valid combination ofPipelineStageFlagBitsvalues -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, VK_QUEUE_VIDEO_DECODE_BIT_KHR, or VK_QUEUE_VIDEO_ENCODE_BIT_KHR operations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- Both of
commandBuffer, andeventmust 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 | Outside | Both | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_VIDEO_DECODE_BIT_KHR VK_QUEUE_VIDEO_ENCODE_BIT_KHR | Synchronization |
Conditional Rendering
vkCmdSetEvent is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> Event |
|
| -> ("stageMask" ::: PipelineStageFlags) |
|
| -> io () |
vkCmdResetEvent - Reset an event object to non-signaled state
Description
cmdResetEvent behaves identically to
cmdResetEvent2.
Valid Usage
- If the
geometryShader
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BITorPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT - If the
conditionalRendering
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT - If the
fragmentDensityMap
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT - If the
transformFeedback
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT - If the
meshShader
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT - If the
taskShader
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT - If neither of the
shadingRateImage
or the
attachmentFragmentShadingRate
features are enabled,
stageMaskmust not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the
synchronization2
feature is not enabled,
stageMaskmust not be0 - If neither the
VK_NV_ray_tracing
extension or the
rayTracingPipeline
feature are enabled,
stageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - If the
accelerationStructure
feature is not enabled,
stageMaskmust not containPIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR - Any pipeline stage included
in
stageMaskmust be supported by the capabilities of the queue family specified by thequeueFamilyIndexmember of theCommandPoolCreateInfostructure that was used to create theCommandPoolthatcommandBufferwas allocated from, as specified in the table of supported pipeline stages -
stageMaskmust not includePIPELINE_STAGE_HOST_BIT - There must be an execution
dependency between
cmdResetEventand the execution of anycmdWaitEventsthat includeseventin itspEventsparameter - There must be an execution
dependency between
cmdResetEventand the execution of anycmdWaitEvents2that includeseventin itspEventsparameter -
commandBuffer’s current device mask must include exactly one physical device
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
eventmust be a validEventhandle -
stageMaskmust be a valid combination ofPipelineStageFlagBitsvalues -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, VK_QUEUE_VIDEO_DECODE_BIT_KHR, or VK_QUEUE_VIDEO_ENCODE_BIT_KHR operations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- Both of
commandBuffer, andeventmust 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 | Outside | Both | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_VIDEO_DECODE_BIT_KHR VK_QUEUE_VIDEO_ENCODE_BIT_KHR | Synchronization |
Conditional Rendering
vkCmdResetEvent is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("events" ::: Vector Event) |
|
| -> ("srcStageMask" ::: PipelineStageFlags) |
|
| -> ("dstStageMask" ::: PipelineStageFlags) |
|
| -> ("memoryBarriers" ::: Vector MemoryBarrier) |
|
| -> ("bufferMemoryBarriers" ::: Vector (SomeStruct BufferMemoryBarrier)) |
|
| -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) |
|
| -> io () |
vkCmdWaitEvents - Wait for one or more events and insert a set of memory
Description
cmdWaitEvents is largely similar to
cmdWaitEvents2,
but can only wait on signal operations defined by cmdSetEvent. As
cmdSetEvent does not define any access scopes, cmdWaitEvents defines
the first access scope for each event signal operation in addition to
its own access scopes.
Since cmdSetEvent does not have any dependency information beyond a
stage mask, implementations do not have the same opportunity to perform
availability and visibility operations
or
image layout transitions
in advance as they do with
cmdSetEvent2 and
cmdWaitEvents2.
When cmdWaitEvents is submitted to a queue, it defines a memory
dependency between prior event signal operations on the same queue or
the host, and subsequent commands. cmdWaitEvents must not be used to
wait on event signal operations occurring on other queues.
The first synchronization scope only includes event signal operations
that operate on members of pEvents, and the operations that
happened-before the event signal operations. Event signal operations
performed by cmdSetEvent that occur earlier in
submission order
are included in the first synchronization scope, if the
logically latest
pipeline stage in their stageMask parameter is
logically earlier
than or equal to the
logically latest
pipeline stage in srcStageMask. Event signal operations performed by
setEvent are only included in the first
synchronization scope if
PIPELINE_STAGE_HOST_BIT is
included in srcStageMask.
The second
synchronization scope
includes all commands that occur later in
submission order.
The second synchronization scope is limited to operations on the
pipeline stages determined by the
destination stage mask
specified by dstStageMask.
The first
access scope
is limited to accesses in the pipeline stages determined by the
source stage mask
specified by srcStageMask. Within that, the first access scope only
includes the first access scopes defined by elements of the
pMemoryBarriers, pBufferMemoryBarriers and pImageMemoryBarriers
arrays, which each define a set of
memory barriers.
If no memory barriers are specified, then the first access scope
includes no accesses.
The second
access scope
is limited to accesses in the pipeline stages determined by the
destination stage mask
specified by dstStageMask. Within that, the second access scope only
includes the second access scopes defined by elements of the
pMemoryBarriers, pBufferMemoryBarriers and pImageMemoryBarriers
arrays, which each define a set of
memory barriers.
If no memory barriers are specified, then the second access scope
includes no accesses.
Valid Usage
- If the
geometryShader
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BITorPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT - If the
conditionalRendering
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT - If the
fragmentDensityMap
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT - If the
transformFeedback
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT - If the
meshShader
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT - If the
taskShader
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT - If neither of the
shadingRateImage
or the
attachmentFragmentShadingRate
features are enabled,
srcStageMaskmust not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the
synchronization2
feature is not enabled,
srcStageMaskmust not be0 - If neither the
VK_NV_ray_tracing
extension or the
rayTracingPipeline
feature are enabled,
srcStageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - If the
accelerationStructure
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR - If the
rayQuery
feature is not enabled and a memory barrier
srcAccessMaskincludesACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,srcStageMaskmust not include any of theVK_PIPELINE_STAGE_*_SHADER_BITstages exceptPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - If the
geometryShader
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT - If the
tessellationShader
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BITorPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT - If the
conditionalRendering
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT - If the
fragmentDensityMap
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT - If the
transformFeedback
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT - If the
meshShader
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT - If the
taskShader
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT - If neither of the
shadingRateImage
or the
attachmentFragmentShadingRate
features are enabled,
dstStageMaskmust not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the
synchronization2
feature is not enabled,
dstStageMaskmust not be0 - If neither the
VK_NV_ray_tracing
extension or the
rayTracingPipeline
feature are enabled,
dstStageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - If the
accelerationStructure
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR - If the
rayQuery
feature is not enabled and a memory barrier
dstAccessMaskincludesACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,dstStageMaskmust not include any of theVK_PIPELINE_STAGE_*_SHADER_BITstages exceptPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - The
srcAccessMaskmember of each element ofpMemoryBarriersmust only include access flags that are supported by one or more of the pipeline stages insrcStageMask, as specified in the table of supported access types - The
dstAccessMaskmember of each element ofpMemoryBarriersmust only include access flags that are supported by one or more of the pipeline stages indstStageMask, as specified in the table of supported access types - For each element
of
pBufferMemoryBarriers, if itssrcQueueFamilyIndexanddstQueueFamilyIndexmembers are equal, or if itssrcQueueFamilyIndexis the queue family index that was used to create the command pool thatcommandBufferwas allocated from, then itssrcAccessMaskmember must only contain access flags that are supported by one or more of the pipeline stages insrcStageMask, as specified in the table of supported access types - For each element
of
pBufferMemoryBarriers, if itssrcQueueFamilyIndexanddstQueueFamilyIndexmembers are equal, or if itsdstQueueFamilyIndexis the queue family index that was used to create the command pool thatcommandBufferwas allocated from, then itsdstAccessMaskmember must only contain access flags that are supported by one or more of the pipeline stages indstStageMask, as specified in the table of supported access types - For each element
of
pImageMemoryBarriers, if itssrcQueueFamilyIndexanddstQueueFamilyIndexmembers are equal, or if itssrcQueueFamilyIndexis the queue family index that was used to create the command pool thatcommandBufferwas allocated from, then itssrcAccessMaskmember must only contain access flags that are supported by one or more of the pipeline stages insrcStageMask, as specified in the table of supported access types - For each element
of
pImageMemoryBarriers, if itssrcQueueFamilyIndexanddstQueueFamilyIndexmembers are equal, or if itsdstQueueFamilyIndexis the queue family index that was used to create the command pool thatcommandBufferwas allocated from, then itsdstAccessMaskmember must only contain access flags that are supported by one or more of the pipeline stages indstStageMask, as specified in the table of supported access types - If
cmdWaitEventsis called within a render pass instance using aRenderPassobject, and theimagemember of any image memory barrier is a color resolve attachment, the corresponding color attachment must beATTACHMENT_UNUSED - If
cmdWaitEventsis called within a render pass instance using aRenderPassobject, and theimagemember of any image memory barrier is a color resolve attachment, it must have been created with a non-zeroExternalFormatANDROID::externalFormatvalue - If
cmdWaitEventsis called within a render pass instance, theoldLayoutandnewLayoutmembers of any image memory barrier included in this command must be equal - If
cmdWaitEventsis called within a render pass instance, thesrcQueueFamilyIndexanddstQueueFamilyIndexmembers of any memory barrier included in this command must be equal - Any pipeline stage
included in
srcStageMaskmust be supported by the capabilities of the queue family specified by thequeueFamilyIndexmember of theCommandPoolCreateInfostructure that was used to create theCommandPoolthatcommandBufferwas allocated from, as specified in the table of supported pipeline stages - Any pipeline stage
included in
dstStageMaskmust be supported by the capabilities of the queue family specified by thequeueFamilyIndexmember of theCommandPoolCreateInfostructure that was used to create theCommandPoolthatcommandBufferwas allocated from, as specified in the table of supported pipeline stages -
srcStageMaskmust be the bitwise OR of thestageMaskparameter used in previous calls tocmdSetEventwith any of the elements ofpEventsandPIPELINE_STAGE_HOST_BITif any of the elements ofpEventswas set usingsetEvent - If this command is called
inside a render pass instance,
srcStageMaskmust not includePIPELINE_STAGE_HOST_BIT - The
srcQueueFamilyIndexanddstQueueFamilyIndexmembers of any element ofpBufferMemoryBarriersorpImageMemoryBarriersmust be equal -
commandBuffer’s current device mask must include exactly one physical device - Elements of
pEventsmust not have been signaled bycmdSetEvent2 - This command must not be recorded when per-tile execution model is enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pEventsmust be a valid pointer to an array ofeventCountvalidEventhandles -
srcStageMaskmust be a valid combination ofPipelineStageFlagBitsvalues -
dstStageMaskmust be a valid combination ofPipelineStageFlagBitsvalues - If
memoryBarrierCountis not0,pMemoryBarriersmust be a valid pointer to an array ofmemoryBarrierCountvalidMemoryBarrierstructures - If
bufferMemoryBarrierCountis not0,pBufferMemoryBarriersmust be a valid pointer to an array ofbufferMemoryBarrierCountvalidBufferMemoryBarrierstructures - If
imageMemoryBarrierCountis not0,pImageMemoryBarriersmust be a valid pointer to an array ofimageMemoryBarrierCountvalidImageMemoryBarrierstructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, VK_QUEUE_VIDEO_DECODE_BIT_KHR, or VK_QUEUE_VIDEO_ENCODE_BIT_KHR operations - This command must not be called between suspended render pass instances
-
eventCountmust be greater than0 - Both of
commandBuffer, and the elements ofpEventsmust 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 | Both | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_VIDEO_DECODE_BIT_KHR VK_QUEUE_VIDEO_ENCODE_BIT_KHR | Synchronization |
Conditional Rendering
vkCmdWaitEvents is not affected by conditional rendering
See Also
VK_VERSION_1_0,
BufferMemoryBarrier,
CommandBuffer, Event,
ImageMemoryBarrier,
MemoryBarrier,
PipelineStageFlags
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("events" ::: Vector Event) |
|
| -> ("srcStageMask" ::: PipelineStageFlags) |
|
| -> ("dstStageMask" ::: PipelineStageFlags) |
|
| -> ("memoryBarriers" ::: Vector MemoryBarrier) |
|
| -> ("bufferMemoryBarriers" ::: Vector (SomeStruct BufferMemoryBarrier)) |
|
| -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) |
|
| -> io () |
A variant of cmdWaitEvents which makes a *safe* FFI call
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("srcStageMask" ::: PipelineStageFlags) |
|
| -> ("dstStageMask" ::: PipelineStageFlags) |
|
| -> DependencyFlags |
|
| -> ("memoryBarriers" ::: Vector MemoryBarrier) |
|
| -> ("bufferMemoryBarriers" ::: Vector (SomeStruct BufferMemoryBarrier)) |
|
| -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) |
|
| -> io () |
vkCmdPipelineBarrier - Insert a memory dependency
Description
cmdPipelineBarrier operates almost identically to
cmdPipelineBarrier2,
except that the scopes and barriers are defined as direct parameters
rather than being defined by a
DependencyInfo.
When cmdPipelineBarrier is submitted to a queue, it defines a memory
dependency between commands that were submitted to the same queue before
it, and those submitted to the same queue after it.
If cmdPipelineBarrier was recorded outside a render pass instance, the
first
synchronization scope
includes all commands that occur earlier in
submission order.
If cmdPipelineBarrier was recorded inside a render pass instance, the
first synchronization scope includes only commands that occur earlier in
submission order
within the same subpass. In either case, the first synchronization scope
is limited to operations on the pipeline stages determined by the
source stage mask
specified by srcStageMask.
If cmdPipelineBarrier was recorded outside a render pass instance, the
second
synchronization scope
includes all commands that occur later in
submission order.
If cmdPipelineBarrier was recorded inside a render pass instance, the
second synchronization scope includes only commands that occur later in
submission order
within the same subpass. In either case, the second synchronization
scope is limited to operations on the pipeline stages determined by the
destination stage mask
specified by dstStageMask.
The first
access scope
is limited to accesses in the pipeline stages determined by the
source stage mask
specified by srcStageMask. Within that, the first access scope only
includes the first access scopes defined by elements of the
pMemoryBarriers, pBufferMemoryBarriers and pImageMemoryBarriers
arrays, which each define a set of
memory barriers.
If no memory barriers are specified, then the first access scope
includes no accesses.
The second
access scope
is limited to accesses in the pipeline stages determined by the
destination stage mask
specified by dstStageMask. Within that, the second access scope only
includes the second access scopes defined by elements of the
pMemoryBarriers, pBufferMemoryBarriers and pImageMemoryBarriers
arrays, which each define a set of
memory barriers.
If no memory barriers are specified, then the second access scope
includes no accesses.
If dependencyFlags includes
DEPENDENCY_BY_REGION_BIT, then
any dependency between
framebuffer-space
pipeline stages is
framebuffer-local
- otherwise it is
framebuffer-global.
Valid Usage
- If the
geometryShader
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BITorPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT - If the
conditionalRendering
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT - If the
fragmentDensityMap
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT - If the
transformFeedback
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT - If the
meshShader
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT - If the
taskShader
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT - If neither of the
shadingRateImage
or the
attachmentFragmentShadingRate
features are enabled,
srcStageMaskmust not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the
synchronization2
feature is not enabled,
srcStageMaskmust not be0 - If neither the
VK_NV_ray_tracing
extension or the
rayTracingPipeline
feature are enabled,
srcStageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - If the
accelerationStructure
feature is not enabled,
srcStageMaskmust not containPIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR - If the
rayQuery
feature is not enabled and a memory barrier
srcAccessMaskincludesACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,srcStageMaskmust not include any of theVK_PIPELINE_STAGE_*_SHADER_BITstages exceptPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - If the
geometryShader
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT - If the
tessellationShader
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BITorPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT - If the
conditionalRendering
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT - If the
fragmentDensityMap
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT - If the
transformFeedback
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT - If the
meshShader
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT - If the
taskShader
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT - If neither of the
shadingRateImage
or the
attachmentFragmentShadingRate
features are enabled,
dstStageMaskmust not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the
synchronization2
feature is not enabled,
dstStageMaskmust not be0 - If neither the
VK_NV_ray_tracing
extension or the
rayTracingPipeline
feature are enabled,
dstStageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - If the
accelerationStructure
feature is not enabled,
dstStageMaskmust not containPIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR - If the
rayQuery
feature is not enabled and a memory barrier
dstAccessMaskincludesACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,dstStageMaskmust not include any of theVK_PIPELINE_STAGE_*_SHADER_BITstages exceptPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR - The
srcAccessMaskmember of each element ofpMemoryBarriersmust only include access flags that are supported by one or more of the pipeline stages insrcStageMask, as specified in the table of supported access types - The
dstAccessMaskmember of each element ofpMemoryBarriersmust only include access flags that are supported by one or more of the pipeline stages indstStageMask, as specified in the table of supported access types - For each
element of
pBufferMemoryBarriers, if itssrcQueueFamilyIndexanddstQueueFamilyIndexmembers are equal, or if itssrcQueueFamilyIndexis the queue family index that was used to create the command pool thatcommandBufferwas allocated from, then itssrcAccessMaskmember must only contain access flags that are supported by one or more of the pipeline stages insrcStageMask, as specified in the table of supported access types - For each
element of
pBufferMemoryBarriers, if itssrcQueueFamilyIndexanddstQueueFamilyIndexmembers are equal, or if itsdstQueueFamilyIndexis the queue family index that was used to create the command pool thatcommandBufferwas allocated from, then itsdstAccessMaskmember must only contain access flags that are supported by one or more of the pipeline stages indstStageMask, as specified in the table of supported access types - For each
element of
pImageMemoryBarriers, if itssrcQueueFamilyIndexanddstQueueFamilyIndexmembers are equal, or if itssrcQueueFamilyIndexis the queue family index that was used to create the command pool thatcommandBufferwas allocated from, then itssrcAccessMaskmember must only contain access flags that are supported by one or more of the pipeline stages insrcStageMask, as specified in the table of supported access types - For each
element of
pImageMemoryBarriers, if itssrcQueueFamilyIndexanddstQueueFamilyIndexmembers are equal, or if itsdstQueueFamilyIndexis the queue family index that was used to create the command pool thatcommandBufferwas allocated from, then itsdstAccessMaskmember must only contain access flags that are supported by one or more of the pipeline stages indstStageMask, as specified in the table of supported access types - If
cmdPipelineBarrieris called within a render pass instance using aRenderPassobject, and theimagemember of any image memory barrier is a color resolve attachment, the corresponding color attachment must beATTACHMENT_UNUSED - If
cmdPipelineBarrieris called within a render pass instance using aRenderPassobject, and theimagemember of any image memory barrier is a color resolve attachment, it must have been created with a non-zeroExternalFormatANDROID::externalFormatvalue - If
cmdPipelineBarrieris called within a render pass instance, theoldLayoutandnewLayoutmembers of any image memory barrier included in this command must be equal - If
cmdPipelineBarrieris called within a render pass instance, thesrcQueueFamilyIndexanddstQueueFamilyIndexmembers of any memory barrier included in this command must be equal - If
cmdPipelineBarrieris called within a render pass instance using aRenderPassobject, the render pass must have been created with at least one subpass dependency that expresses a dependency from the current subpass to itself, does not includeDEPENDENCY_BY_REGION_BITif this command does not, does not includeDEPENDENCY_VIEW_LOCAL_BITif this command does not, and has synchronization scopes and access scopes that are all supersets of the scopes defined in this command - If
cmdPipelineBarrieris called within a render pass instance using aRenderPassobject, it must not include any buffer memory barriers - If
cmdPipelineBarrieris called within a render pass instance using aRenderPassobject, theimagemember of any image memory barrier included in this command must be an attachment used in the current subpass both as an input attachment, and as either a color, color resolve, or depth/stencil attachment - If
cmdPipelineBarrieris called within a render pass instance, and the source stage masks of any memory barriers include framebuffer-space stages, destination stage masks of all memory barriers must only include framebuffer-space stages - If
cmdPipelineBarrieris called within a render pass instance, and the source stage masks of any memory barriers include framebuffer-space stages, thendependencyFlagsmust includeDEPENDENCY_BY_REGION_BIT - If
cmdPipelineBarrieris called within a render pass instance, the source and destination stage masks of any memory barriers must only include graphics pipeline stages - If
cmdPipelineBarrieris called outside of a render pass instance, the dependency flags must not includeDEPENDENCY_VIEW_LOCAL_BIT - If
cmdPipelineBarrieris called inside a render pass instance, and there is more than one view in the current subpass, dependency flags must includeDEPENDENCY_VIEW_LOCAL_BIT - If none of the
shaderTileImageColorReadAccess,
shaderTileImageStencilReadAccess,
or
shaderTileImageDepthReadAccess
features are enabled, and the
dynamicRenderingLocalRead
feature is not enabled,
cmdPipelineBarriermust not be called within a render pass instance started withcmdBeginRendering - If the
dynamicRenderingLocalRead
feature is not enabled, and
cmdPipelineBarrieris called within a render pass instance started withcmdBeginRendering, there must be no buffer or image memory barriers specified by this command - If the
dynamicRenderingLocalRead
feature is not enabled, and
cmdPipelineBarrieris called within a render pass instance started withcmdBeginRendering, memory barriers specified by this command must only includeACCESS_2_COLOR_ATTACHMENT_READ_BIT,ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT,ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT, orACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BITin their access masks - If
cmdPipelineBarrieris called within a render pass instance started withcmdBeginRendering, and theimagemember of any image memory barrier is used as an attachment in the current render pass instance, it must be in theIMAGE_LAYOUT_RENDERING_LOCAL_READorIMAGE_LAYOUT_GENERALlayout - If
cmdPipelineBarrieris called within a render pass instance started withcmdBeginRendering, this command must only specify framebuffer-space stages insrcStageMaskanddstStageMask - If called within a
render pass instance using a
RenderPassobject, theoldLayoutmember of any image memory barrier included in this command must be equal to the layout that the corresponding attachment uses during the subpass - If called within a
render pass instance started with
cmdBeginRendering, theoldLayoutmember of any image memory barrier included in this command must be equal to the layout that the corresponding attachment uses during the render pass instance - Any pipeline stage
included in
srcStageMaskmust be supported by the capabilities of the queue family specified by thequeueFamilyIndexmember of theCommandPoolCreateInfostructure that was used to create theCommandPoolthatcommandBufferwas allocated from, as specified in the table of supported pipeline stages - Any pipeline stage
included in
dstStageMaskmust be supported by the capabilities of the queue family specified by thequeueFamilyIndexmember of theCommandPoolCreateInfostructure that was used to create theCommandPoolthatcommandBufferwas allocated from, as specified in the table of supported pipeline stages - If either
srcStageMaskordstStageMaskincludesPIPELINE_STAGE_HOST_BIT, for each element ofpImageMemoryBarriers,srcQueueFamilyIndexanddstQueueFamilyIndexmust be equal - If either
srcStageMaskordstStageMaskincludesPIPELINE_STAGE_HOST_BIT, for each element ofpBufferMemoryBarriers,srcQueueFamilyIndexanddstQueueFamilyIndexmust be equal - If a buffer or
image memory barrier specifies a
queue family ownership transfer operation,
either the
srcQueueFamilyIndexordstQueueFamilyIndexmember and the queue family index that was used to create the command pool thatcommandBufferwas allocated from must be equal - If the
maintenance8
feature is not enabled,
dependencyFlagsmust not includeDEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
srcStageMaskmust be a valid combination ofPipelineStageFlagBitsvalues -
dstStageMaskmust be a valid combination ofPipelineStageFlagBitsvalues -
dependencyFlagsmust be a valid combination ofDependencyFlagBitsvalues - If
memoryBarrierCountis not0,pMemoryBarriersmust be a valid pointer to an array ofmemoryBarrierCountvalidMemoryBarrierstructures - If
bufferMemoryBarrierCountis not0,pBufferMemoryBarriersmust be a valid pointer to an array ofbufferMemoryBarrierCountvalidBufferMemoryBarrierstructures - If
imageMemoryBarrierCountis not0,pImageMemoryBarriersmust be a valid pointer to an array ofimageMemoryBarrierCountvalidImageMemoryBarrierstructures -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT,QUEUE_TRANSFER_BIT, VK_QUEUE_VIDEO_DECODE_BIT_KHR, or VK_QUEUE_VIDEO_ENCODE_BIT_KHR operations - This command must not be called between suspended render pass instances
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 | Both | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_TRANSFER_BIT VK_QUEUE_VIDEO_DECODE_BIT_KHR VK_QUEUE_VIDEO_ENCODE_BIT_KHR | Synchronization |
Conditional Rendering
vkCmdPipelineBarrier is not affected by conditional rendering
See Also
VK_VERSION_1_0,
BufferMemoryBarrier,
CommandBuffer,
DependencyFlags,
ImageMemoryBarrier,
MemoryBarrier,
PipelineStageFlags
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> QueryPool |
|
| -> ("query" ::: Word32) |
|
| -> QueryControlFlags |
|
| -> io () |
vkCmdBeginQuery - Begin a query
Description
If the queryType of the pool is
QUERY_TYPE_OCCLUSION and flags
contains
QUERY_CONTROL_PRECISE_BIT, an
implementation must return a result that matches the actual number of
samples passed. This is described in more detail in
Occlusion Queries.
Calling cmdBeginQuery is equivalent to calling
cmdBeginQueryIndexedEXT
with the index parameter set to zero.
After beginning a query, that query is considered active within the command buffer it was called in until that same query is ended. Queries active in a primary command buffer when secondary command buffers are executed are considered active for those secondary command buffers.
Furthermore, if the query is started within a video coding scope, the following command buffer states are initialized for the query type:
- The active_query_index is
set to the value specified by
query. - The /last
activatable query index/ is also set to the value specified by
query.
Each video coding operation stores a result to the query corresponding to the current active query index, followed by incrementing the active query index. If the active query index gets incremented past the last activatable query index, issuing any further video coding operations results in undefined behavior.
In practice, this means that currently no more than a single video coding operation must be issued between a begin and end query pair.
This command defines an execution dependency between other query commands that reference the same query.
The first
synchronization scope
includes all commands which reference the queries in queryPool
indicated by query that occur earlier in
submission order.
The second
synchronization scope
includes all commands which reference the queries in queryPool
indicated by query 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 createqueryPoolwas VK_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 there is a bound video session, then it must not have been created with VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR
- If the
queryTypeused to createqueryPoolwas VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR and 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 VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be a bound video session - If the
queryTypeused to createqueryPoolwas VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR and 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 not VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR or VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be no bound video session - This command must not be recorded when per-tile execution model is enabled
-
queryPoolmust have been created with aqueryTypethat differs from that of any queries that are active withincommandBuffer - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXTtheCommandPoolthatcommandBufferwas allocated from must support graphics operations - 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_EXTthenPhysicalDeviceTransformFeedbackPropertiesEXT::transformFeedbackQueriesmust be supported - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PRIMITIVES_GENERATED_EXTtheCommandPoolthatcommandBufferwas allocated from must support graphics operations - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PRIMITIVES_GENERATED_EXTthen primitivesGeneratedQuery must be enabled - 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 supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, VK_QUEUE_VIDEO_DECODE_BIT_KHR, or VK_QUEUE_VIDEO_ENCODE_BIT_KHR operations - This command must not be called between suspended render pass instances
- 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 | Both | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_VIDEO_DECODE_BIT_KHR VK_QUEUE_VIDEO_ENCODE_BIT_KHR | Action State |
Conditional Rendering
vkCmdBeginQuery is not affected by conditional rendering
See Also
VK_VERSION_1_0,
CommandBuffer,
QueryControlFlags,
QueryPool,
cmdBeginQueryIndexedEXT,
cmdEndQuery,
cmdEndQueryIndexedEXT
cmdUseQuery :: MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> io r -> io r Source #
This function will call the supplied action between calls to
cmdBeginQuery and cmdEndQuery
Note that cmdEndQuery is *not* called if an exception is thrown by the
inner action.
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> QueryPool |
|
| -> ("query" ::: Word32) |
|
| -> io () |
vkCmdEndQuery - Ends a query
Description
The command completes the query in queryPool identified by query,
and marks it as available.
This command defines an execution dependency between other query commands that reference the same query.
The first
synchronization scope
includes all commands which reference the queries in queryPool
indicated by query that occur earlier in
submission order.
The second synchronization scope includes only the operation of this command.
Calling cmdEndQuery is equivalent to calling
cmdEndQueryIndexedEXT with
the index parameter set to zero.
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
cmdEndQueryis 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
queryPoolwas created with aqueryTypeofQUERY_TYPE_PERFORMANCE_QUERY_KHRand one or more of the counters used to createqueryPoolwasPERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, thecmdEndQuerymust be the last recorded command incommandBuffer - If
queryPoolwas created with aqueryTypeofQUERY_TYPE_PERFORMANCE_QUERY_KHRand one or more of the counters used to createqueryPoolwasPERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, thecmdEndQuerymust not be recorded within a render pass instance - If called within a subpass of a
render pass instance, the corresponding
cmdBeginQuery* command must have been called previously within the same subpass - This command must not be recorded when per-tile execution model is enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
queryPoolmust be a validQueryPoolhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, VK_QUEUE_VIDEO_DECODE_BIT_KHR, or VK_QUEUE_VIDEO_ENCODE_BIT_KHR operations - This command must not be called between suspended render pass instances
- 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 | Both | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_VIDEO_DECODE_BIT_KHR VK_QUEUE_VIDEO_ENCODE_BIT_KHR | Action State |
Conditional Rendering
vkCmdEndQuery is not affected by conditional rendering
See Also
VK_VERSION_1_0,
CommandBuffer,
QueryPool, cmdBeginQuery,
cmdBeginQueryIndexedEXT,
cmdEndQueryIndexedEXT
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> QueryPool |
|
| -> ("firstQuery" ::: Word32) |
|
| -> ("queryCount" ::: Word32) |
|
| -> io () |
vkCmdResetQueryPool - Reset queries in a query pool
Description
When executed on a queue, this command sets the status of query indices
[firstQuery, firstQuery + queryCount - 1] to unavailable.
This command defines an execution dependency between other query commands that reference the same query.
The first
synchronization scope
includes all commands which reference the queries in queryPool
indicated by firstQuery and queryCount that occur earlier in
submission order.
The second
synchronization scope
includes all commands which reference the queries in queryPool
indicated by firstQuery and queryCount that occur later in
submission order.
The operation of this command happens after the first scope and happens before the second scope.
If the queryType used to create queryPool was
QUERY_TYPE_PERFORMANCE_QUERY_KHR, this
command sets the status of query indices [firstQuery, firstQuery +
queryCount - 1] to unavailable for each pass of queryPool, as
indicated by a call to
getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.
Because cmdResetQueryPool resets all the passes of the indicated
queries, applications must not record a cmdResetQueryPool command for
a queryPool created with
QUERY_TYPE_PERFORMANCE_QUERY_KHR in a
command buffer that needs to be submitted multiple times as indicated by
a call to
getPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR.
Otherwise applications will never be able to complete the recorded
queries.
Valid Usage
- The sum of
firstQueryandqueryCountmust be less than or equal to the number of queries inqueryPool - All queries used by the command must not be active
- If
queryPoolwas created withQUERY_TYPE_PERFORMANCE_QUERY_KHR, this command must not be recorded in a command buffer that, either directly or through secondary command buffers, also contains begin commands for a query from the set of queries [firstQuery,firstQuery+queryCount- 1]
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
queryPoolmust be a validQueryPoolhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT,QUEUE_OPTICAL_FLOW_BIT_NV, VK_QUEUE_VIDEO_DECODE_BIT_KHR, or VK_QUEUE_VIDEO_ENCODE_BIT_KHR operations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- 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 | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_OPTICAL_FLOW_BIT_NV VK_QUEUE_VIDEO_DECODE_BIT_KHR VK_QUEUE_VIDEO_ENCODE_BIT_KHR | Action |
Conditional Rendering
vkCmdResetQueryPool is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> PipelineStageFlagBits |
|
| -> QueryPool |
|
| -> ("query" ::: Word32) |
|
| -> io () |
vkCmdWriteTimestamp - Write a device timestamp into a query object
Description
When cmdWriteTimestamp is submitted to a queue, it defines an
execution dependency on commands that were submitted before it, and
writes a timestamp to a query pool.
The first
synchronization scope
includes all commands that occur earlier in
submission order.
The synchronization scope is limited to operations on the pipeline stage
specified by pipelineStage.
The second synchronization scope includes only the timestamp write operation.
Implementations may write the timestamp at any stage that is
logically later
than stage.
Any timestamp write that
happens-after
another timestamp write in the same submission must not have a lower
value unless its value overflows the maximum supported integer bit width
of the query. If VK_KHR_calibrated_timestamps or
VK_EXT_calibrated_timestamps is enabled, this extends to timestamp
writes across all submissions on the same logical device: any timestamp
write that
happens-after
another must not have a lower value unless its value overflows the
maximum supported integer bit width of the query. Timestamps written by
this command must be in the
TIME_DOMAIN_DEVICE_KHR
time domain. If an overflow occurs, the timestamp
value must wrap back to zero.
If cmdWriteTimestamp is called while executing a render pass instance
that has multiview enabled, the timestamp uses N consecutive query
indices in the query pool (starting at query) where N is the number of
bits set in the view mask of the subpass or dynamic render pass the
command is executed in. The resulting query values are determined by an
implementation-dependent choice of one of the following behaviors:
- The first query is a timestamp value and (if more than one bit is set in the view mask) zero is written to the remaining queries.
- All N queries are timestamp values.
Either way, if two timestamps are written in the same subpass or dynamic render pass with multiview enabled, each of the N consecutive queries written for a timestamp must not have a lower value than the queries with corresponding indices written by the timestamp that happens-before unless the value overflows the maximum supported integer bit width of the query.
Valid Usage
-
pipelineStagemust be a valid stage for the queue family that was used to create the command pool thatcommandBufferwas allocated from
- If the
geometryShader
feature is not enabled,
pipelineStagemust not bePIPELINE_STAGE_GEOMETRY_SHADER_BIT - If the
tessellationShader
feature is not enabled,
pipelineStagemust not bePIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BITorPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT - If the
conditionalRendering
feature is not enabled,
pipelineStagemust not bePIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT - If the
fragmentDensityMap
feature is not enabled,
pipelineStagemust not bePIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT - If the
transformFeedback
feature is not enabled,
pipelineStagemust not bePIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT - If the
meshShader
feature is not enabled,
pipelineStagemust not bePIPELINE_STAGE_MESH_SHADER_BIT_EXT - If the
taskShader
feature is not enabled,
pipelineStagemust not bePIPELINE_STAGE_TASK_SHADER_BIT_EXT - If neither of the
shadingRateImage
or the
attachmentFragmentShadingRate
features are enabled,
pipelineStagemust not bePIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the
synchronization2
feature is not enabled,
pipelineStagemust not bePIPELINE_STAGE_NONE - If neither of
the
VK_NV_ray_tracing
extension or the
rayTracingPipeline
feature are enabled,
pipelineStagemust not bePIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR -
queryPoolmust have been created with aqueryTypeofQUERY_TYPE_TIMESTAMP - The command
pool’s queue family must support a non-zero
timestampValidBits -
querymust be less than the number of queries inqueryPool - All queries used by the command must be unavailable
- If
cmdWriteTimestampis 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 - This command must not be recorded when per-tile execution model is enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pipelineStagemust be a validPipelineStageFlagBitsvalue -
queryPoolmust be a validQueryPoolhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT,QUEUE_OPTICAL_FLOW_BIT_NV,QUEUE_TRANSFER_BIT, VK_QUEUE_VIDEO_DECODE_BIT_KHR, or VK_QUEUE_VIDEO_ENCODE_BIT_KHR operations - This command must not be called between suspended render pass instances
- 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 | Both | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_OPTICAL_FLOW_BIT_NV VK_QUEUE_TRANSFER_BIT VK_QUEUE_VIDEO_DECODE_BIT_KHR VK_QUEUE_VIDEO_ENCODE_BIT_KHR | Action |
Conditional Rendering
vkCmdWriteTimestamp is not affected by conditional rendering
See Also
VK_VERSION_1_0,
CommandBuffer,
PipelineStageFlagBits,
QueryPool
cmdCopyQueryPoolResults Source #
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> QueryPool |
|
| -> ("firstQuery" ::: Word32) |
|
| -> ("queryCount" ::: Word32) |
|
| -> ("dstBuffer" ::: Buffer) |
|
| -> ("dstOffset" ::: DeviceSize) |
|
| -> ("stride" ::: DeviceSize) |
|
| -> QueryResultFlags |
|
| -> io () |
vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool to a buffer object
Description
Any results written for a query are written according to a layout dependent on the query type.
Results for any query in queryPool identified by firstQuery and
queryCount that is available are copied to dstBuffer.
If
QUERY_RESULT_WITH_AVAILABILITY_BIT
is set, results for all queries in queryPool identified by
firstQuery and queryCount are copied to dstBuffer, along with an
extra availability value written directly after the results of each
query and interpreted as an unsigned integer. A value of zero indicates
that the results are not yet available, otherwise the query is complete
and results are available.
If
VK_QUERY_RESULT_WITH_STATUS_BIT_KHR
is set, results for all queries in queryPool identified by
firstQuery and queryCount are copied to dstBuffer, along with an
extra status value written directly after the results of each query and
interpreted as a signed integer. A value of zero indicates that the
results are not yet available. Positive values indicate that the
operations within the query completed successfully, and the query
results are valid. Negative values indicate that the operations within
the query completed unsuccessfully.
VkQueryResultStatusKHR defines specific meaning for values returned here, though implementations are free to return other values.
If the status value written is negative, indicating that the operations within the query completed unsuccessfully, then all other results written by this command are undefined unless otherwise specified for any of the results of the used query type.
Results for any available query written by this command are final and
represent the final result of the query. If
QUERY_RESULT_PARTIAL_BIT is
set, then for any query that is unavailable, an intermediate result
between zero and the final result value is written for that query.
Otherwise, any result written by this command is undefined.
If QUERY_RESULT_64_BIT is set,
results and availability or status values for all queries are written as
an array of 64-bit values. If the queryPool was created with
QUERY_TYPE_PERFORMANCE_QUERY_KHR,
results for each query are written as an array of the type indicated by
PerformanceCounterKHR::storage
for the counter being queried. Otherwise, results and availability or
status values are written as an array of 32-bit values. If an unsigned
integer query’s value overflows the result type, the value may either
wrap or saturate. If the
maintenance7
feature is enabled, for an unsigned integer query, the 32-bit result
value must be equal to the 32 least significant bits of the equivalent
64-bit result value. If a signed integer query’s value overflows the
result type, the value is undefined. If a floating-point query’s value
is not representable as the result type, the value is undefined.
This command defines an execution dependency between other query commands that reference the same query.
The first
synchronization scope
includes all commands which reference the queries in queryPool
indicated by query that occur earlier in
submission order.
If flags does not include
QUERY_RESULT_WAIT_BIT,
cmdEndQuery,
cmdEndQueryIndexedEXT,
cmdWriteAccelerationStructuresPropertiesKHR,
cmdWriteAccelerationStructuresPropertiesNV,
cmdWriteMicromapsPropertiesEXT,
cmdWriteTimestamp2,
and cmdWriteTimestamp are excluded from this scope.
The second
synchronization scope
includes all commands which reference the queries in queryPool
indicated by query that occur later in
submission order.
The operation of this command happens after the first scope and happens before the second scope.
cmdCopyQueryPoolResults is considered to be a transfer operation, and
its writes to buffer memory must be synchronized using
PIPELINE_STAGE_TRANSFER_BIT
and ACCESS_TRANSFER_WRITE_BIT
before using the results.
Valid Usage
- The sum of
firstQueryandqueryCountmust be less than or equal to the number of queries inqueryPool - If
queryCountis greater than 1,stridemust not be zero - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_TIMESTAMP,flagsmust not containQUERY_RESULT_PARTIAL_BIT - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PERFORMANCE_QUERY_KHR,flagsmust not containQUERY_RESULT_WITH_AVAILABILITY_BIT, VK_QUERY_RESULT_WITH_STATUS_BIT_KHR,QUERY_RESULT_PARTIAL_BIT, orQUERY_RESULT_64_BIT - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PERFORMANCE_QUERY_KHR, thequeryPoolmust have been recorded once for each pass as retrieved via a call togetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR - If the
queryTypeused to createqueryPoolwas not VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR or VK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, thenflagsmust not include VK_QUERY_RESULT_WITH_STATUS_BIT_KHR - If the
queryTypeused to createqueryPoolwas VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, thenflagsmust include VK_QUERY_RESULT_WITH_STATUS_BIT_KHR - If
flagsincludes VK_QUERY_RESULT_WITH_STATUS_BIT_KHR, then it must not includeQUERY_RESULT_WITH_AVAILABILITY_BIT - All queries used by the command must not be uninitialized when the command is executed
-
dstOffsetmust be less than the size ofdstBuffer - If
QUERY_RESULT_64_BITis not set inflagsthendstOffsetmust be a multiple of4 - If
queryCountis greater than 1 andQUERY_RESULT_64_BITis not set inflagsthenstridemust be a multiple of4 - If
QUERY_RESULT_64_BITis set inflagsthendstOffsetmust be a multiple of8 - If
queryCountis greater than 1 andQUERY_RESULT_64_BITis set inflagsthenstridemust be a multiple of8 -
dstBuffermust have enough storage, fromdstOffset, to contain the result of each query, as described here -
dstBuffermust have been created with theBUFFER_USAGE_TRANSFER_DST_BITusage flag set - If
dstBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PERFORMANCE_QUERY_KHR,PhysicalDevicePerformanceQueryPropertiesKHR::allowCommandBufferQueryCopiesmust beTRUE -
cmdCopyQueryPoolResultsmust not be called if thequeryTypeused to createqueryPoolwasQUERY_TYPE_PERFORMANCE_QUERY_INTEL - All queries used by the command must not be active
- All queries used by the command must have been made available by prior executed commands
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
queryPoolmust be a validQueryPoolhandle -
dstBuffermust be a validBufferhandle -
flagsmust be a valid combination ofQueryResultFlagBitsvalues -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT, orQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
- Each of
commandBuffer,dstBuffer, 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 | Outside | Outside | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdCopyQueryPoolResults is not affected by conditional rendering
See Also
VK_VERSION_1_0,
Buffer, CommandBuffer,
DeviceSize,
QueryPool,
QueryResultFlags
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> PipelineLayout |
|
| -> ShaderStageFlags |
|
| -> ("offset" ::: Word32) |
|
| -> ("size" ::: Word32) |
|
| -> ("values" ::: Ptr ()) |
|
| -> io () |
vkCmdPushConstants - Update the values of push constants
Description
When a command buffer begins recording, all push constant values are undefined. Reads of undefined push constant values by the executing shader return undefined values.
Push constant values can be updated incrementally, causing shader
stages in stageFlags to read the new data from pValues for push
constants modified by this command, while still reading the previous
data for push constants not modified by this command. When a
bound pipeline command
is issued, the bound pipeline’s layout must be compatible with the
layouts used to set the values of all push constants in the pipeline
layout’s push constant ranges, as described in
Pipeline Layout Compatibility.
Binding a pipeline with a layout that is not compatible with the push
constant layout does not disturb the push constant values.
As stageFlags needs to include all flags the relevant push constant
ranges were created with, any flags that are not supported by the queue
family that the CommandPool used to allocate
commandBuffer was created on are ignored.
Valid Usage
- If
commandBufferis a secondary command buffer, it must have begun withCommandBufferInheritanceDescriptorHeapInfoEXT::pSamplerHeapBindInfoequal toNULL
- If
commandBufferis a secondary command buffer, it must have begun withCommandBufferInheritanceDescriptorHeapInfoEXT::pResourceHeapBindInfoequal toNULL - For each byte in the range
specified by
offsetandsizeand for each shader stage instageFlags, there must be a push constant range inlayoutthat includes that byte and that stage - For each byte in the range
specified by
offsetandsizeand for each push constant range that overlaps that byte,stageFlagsmust include all stages in that push constant range’sPushConstantRange::stageFlags -
offsetmust be a multiple of4 -
sizemust be a multiple of4 -
offsetmust be less thanPhysicalDeviceLimits::maxPushConstantsSize -
sizemust be less than or equal toPhysicalDeviceLimits::maxPushConstantsSizeminusoffset
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
layoutmust be a validPipelineLayouthandle -
stageFlagsmust be a valid combination ofShaderStageFlagBitsvalues -
stageFlagsmust not be0 -
pValuesmust be a valid pointer to an array ofsizebytes -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT, orQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a video coding scope
-
sizemust be greater than0 - Both of
commandBuffer, andlayoutmust 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 | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT | State |
Conditional Rendering
vkCmdPushConstants is not affected by conditional rendering
See Also
VK_VERSION_1_0,
CommandBuffer,
PipelineLayout,
ShaderStageFlags
Arguments
| :: forall (a :: [Type]) io. (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) | |
| => CommandBuffer |
|
| -> RenderPassBeginInfo a |
|
| -> SubpassContents |
|
| -> io () |
vkCmdBeginRenderPass - Begin a new render pass
Description
After beginning a render pass instance, the command buffer is ready to record the commands for the first subpass of that render pass.
Valid Usage
- If any of the
initialLayoutorfinalLayoutmember of theAttachmentDescriptionstructures or thelayoutmember of theAttachmentReferencestructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMALthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with theIMAGE_USAGE_COLOR_ATTACHMENT_BITusage flag set
- If any of the
initialLayoutorfinalLayoutmember of theAttachmentDescriptionstructures or thelayoutmember of theAttachmentReferencestructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, orIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMALthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with theIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BITusage flag set - If any of the
initialLayoutorfinalLayoutmember of theAttachmentDescriptionstructures or thelayoutmember of theAttachmentReferencestructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, orIMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, orIMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMALthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with theIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BITusage flag set - If any of the
stencilInitialLayoutorstencilFinalLayoutmember of theAttachmentDescriptionStencilLayoutstructures or thestencilLayoutmember of theAttachmentReferenceStencilLayoutstructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, orIMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMALthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with theIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BITusage flag set - If any of the
initialLayoutorfinalLayoutmember of theAttachmentDescriptionstructures or thelayoutmember of theAttachmentReferencestructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMALthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with theIMAGE_USAGE_SAMPLED_BITorIMAGE_USAGE_INPUT_ATTACHMENT_BITusage flags set - If any of the
initialLayoutorfinalLayoutmember of theAttachmentDescriptionstructures or thelayoutmember of theAttachmentReferencestructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_TRANSFER_SRC_OPTIMALthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with theIMAGE_USAGE_TRANSFER_SRC_BITusage flag set - If any of the
initialLayoutorfinalLayoutmember of theAttachmentDescriptionstructures or thelayoutmember of theAttachmentReferencestructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_TRANSFER_DST_OPTIMALthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with theIMAGE_USAGE_TRANSFER_DST_BITusage flag set - If the
initialLayoutmember of any of theAttachmentDescriptionstructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginis notIMAGE_LAYOUT_UNDEFINED, then each suchinitialLayoutmust be equal to the current layout of the corresponding attachment image subresource of the framebuffer specified in theframebuffermember ofpRenderPassBegin - The
srcStageMaskmembers of any element of thepDependenciesmember ofRenderPassCreateInfoused to createrenderPassmust be supported by the capabilities of the queue family identified by thequeueFamilyIndexmember of theCommandPoolCreateInfoused to create the command pool whichcommandBufferwas allocated from - The
dstStageMaskmembers of any element of thepDependenciesmember ofRenderPassCreateInfoused to createrenderPassmust be supported by the capabilities of the queue family identified by thequeueFamilyIndexmember of theCommandPoolCreateInfoused to create the command pool whichcommandBufferwas allocated from - For any attachment in
framebufferthat is used byrenderPassand is bound to memory locations that are also bound to another attachment used byrenderPass, and if at least one of those uses causes either attachment to be written to, both attachments must have had theATTACHMENT_DESCRIPTION_MAY_ALIAS_BITset - If any attachments
specified in
framebufferare used byrenderPassand are bound to overlapping memory locations, there must be only one that is used as a color attachment, depth/stencil, or resolve attachment in any subpass - If any of the
initialLayoutorfinalLayoutmember of theAttachmentDescriptionstructures or thelayoutmember of theAttachmentReferencestructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with either theIMAGE_USAGE_COLOR_ATTACHMENT_BITorIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BITusage flags set, and either theIMAGE_USAGE_INPUT_ATTACHMENT_BITorIMAGE_USAGE_SAMPLED_BITusage flags set - If any of the
initialLayoutorfinalLayoutmember of theAttachmentDescriptionstructures or thelayoutmember of theAttachmentReferencestructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with theIMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTusage flag set - If any of the
initialLayoutorfinalLayoutmember of theAttachmentDescriptionstructures or thelayoutmember of theAttachmentReferencestructures specified when creating the render pass specified in therenderPassmember ofpRenderPassBeginisIMAGE_LAYOUT_RENDERING_LOCAL_READthen the corresponding attachment image view of the framebuffer specified in theframebuffermember ofpRenderPassBeginmust have been created with either theIMAGE_USAGE_STORAGE_BITusage flag set, or both theIMAGE_USAGE_INPUT_ATTACHMENT_BITand either ofIMAGE_USAGE_COLOR_ATTACHMENT_BITorIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BITusage flags set If
contentsisSUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR, then at least one of the following features must be enabled:
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pRenderPassBeginmust be a valid pointer to a validRenderPassBeginInfostructure -
contentsmust be a validSubpassContentsvalue -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called outside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
commandBuffermust be a primaryCommandBuffer
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 | Outside | Outside | VK_QUEUE_GRAPHICS_BIT | Action State Synchronization |
Conditional Rendering
vkCmdBeginRenderPass is not affected by conditional rendering
See Also
VK_VERSION_1_0,
CommandBuffer, RenderPassBeginInfo,
SubpassContents
cmdUseRenderPass :: forall (a :: [Type]) io r. (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io r -> io r Source #
This function will call the supplied action between calls to
cmdBeginRenderPass and cmdEndRenderPass
Note that cmdEndRenderPass is *not* called if an exception is thrown
by the inner action.
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> SubpassContents |
|
| -> io () |
vkCmdNextSubpass - Transition to the next subpass of a render pass
Description
The subpass index for a render pass begins at zero when
cmdBeginRenderPass is recorded, and increments each time
cmdNextSubpass is recorded.
After transitioning to the next subpass, the application can record the commands for that subpass.
Valid Usage
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
contentsmust be a validSubpassContentsvalue -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
commandBuffermust be a primaryCommandBuffer
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 | Inside | Outside | VK_QUEUE_GRAPHICS_BIT | Action State Synchronization |
Conditional Rendering
vkCmdNextSubpass is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> io () |
vkCmdEndRenderPass - End the current render pass
Description
Ending a render pass instance performs any multisample resolve operations on the final subpass.
There is no implicit ordering between separate render passes, even in the same command buffer, and even when the attachments match. Some applications rely on the continuation of rasterization order between multiple render passes with attachments defined in the same way, in order to perform non-rendering operations (such as copies or compute operations) between draw calls, but this has never been required by the specification. There is also no explicit barrier currently in the API that provides the guarantee that applications rely on without additional performance penalties.
New applications should avoid relying on this ordering until an appropriate barrier is added to the API.
Implementations where applications are performing this splitting are encouraged to continue supporting this guarantee until a suitable barrier is added to the API.
Existing applications relying on this ordering should expect that it will continue working on platforms where it currently does. Once a new extension adds support for a new barrier, developers are encouraged to adapt their applications to use this when available.
Valid Usage
- This command must not be recorded when transform feedback is active
- The current render pass
instance must not have been begun with
cmdBeginRendering - If
cmdBeginQuery* was called within a subpass of the render pass, the correspondingcmdEndQuery* must have been called subsequently within the same subpass - This command must not be recorded when per-tile execution model is enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
-
commandBuffermust be a primaryCommandBuffer
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 | Inside | Outside | VK_QUEUE_GRAPHICS_BIT | Action State Synchronization |
Conditional Rendering
vkCmdEndRenderPass is not affected by conditional rendering
See Also
Arguments
| :: MonadIO io | |
| => CommandBuffer |
|
| -> ("commandBuffers" ::: Vector CommandBuffer) |
|
| -> io () |
vkCmdExecuteCommands - Execute a secondary command buffer from a primary command buffer
Description
If any element of pCommandBuffers was not recorded with the
COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
flag, and it was recorded into any other primary command buffer which is
currently in the
executable or recording state,
that primary command buffer becomes
invalid.
If the
nestedCommandBuffer
feature is enabled it is valid usage for cmdExecuteCommands to also be
recorded to a
secondary command buffer.
Valid Usage
- Each element of
pCommandBuffersmust have been allocated with alevelofCOMMAND_BUFFER_LEVEL_SECONDARY
- Each element of
pCommandBuffersmust be in the pending or executable state - If any element of
pCommandBufferswas not recorded with theCOMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BITflag, it must not be in the pending state - If any element of
pCommandBufferswas not recorded with theCOMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BITflag, it must not have already been recorded tocommandBuffer - If any element of
pCommandBufferswas not recorded with theCOMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BITflag, it must not appear more than once inpCommandBuffers - Each element of
pCommandBuffersmust have been allocated from aCommandPoolthat was created for the same queue family as theCommandPoolfrom whichcommandBufferwas allocated - If this command is
called within a render pass instance, each element of
pCommandBuffersmust have been recorded with theCOMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT - If this command is
called within a render pass instance, and any element of
pCommandBufferswas recorded withCommandBufferInheritanceInfo::framebuffernot equal toNULL_HANDLE, thatFramebuffermust match theFramebufferused in the current render pass instance - If this command is called
within a render pass instance begun with
cmdBeginRenderPass, andcmdNextSubpasshas not been called in the current render pass instance, thecontentsparameter ofcmdBeginRenderPassmust have beenSUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, orSUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT - If this command is called
within a render pass instance begun with
cmdBeginRenderPass, andcmdNextSubpasshas been called in the current render pass instance, thecontentsparameter of the last call tocmdNextSubpassmust have beenSUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, orSUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHR - If this command is
called within a render pass instance begun with
cmdBeginRenderPass, each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceInfo::subpassset to the index of the subpass which the given command buffer will be executed in - If this command is
called within a render pass instance begun with
cmdBeginRenderPass, the render passes specified in thepBeginInfo->pInheritanceInfo->renderPassmembers of thebeginCommandBuffercommands used to begin recording each element ofpCommandBuffersmust be compatible with the current render pass - If this command is called
within a render pass instance that included
RenderPassTransformBeginInfoQCOMin thepNextchain ofRenderPassBeginInfo, then each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceRenderPassTransformInfoQCOMin thepNextchain ofCommandBufferBeginInfo - If this command is called
within a render pass instance that included
RenderPassTransformBeginInfoQCOMin thepNextchain ofRenderPassBeginInfo, then each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceRenderPassTransformInfoQCOM::transformidentical toRenderPassTransformBeginInfoQCOM::transform - If this command is called
within a render pass instance that included
RenderPassTransformBeginInfoQCOMin thepNextchain ofRenderPassBeginInfo, then each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceRenderPassTransformInfoQCOM::renderAreaidentical toRenderPassBeginInfo::renderArea - If
cmdExecuteCommandsis not being called within a render pass instance, each element ofpCommandBuffersmust not have been recorded with theCOMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT - If the
inheritedQueries
feature is not enabled,
commandBuffermust not have any queries active - If
commandBufferhas aQUERY_TYPE_OCCLUSIONquery active, then each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceInfo::occlusionQueryEnableset toTRUE - If
commandBufferhas aQUERY_TYPE_OCCLUSIONquery active, then each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceInfo::queryFlagshaving all bits set that are set for the query - If
commandBufferhas aQUERY_TYPE_PIPELINE_STATISTICSquery active, then each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceInfo::pipelineStatisticshaving all bits set that are set in theQueryPoolthe query uses - Each element of
pCommandBuffersmust not begin any query types that are active incommandBuffer -
commandBuffermust not have any queries other thanQUERY_TYPE_OCCLUSIONandQUERY_TYPE_PIPELINE_STATISTICSactive - If
commandBufferis a protected command buffer and protectedNoFault is not supported, each element ofpCommandBuffersmust be a protected command buffer - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported, each element ofpCommandBuffersmust be an unprotected command buffer - This command must not be recorded when transform feedback is active
- If this command is
called within a render pass instance and any recorded command in
commandBufferin the current subpass will write to an image subresource as an attachment, commands recorded in elements ofpCommandBuffersmust not read from the memory backing that image subresource in any other way - If this command is
called within a render pass instance and any recorded command in
commandBufferin the current subpass will read from an image subresource used as an attachment in any way other than as an attachment, commands recorded in elements ofpCommandBuffersmust not write to that image subresource as an attachment - If this command is
called within a render pass instance and any recorded command in a
given element of
pCommandBufferswill write to an image subresource as an attachment, commands recorded in elements ofpCommandBuffersat a higher index must not read from the memory backing that image subresource in any other way - If this command is
called within a render pass instance and any recorded command in a
given element of
pCommandBufferswill read from an image subresource used as an attachment in any way other than as an attachment, commands recorded in elements ofpCommandBuffersat a higher index must not write to that image subresource as an attachment - If
pCommandBufferscontains any suspended render pass instances, there must be no action or synchronization commands between that render pass instance and any render pass instance that resumes it - If
pCommandBufferscontains any suspended render pass instances, there must be no render pass instances between that render pass instance and any render pass instance that resumes it - If the
variableSampleLocations
limit is not supported, and any element of
pCommandBufferscontains any suspended render pass instances, where a graphics pipeline has been bound, any pipelines bound in the render pass instance that resumes it, or any subsequent render pass instances that resume from that one and so on, must use the same sample locations - If this command is called
within a render pass instance begun with
cmdBeginRendering, itsRenderingInfo::flagsparameter must have includedRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT - If this command is
called within a render pass instance begun with
cmdBeginRendering, the render passes specified in thepBeginInfo->pInheritanceInfo->renderPassmembers of thebeginCommandBuffercommands used to begin recording each element ofpCommandBuffersmust beNULL_HANDLE - If this command is called
within a render pass instance begun with
cmdBeginRendering, theflagsmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to theRenderingInfo::flagsparameter tocmdBeginRendering, excludingRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT - If this
command is called within a render pass instance begun with
cmdBeginRendering, thecolorAttachmentCountmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to theRenderingInfo::colorAttachmentCountparameter tocmdBeginRendering - If this command is
called within a render pass instance begun with
cmdBeginRendering, if theimageViewmember of an element of theRenderingInfo::pColorAttachmentsparameter tocmdBeginRenderingis notNULL_HANDLE, the corresponding element of thepColorAttachmentFormatsmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the format used to create that image view - If this command is
called within a render pass instance begun with
cmdBeginRendering, if theimageViewmember of an element of theRenderingInfo::pColorAttachmentsparameter tocmdBeginRenderingisNULL_HANDLE, the corresponding element of thepColorAttachmentFormatsmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust beFORMAT_UNDEFINED - If this command
is called within a render pass instance begun with
cmdBeginRendering, if theRenderingInfo::pDepthAttachment->imageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value of thedepthAttachmentFormatmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the format used to create that image view - If this command
is called within a render pass instance begun with
cmdBeginRendering, if theRenderingInfo::pStencilAttachment->imageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value of thestencilAttachmentFormatmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the format used to create that image view - If this command
is called within a render pass instance begun with
cmdBeginRenderingand theRenderingInfo::pDepthAttachment->imageViewparameter tocmdBeginRenderingwasNULL_HANDLE, the value of thedepthAttachmentFormatmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust beFORMAT_UNDEFINED - If this command
is called within a render pass instance begun with
cmdBeginRenderingand theRenderingInfo::pStencilAttachment->imageViewparameter tocmdBeginRenderingwasNULL_HANDLE, the value of thestencilAttachmentFormatmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRenderingand contains a custom resolve, then each element ofpCommandBuffersmust have been recorded with aCustomResolveCreateInfoEXTstruct chained to itsCommandBufferInheritanceInfo - If the current
render pass instance was begun with
cmdBeginRenderingand does not contain a custom resolve, then each element ofpCommandBuffersmust not have been recorded with aCustomResolveCreateInfoEXTstruct chained to itsCommandBufferInheritanceInfo - If the current
render pass instance was begun with
cmdBeginRenderingandcmdBeginCustomResolveEXThas been recorded in the render pass instance, then each element ofpCommandBuffersmust have been recorded withCustomResolveCreateInfoEXT::customResolveasTRUE - If the current
render pass instance was begun with
cmdBeginRenderingand contains a custom resolve, andcmdBeginCustomResolveEXThas not been recorded in the render pass instance, then each element ofpCommandBuffersmust have been recorded withCustomResolveCreateInfoEXT::customResolveasFALSE - If this
command is called within a render pass instance begun with
cmdBeginRenderingthat contains a custom resolve, thecolorAttachmentCountmember of theCustomResolveCreateInfoEXTstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to theRenderingInfo::colorAttachmentCountparameter tocmdBeginRendering - If this command
is called within a render pass instance begun with
cmdBeginRenderingthat contains a custom resolve, if theresolveImageViewmember of an element of theRenderingInfo::pColorAttachmentsparameter tocmdBeginRenderingis notNULL_HANDLE, the corresponding element of thepColorAttachmentFormatsmember of theCustomResolveCreateInfoEXTstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the format used to create that image view - If this command
is called within a render pass instance begun with
cmdBeginRenderingthat contains a custom resolve, if theresolveImageViewmember of an element of theRenderingInfo::pColorAttachmentsparameter tocmdBeginRenderingisNULL_HANDLE, the corresponding element of thepColorAttachmentFormatsmember of theCustomResolveCreateInfoEXTstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust beFORMAT_UNDEFINED - If this command
is called within a render pass instance begun with
cmdBeginRendering, if theRenderingInfo::pDepthAttachment->imageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value of thedepthAttachmentFormatmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the format used to create that image view - If this command
is called within a render pass instance begun with
cmdBeginRenderingthat contains a custom resolve, if theRenderingInfo::pStencilAttachment->resolveImageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value of thestencilAttachmentFormatmember of theCustomResolveCreateInfoEXTstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the format used to create that image view - If this command
is called within a render pass instance begun with
cmdBeginRenderingthat contains a custom resolve and theRenderingInfo::pDepthAttachment->resolveImageViewparameter tocmdBeginRenderingwasNULL_HANDLE, the value of thedepthAttachmentFormatmember of theCustomResolveCreateInfoEXTstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust beFORMAT_UNDEFINED - If this command
is called within a render pass instance begun with
cmdBeginRenderingthat contains a custom resolve and theRenderingInfo::pStencilAttachment->resolveImageViewparameter tocmdBeginRenderingwasNULL_HANDLE, the value of thestencilAttachmentFormatmember of theCustomResolveCreateInfoEXTstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust beFORMAT_UNDEFINED - If this command
is called within a render pass instance begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, and theresolveImageViewmember of an element of theRenderingInfo::pColorAttachmentsparameter tocmdBeginRenderingis notNULL_HANDLE, the value ofCommandBufferInheritanceRenderingInfo::rasterizationSamplesmust be equal to the sample count used to create thatresolveImageView - If this command
is called within a render pass instance begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, and theRenderingInfo::pDepthAttachment->resolveImageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value ofCommandBufferInheritanceRenderingInfo::rasterizationSamplesmust be equal to the sample count used to create that image view - If this command
is called within a render pass instance begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, and theRenderingInfo::pStencilAttachment->resolveImageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value ofCommandBufferInheritanceRenderingInfo::rasterizationSamplesmust be equal to the sample count used to create that image view - If this command is called
within a render pass instance begun with
cmdBeginRendering, theviewMaskmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to theRenderingInfo::viewMaskparameter tocmdBeginRendering - If this command is called
within a render pass instance begun with
cmdBeginRenderingand thepNextchain ofCommandBufferInheritanceInfoincludes aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, if theimageViewmember of an element of theRenderingInfo::pColorAttachmentsparameter tocmdBeginRenderingis notNULL_HANDLE, the corresponding element of thepColorAttachmentSamplesmember of theAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the sample count used to create that image view - If this command is called
within a render pass instance begun with
cmdBeginRenderingand thepNextchain ofCommandBufferInheritanceInfoincludes aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, if theRenderingInfo::pDepthAttachment->imageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember of theAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the sample count used to create that image view - If this command is called
within a render pass instance begun with
cmdBeginRenderingand thepNextchain ofCommandBufferInheritanceInfoincludes aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, if theRenderingInfo::pStencilAttachment->imageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember of theAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the sample count used to create that image view - If this command is called
within a render pass instance begun with
cmdBeginRendering, and thepNextchain ofCommandBufferInheritanceInfodoes not include aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, and if theimageViewmember of an element of theRenderingInfo::pColorAttachmentsparameter tocmdBeginRenderingis notNULL_HANDLE, the value ofCommandBufferInheritanceRenderingInfo::rasterizationSamplesmust be equal to the sample count used to create that image view - If this command is called
within a render pass instance begun with
cmdBeginRenderingand thepNextchain ofCommandBufferInheritanceInfodoes not include aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, and if theRenderingInfo::pDepthAttachment->imageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value ofCommandBufferInheritanceRenderingInfo::rasterizationSamplesmust be equal to the sample count used to create that image view - If this command is called
within a render pass instance begun with
cmdBeginRenderingand thepNextchain ofCommandBufferInheritanceInfodoes not include aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, and if theRenderingInfo::pStencilAttachment->imageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value ofCommandBufferInheritanceRenderingInfo::rasterizationSamplesmust be equal to the sample count used to create that image view - If this command is called
within a render pass instance begun with
cmdBeginRendering, with any color attachment using a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, thepNextchain ofCommandBufferInheritanceInfoused to create each element ofpCommandBuffersmust include aExternalFormatANDROIDstructure with anexternalFormatmatching that used to create the resolve attachment in the render pass - If this command is called
within a render pass instance begun with
cmdBeginRenderingwith any color attachment using a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and thepNextchain ofCommandBufferInheritanceInfodoes not include aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, the value ofCommandBufferInheritanceRenderingInfo::rasterizationSamplesmust beSAMPLE_COUNT_1_BIT -
commandBuffermust not be a secondary command buffer unless the nestedCommandBuffer feature is enabled - If the
nestedCommandBuffer
feature is enabled, and
commandBufferis a secondary command buffer, the command buffer nesting level of each element ofpCommandBuffersmust be less than maxCommandBufferNestingLevel - If
the
nestedCommandBufferRendering
feature is not enabled, and
commandBufferis a secondary command buffer,commandBuffermust not have been recorded withCOMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT -
If the
nestedCommandBufferSimultaneousUse
feature is not enabled, and
commandBufferis a secondary command buffer, each element ofpCommandBuffersmust not have been recorded withCOMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT - If this command is
called within a render pass instance begun with
cmdBeginRendering, the color attachment mapping state specified byRenderingAttachmentLocationInfoin the inheritance info of each element ofpCommandBuffersand in the current state ofcommandBuffermust match - If this command is
called within a render pass instance begun with
cmdBeginRendering, the input attachment mapping state specified byRenderingInputAttachmentIndexInfoin the inheritance info of each element ofpCommandBuffersand in the current state ofcommandBuffermust match - If this command is called
within a render pass instance, the size of
memorymember of theTileMemoryBindInfoQCOMstructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to the active bound bound tile memory object incommandBuffer - If this command is
being recorded within a render pass instance with
tile shading
enabled, all elements of
pCommandBuffersmust have been recorded withTILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOMincluded inRenderPassTileShadingCreateInfoQCOM::flags - If the
per-tile execution model
is enabled, all elements of
pCommandBuffersmust have been recorded withTILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOMincluded inRenderPassTileShadingCreateInfoQCOM::flags - If this command is
being recorded within a render pass instance, the
tileApronSizeused to create the render pass instance must equal theRenderPassTileShadingCreateInfoQCOM::tileApronSizeused to record all elements ofpCommandBuffers - If any element of
pCommandBufferswas recorded withTILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOMincluded inRenderPassTileShadingCreateInfoQCOM::flags, this command must be recorded in a render pass that has tile shading enabled - If any element of
pCommandBufferswas recorded withTILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOMincluded inRenderPassTileShadingCreateInfoQCOM::flags, per-tile execution model must be enabled - If this command is
not being recorded into a render pass instance, the
RenderPassTileShadingCreateInfoQCOM::tileApronSizethat was recorded into all elements ofpCommandBuffersmust equal(0,0) - If there is a
sampler descriptor heap bound to
commandBuffer, each element ofpCommandBuffersmust have been recorded with a value ofCommandBufferInheritanceDescriptorHeapInfoEXT::pSamplerHeapBindInfothat is eitherNULLor a pointer to a bind info that is identical to that set via the last call tocmdBindSamplerHeapEXT - If there is a
resource descriptor heap bound to
commandBuffer, each element ofpCommandBuffersmust have been recorded with a value ofCommandBufferInheritanceDescriptorHeapInfoEXT::pResourceHeapBindInfothat is eitherNULLor a pointer to a bind info that is identical to that set via the last call tocmdBindResourceHeapEXT - If there is no
sampler descriptor heap bound to
commandBuffer, each element ofpCommandBuffersmust have been recorded with a value ofCommandBufferInheritanceDescriptorHeapInfoEXT::pSamplerHeapBindInfoset toNULL - If there is no
resource descriptor heap bound to
commandBuffer, each element ofpCommandBuffersmust have been recorded with a value ofCommandBufferInheritanceDescriptorHeapInfoEXT::pResourceHeapBindInfoset toNULL
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
pCommandBuffersmust be a valid pointer to an array ofcommandBufferCountvalidCommandBufferhandles -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must supportQUEUE_COMPUTE_BIT,QUEUE_GRAPHICS_BIT, orQUEUE_TRANSFER_BIToperations - This command must only be called outside of a video coding scope
-
commandBufferCountmust be greater than0 - Both of
commandBuffer, and the elements ofpCommandBuffersmust 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 | VK_QUEUE_COMPUTE_BIT VK_QUEUE_GRAPHICS_BIT VK_QUEUE_TRANSFER_BIT | Indirection |
Conditional Rendering
vkCmdExecuteCommands is not affected by conditional rendering
See Also
VkClearRect - Structure specifying a clear rectangle
Description
The layers [baseArrayLayer, baseArrayLayer + layerCount) counting
from the base layer of the attachment image view are cleared.
See Also
Constructors
| ClearRect | |
Fields
| |
Instances
| Storable ClearRect Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
| Show ClearRect Source # | |
| FromCStruct ClearRect Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
| ToCStruct ClearRect Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
| Zero ClearRect Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
data ImageSubresourceLayers Source #
VkImageSubresourceLayers - Structure specifying an image subresource layers
Valid Usage
- If
aspectMaskcontainsIMAGE_ASPECT_COLOR_BIT, it must not contain either ofIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT
-
aspectMaskmust not containIMAGE_ASPECT_METADATA_BIT -
aspectMaskmust not includeVK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXTfor any index i - If the
maintenance5
feature is not enabled,
layerCountmust not beREMAINING_ARRAY_LAYERS - If
layerCountis notREMAINING_ARRAY_LAYERS, it must be greater than 0
Valid Usage (Implicit)
-
aspectMaskmust be a valid combination ofImageAspectFlagBitsvalues
See Also
VK_VERSION_1_0,
BufferImageCopy,
BufferImageCopy2,
CopyMemoryToImageIndirectCommandKHR,
CopyMemoryToImageIndirectInfoKHR,
ImageAspectFlags, ImageBlit,
ImageBlit2,
ImageCopy,
ImageCopy2,
ImageResolve,
ImageResolve2,
PromotedStreamingTransfers.ImageToMemoryCopy',
PromotedStreamingTransfers.MemoryToImageCopy',
cmdCopyMemoryToImageIndirectNV
Constructors
| ImageSubresourceLayers | |
Fields
| |
Instances
data BufferCopy Source #
VkBufferCopy - Structure specifying a buffer copy operation
Valid Usage
See Also
Constructors
| BufferCopy | |
Fields
| |
Instances
VkImageCopy - Structure specifying an image copy operation
Valid Usage
- If the
VK_KHR_sampler_ycbcr_conversion
extension is not enabled, and
PhysicalDeviceProperties::apiVersionis less than Vulkan 1.1, theaspectMaskmember ofsrcSubresourceanddstSubresourcemust match
- If the
VK_KHR_maintenance1
extension is not enabled, and
PhysicalDeviceProperties::apiVersionis less than Vulkan 1.1, thelayerCountmember ofsrcSubresourceanddstSubresourcemust match -
extent.widthmust not be 0 -
extent.heightmust not be 0 -
extent.depthmust not be 0
Valid Usage (Implicit)
-
srcSubresourcemust be a validImageSubresourceLayersstructure
-
dstSubresourcemust be a validImageSubresourceLayersstructure
See Also
VK_VERSION_1_0,
Extent3D, ImageSubresourceLayers,
Offset3D, cmdCopyImage
Constructors
| ImageCopy | |
Fields
| |
Instances
| Storable ImageCopy Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
| Show ImageCopy Source # | |
| FromCStruct ImageCopy Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
| ToCStruct ImageCopy Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
| Zero ImageCopy Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
VkImageBlit - Structure specifying an image blit operation
Description
For each element of the pRegions array, a blit operation is performed
for the specified source and destination regions.
Valid Usage
- If neither of the
layerCountmembers ofsrcSubresourceordstSubresourceareREMAINING_ARRAY_LAYERS, thelayerCountmembers ofsrcSubresourceordstSubresourcemust match - If one of the
layerCountmembers ofsrcSubresourceordstSubresourceisREMAINING_ARRAY_LAYERS, the other member must be eitherREMAINING_ARRAY_LAYERSor equal to thearrayLayersmember of theImageCreateInfoused to create the image minusbaseArrayLayer
Valid Usage (Implicit)
-
srcSubresourcemust be a validImageSubresourceLayersstructure
-
dstSubresourcemust be a validImageSubresourceLayersstructure
See Also
VK_VERSION_1_0,
ImageSubresourceLayers, Offset3D,
cmdBlitImage
Constructors
| ImageBlit | |
Fields
| |
Instances
| Storable ImageBlit Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
| Show ImageBlit Source # | |
| FromCStruct ImageBlit Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
| ToCStruct ImageBlit Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
| Zero ImageBlit Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding | |
data BufferImageCopy Source #
VkBufferImageCopy - Structure specifying a buffer image copy operation
Valid Usage
-
bufferImageHeightmust be0, or greater than or equal to theheightmember ofimageExtent - The
aspectMaskmember ofimageSubresourcemust only have a single bit set -
imageExtent.widthmust not be 0 -
imageExtent.heightmust not be 0 -
imageExtent.depthmust not be 0
Valid Usage (Implicit)
-
imageSubresourcemust be a validImageSubresourceLayersstructure
See Also
VK_VERSION_1_0,
DeviceSize,
Extent3D, ImageSubresourceLayers,
Offset3D, cmdCopyBufferToImage,
cmdCopyImageToBuffer
Constructors
| BufferImageCopy | |
Fields
| |
Instances
data ImageResolve Source #
VkImageResolve - Structure specifying an image resolve operation
Valid Usage
- The
aspectMaskmember ofsrcSubresourceanddstSubresourcemust only containIMAGE_ASPECT_COLOR_BIT
- If neither of the
layerCountmembers ofsrcSubresourceordstSubresourceareREMAINING_ARRAY_LAYERS, thelayerCountmember ofsrcSubresourceanddstSubresourcemust match - If one of the
layerCountmembers ofsrcSubresourceordstSubresourceisREMAINING_ARRAY_LAYERS, the other member must be eitherREMAINING_ARRAY_LAYERSor equal to thearrayLayersmember of theImageCreateInfoused to create the image minusbaseArrayLayer
Valid Usage (Implicit)
-
srcSubresourcemust be a validImageSubresourceLayersstructure
-
dstSubresourcemust be a validImageSubresourceLayersstructure
See Also
VK_VERSION_1_0,
Extent3D, ImageSubresourceLayers,
Offset3D, cmdResolveImage
Constructors
| ImageResolve | |
Fields
| |
Instances
data RenderPassBeginInfo (es :: [Type]) Source #
VkRenderPassBeginInfo - Structure specifying render pass begin information
Description
renderArea is the render area that is affected by the render pass
instance. The effects of attachment load, store, and multisample resolve
operations are restricted to the pixels whose x and y coordinates fall
within the render area on all attachments. The render area extends to
all layers of framebuffer. The application must ensure (using
scissor if necessary) that all rendering is contained within the render
area. The render area, after any transform specified by
RenderPassTransformBeginInfoQCOM::transform
is applied, must be contained within the framebuffer dimensions.
If
render pass transform
is enabled, then renderArea must equal the framebuffer
pre-transformed dimensions. After renderArea has been transformed by
RenderPassTransformBeginInfoQCOM::transform,
the resulting render area must be equal to the framebuffer dimensions.
If multiview is enabled in renderPass, and
multiviewPerViewRenderAreas
feature is enabled, and there is an instance of
MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM
included in the pNext chain with perViewRenderAreaCount not equal to
0, then the elements of
MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM::pPerViewRenderAreas
override renderArea and define a render area for each view. In this
case, renderArea must be an area at least as large as the union of
all the per-view render areas.
If the
subpassShading
feature is enabled, then renderArea must equal the framebuffer
dimensions.
There may be a performance cost for using a render area smaller than the framebuffer, unless it matches the render area granularity for the render pass.
Valid Usage
-
clearValueCountmust be greater than the largest attachment index inrenderPassspecifying aloadOp(orstencilLoadOp, if the attachment has a depth/stencil format) ofATTACHMENT_LOAD_OP_CLEAR
- If
clearValueCountis not0,pClearValuesmust be a valid pointer to an array ofclearValueCountClearValueunions -
renderPassmust be compatible with therenderPassmember of theFramebufferCreateInfostructure specified when creatingframebuffer - If the
pNextchain does not containDeviceGroupRenderPassBeginInfoor itsdeviceRenderAreaCountmember is equal to 0,renderArea.extent.widthmust be greater than 0 - If the
pNextchain does not containDeviceGroupRenderPassBeginInfoor itsdeviceRenderAreaCountmember is equal to 0,renderArea.extent.heightmust be greater than 0 - If the
pNextchain does not containDeviceGroupRenderPassBeginInfoor itsdeviceRenderAreaCountmember is equal to 0,renderArea.offset.xmust be greater than or equal to 0 - If the
pNextchain does not containDeviceGroupRenderPassBeginInfoor itsdeviceRenderAreaCountmember is equal to 0,renderArea.offset.ymust be greater than or equal to 0 - If the
pNextchain does not containDeviceGroupRenderPassBeginInfoor itsdeviceRenderAreaCountmember is equal to 0,renderArea.offset.x+renderArea.extent.widthmust be less than or equal toFramebufferCreateInfo::widththeframebufferwas created with - If the
pNextchain does not containDeviceGroupRenderPassBeginInfoor itsdeviceRenderAreaCountmember is equal to 0,renderArea.offset.y+renderArea.extent.heightmust be less than or equal toFramebufferCreateInfo::heighttheframebufferwas created with - If the
pNextchain containsDeviceGroupRenderPassBeginInfo,offset.x+extent.widthof each element ofpDeviceRenderAreasmust be less than or equal toFramebufferCreateInfo::widththeframebufferwas created with - If the
pNextchain containsDeviceGroupRenderPassBeginInfo,offset.y+extent.heightof each element ofpDeviceRenderAreasmust be less than or equal toFramebufferCreateInfo::heighttheframebufferwas created with - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that did not includeFRAMEBUFFER_CREATE_IMAGELESS_BIT, and thepNextchain includes aRenderPassAttachmentBeginInfostructure, itsattachmentCountmust be zero - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, theattachmentCountof aRenderPassAttachmentBeginInfostructure included in thepNextchain must be equal to the value ofFramebufferAttachmentsCreateInfo::attachmentImageInfoCountused to createframebuffer - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must have been created on the sameDeviceasframebufferandrenderPass - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewof an image created with a value ofImageCreateInfo::flagsequal to theflagsmember of the corresponding element ofFramebufferAttachmentsCreateInfo::pAttachmentImageInfosused to createframebuffer - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, eachpAttachmentsmember ofRenderPassAttachmentBeginInfothat is used as a resolve attachment byrenderPassmust not be bound to aDeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewwith an inherited usage equal to theusagemember of the corresponding element ofFramebufferAttachmentsCreateInfo::pAttachmentImageInfosused to createframebuffer - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewwith a width equal to thewidthmember of the corresponding element ofFramebufferAttachmentsCreateInfo::pAttachmentImageInfosused to createframebuffer - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewwith a height equal to theheightmember of the corresponding element ofFramebufferAttachmentsCreateInfo::pAttachmentImageInfosused to createframebuffer - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewof an image created with a value ofImageViewCreateInfo::subresourceRange.layerCountequal to thelayerCountmember of the corresponding element ofFramebufferAttachmentsCreateInfo::pAttachmentImageInfosused to createframebuffer - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewof an image created with a value ofImageFormatListCreateInfo::viewFormatCountequal to theviewFormatCountmember of the corresponding element ofFramebufferAttachmentsCreateInfo::pAttachmentImageInfosused to createframebuffer - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewof an image created with a set of elements inImageFormatListCreateInfo::pViewFormatsequal to the set of elements in thepViewFormatsmember of the corresponding element ofFramebufferAttachmentsCreateInfo::pAttachmentImageInfosused to createframebuffer - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewof an image created with a value ofImageViewCreateInfo::formatequal to the corresponding value ofAttachmentDescription::formatinrenderPass - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, and the nullColorAttachmentWithExternalFormatResolve isFALSE, the format of the color attachment for each subpass that includes an external format image as a resolve attachment must have a format equal to the value ofAndroidHardwareBufferFormatResolvePropertiesANDROID::colorAttachmentFormatas returned by a call togetAndroidHardwareBufferPropertiesANDROIDfor the Android hardware buffer that was used to create the image view use as its resolve attachment - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewof an image created with a value ofExternalFormatANDROID::externalFormatequal toExternalFormatANDROID::externalFormatin thepNextchain of the correspondingAttachmentDescription2structure used to createrenderPass - If
framebufferwas created with aFramebufferCreateInfo::flagsvalue that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT, each element of thepAttachmentsmember of aRenderPassAttachmentBeginInfostructure included in thepNextchain must be aImageViewof an image created with a value ofImageCreateInfo::samplesequal to the corresponding value ofAttachmentDescription::samplesinrenderPass, orSAMPLE_COUNT_1_BITifrenderPasswas created withMultisampledRenderToSingleSampledInfoEXTstructure in thepNextchain withmultisampledRenderToSingleSampledEnableequal toTRUE - If the
pNextchain includesRenderPassTransformBeginInfoQCOM,renderArea.offsetmust equal (0,0) - If the
pNextchain includesRenderPassTransformBeginInfoQCOM,renderArea.extenttransformed byRenderPassTransformBeginInfoQCOM::transformmust equal theframebufferdimensions - If the
perViewRenderAreaCountmember of aMultiviewPerViewRenderAreasRenderPassBeginInfoQCOMstructure included in thepNextchain is not0, then the multiviewPerViewRenderAreas feature must be enabled - If the
perViewRenderAreaCountmember of aMultiviewPerViewRenderAreasRenderPassBeginInfoQCOMstructure included in thepNextchain is not0, thenrenderAreamust specify a render area that includes the union of all per view render areas - If the
pNextchain contains aRenderPassStripeBeginInfoARMstructure, the union of stripe areas defined by the elements ofRenderPassStripeBeginInfoARM::pStripeInfosmust cover therenderArea
Valid Usage (Implicit)
-
sTypemust beSTRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
- Each
pNextmember of any structure (including this one) in thepNextchain must be eitherNULLor a pointer to a valid instance ofDeviceGroupRenderPassBeginInfo,MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM,RenderPassAttachmentBeginInfo, VkRenderPassPerformanceCountersByRegionBeginInfoARM,RenderPassSampleLocationsBeginInfoEXT,RenderPassStripeBeginInfoARM, orRenderPassTransformBeginInfoQCOM - The
sTypevalue of each structure in thepNextchain must be unique -
renderPassmust be a validRenderPasshandle -
framebuffermust be a validFramebufferhandle - Both of
framebuffer, andrenderPassmust have been created, allocated, or retrieved from the sameDevice
See Also
VK_VERSION_1_0,
ClearValue, Framebuffer,
Rect2D,
RenderPass,
StructureType, cmdBeginRenderPass,
cmdBeginRenderPass2,
cmdBeginRenderPass2
Constructors
| RenderPassBeginInfo | |
Fields
| |
Instances
data ClearDepthStencilValue Source #
VkClearDepthStencilValue - Structure specifying a clear depth stencil value
Valid Usage
- Unless the
VK_EXT_depth_range_unrestrictedextension is enableddepthmust be between0.0and1.0, inclusive
See Also
Constructors
| ClearDepthStencilValue | |
Fields
| |
Instances
data ClearAttachment Source #
VkClearAttachment - Structure specifying a clear attachment
Valid Usage
- If
aspectMaskincludesIMAGE_ASPECT_COLOR_BIT, it must not includeIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT
-
aspectMaskmust not includeIMAGE_ASPECT_METADATA_BIT -
aspectMaskmust not includeVK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXTfor any index i
Valid Usage (Implicit)
-
aspectMaskmust be a valid combination ofImageAspectFlagBitsvalues
See Also
VK_VERSION_1_0,
ClearValue,
ImageAspectFlags,
cmdClearAttachments
Constructors
| ClearAttachment | |
Fields
| |
Instances
| Show ClearAttachment Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding Methods showsPrec :: Int -> ClearAttachment -> ShowS # show :: ClearAttachment -> String # showList :: [ClearAttachment] -> ShowS # | |
| ToCStruct ClearAttachment Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding Methods withCStruct :: ClearAttachment -> (Ptr ClearAttachment -> IO b) -> IO b Source # pokeCStruct :: Ptr ClearAttachment -> ClearAttachment -> IO b -> IO b Source # withZeroCStruct :: (Ptr ClearAttachment -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr ClearAttachment -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero ClearAttachment Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding Methods | |
data ClearColorValue Source #
Constructors
| Float32 Float Float Float Float | |
| Int32 Int32 Int32 Int32 Int32 | |
| Uint32 Word32 Word32 Word32 Word32 |
Instances
| Show ClearColorValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding Methods showsPrec :: Int -> ClearColorValue -> ShowS # show :: ClearColorValue -> String # showList :: [ClearColorValue] -> ShowS # | |
| ToCStruct ClearColorValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding Methods withCStruct :: ClearColorValue -> (Ptr ClearColorValue -> IO b) -> IO b Source # pokeCStruct :: Ptr ClearColorValue -> ClearColorValue -> IO b -> IO b Source # withZeroCStruct :: (Ptr ClearColorValue -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr ClearColorValue -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero ClearColorValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding Methods | |
data ClearValue Source #
Constructors
| Color ClearColorValue | |
| DepthStencil ClearDepthStencilValue |
Instances
| Show ClearValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding Methods showsPrec :: Int -> ClearValue -> ShowS # show :: ClearValue -> String # showList :: [ClearValue] -> ShowS # | |
| ToCStruct ClearValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding Methods withCStruct :: ClearValue -> (Ptr ClearValue -> IO b) -> IO b Source # pokeCStruct :: Ptr ClearValue -> ClearValue -> IO b -> IO b Source # withZeroCStruct :: (Ptr ClearValue -> IO b) -> IO b Source # pokeZeroCStruct :: Ptr ClearValue -> IO b -> IO b Source # cStructSize :: Int Source # | |
| Zero ClearValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding Methods zero :: ClearValue Source # | |
VkIndexType - Type of index buffer indices
Description
INDEX_TYPE_UINT16specifies that indices are 16-bit unsigned integer values.
INDEX_TYPE_UINT32specifies that indices are 32-bit unsigned integer values.INDEX_TYPE_NONE_KHRspecifies that no indices are provided.INDEX_TYPE_UINT8specifies that indices are 8-bit unsigned integer values.
See Also
VK_VERSION_1_0,
AccelerationStructureGeometryLinearSweptSpheresDataNV,
AccelerationStructureGeometrySpheresDataNV,
AccelerationStructureGeometryTrianglesDataKHR,
AccelerationStructureTrianglesDisplacementMicromapNV,
AccelerationStructureTrianglesOpacityMicromapEXT,
BindIndexBufferIndirectCommandEXT,
BindIndexBufferIndirectCommandNV,
GeometryTrianglesNV,
IndirectCommandsLayoutTokenNV,
cmdBindIndexBuffer,
cmdBindIndexBuffer2,
cmdBindIndexBuffer2
Bundled Patterns
| pattern INDEX_TYPE_NONE_KHR :: IndexType | |
| pattern INDEX_TYPE_UINT16 :: IndexType | |
| pattern INDEX_TYPE_UINT32 :: IndexType | |
| pattern INDEX_TYPE_UINT8 :: IndexType |
Instances
| Eq IndexType Source # | |
| Ord IndexType Source # | |
| Storable IndexType Source # | |
Defined in Vulkan.Core10.Enums.IndexType | |
| Read IndexType Source # | |
| Show IndexType Source # | |
| Zero IndexType Source # | |
Defined in Vulkan.Core10.Enums.IndexType | |
newtype SubpassContents Source #
VkSubpassContents - Specify how commands in the first subpass of a render pass are provided
Description
SUBPASS_CONTENTS_INLINEspecifies that the contents of the subpass will be recorded inline in the primary command buffer, and secondary command buffers must not be executed within the subpass.
SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERSspecifies that the contents are recorded in secondary command buffers that will be called from the primary command buffer, andcmdExecuteCommandsis the only valid command in the command buffer untilcmdNextSubpassorcmdEndRenderPass.SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_KHRspecifies that the contents of the subpass can be recorded both inline and in secondary command buffers executed from this command buffer withcmdExecuteCommands.
See Also
VK_VERSION_1_0,
SubpassBeginInfo,
cmdBeginRenderPass,
cmdNextSubpass
Constructors
| SubpassContents Int32 |
Bundled Patterns
Instances
newtype StencilFaceFlagBits Source #
VkStencilFaceFlagBits - Bitmask specifying sets of stencil state for which to update the compare mask
Description
STENCIL_FACE_FRONT_BITspecifies that only the front set of stencil state is updated.
STENCIL_FACE_BACK_BITspecifies that only the back set of stencil state is updated.STENCIL_FACE_FRONT_AND_BACKis the combination ofSTENCIL_FACE_FRONT_BITandSTENCIL_FACE_BACK_BIT, and specifies that both sets of stencil state are updated.
See Also
Constructors
| StencilFaceFlagBits Flags |
Bundled Patterns
| pattern STENCIL_FACE_BACK_BIT :: StencilFaceFlagBits | |
| pattern STENCIL_FACE_FRONT_AND_BACK :: StencilFaceFlagBits | |
| pattern STENCIL_FACE_FRONT_BIT :: StencilFaceFlagBits |