| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Vulkan.Core10.CommandBufferBuilding
Synopsis
- cmdBindPipeline :: forall io. MonadIO io => CommandBuffer -> PipelineBindPoint -> Pipeline -> io ()
- cmdSetViewport :: forall io. MonadIO io => CommandBuffer -> ("firstViewport" ::: Word32) -> ("viewports" ::: Vector Viewport) -> io ()
- cmdSetScissor :: forall io. MonadIO io => CommandBuffer -> ("firstScissor" ::: Word32) -> ("scissors" ::: Vector Rect2D) -> io ()
- cmdSetLineWidth :: forall io. MonadIO io => CommandBuffer -> ("lineWidth" ::: Float) -> io ()
- cmdSetDepthBias :: forall io. MonadIO io => CommandBuffer -> ("depthBiasConstantFactor" ::: Float) -> ("depthBiasClamp" ::: Float) -> ("depthBiasSlopeFactor" ::: Float) -> io ()
- cmdSetBlendConstants :: forall io. MonadIO io => CommandBuffer -> ("blendConstants" ::: (Float, Float, Float, Float)) -> io ()
- cmdSetDepthBounds :: forall io. MonadIO io => CommandBuffer -> ("minDepthBounds" ::: Float) -> ("maxDepthBounds" ::: Float) -> io ()
- cmdSetStencilCompareMask :: forall io. MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("compareMask" ::: Word32) -> io ()
- cmdSetStencilWriteMask :: forall io. MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("writeMask" ::: Word32) -> io ()
- cmdSetStencilReference :: forall io. MonadIO io => CommandBuffer -> ("faceMask" ::: StencilFaceFlags) -> ("reference" ::: Word32) -> io ()
- cmdBindDescriptorSets :: forall io. MonadIO io => CommandBuffer -> PipelineBindPoint -> PipelineLayout -> ("firstSet" ::: Word32) -> ("descriptorSets" ::: Vector DescriptorSet) -> ("dynamicOffsets" ::: Vector Word32) -> io ()
- cmdBindIndexBuffer :: forall io. MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> IndexType -> io ()
- cmdBindVertexBuffers :: forall io. MonadIO io => CommandBuffer -> ("firstBinding" ::: Word32) -> ("buffers" ::: Vector Buffer) -> ("offsets" ::: Vector DeviceSize) -> io ()
- cmdDraw :: forall io. MonadIO io => CommandBuffer -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> io ()
- cmdDrawIndexed :: forall io. MonadIO io => CommandBuffer -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> io ()
- cmdDrawIndirect :: forall io. MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
- cmdDrawIndexedIndirect :: forall io. MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
- cmdDispatch :: forall io. MonadIO io => CommandBuffer -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> io ()
- cmdDispatchIndirect :: forall io. MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> io ()
- cmdCopyBuffer :: forall io. MonadIO io => CommandBuffer -> ("srcBuffer" ::: Buffer) -> ("dstBuffer" ::: Buffer) -> ("regions" ::: Vector BufferCopy) -> io ()
- cmdCopyImage :: forall io. MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageCopy) -> io ()
- cmdBlitImage :: forall io. MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageBlit) -> Filter -> io ()
- cmdCopyBufferToImage :: forall io. MonadIO io => CommandBuffer -> ("srcBuffer" ::: Buffer) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector BufferImageCopy) -> io ()
- cmdCopyImageToBuffer :: forall io. MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstBuffer" ::: Buffer) -> ("regions" ::: Vector BufferImageCopy) -> io ()
- cmdUpdateBuffer :: forall io. MonadIO io => CommandBuffer -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("dataSize" ::: DeviceSize) -> ("data" ::: Ptr ()) -> io ()
- cmdFillBuffer :: forall io. MonadIO io => CommandBuffer -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> DeviceSize -> ("data" ::: Word32) -> io ()
- cmdClearColorImage :: forall io. MonadIO io => CommandBuffer -> Image -> ImageLayout -> ClearColorValue -> ("ranges" ::: Vector ImageSubresourceRange) -> io ()
- cmdClearDepthStencilImage :: forall io. MonadIO io => CommandBuffer -> Image -> ImageLayout -> ClearDepthStencilValue -> ("ranges" ::: Vector ImageSubresourceRange) -> io ()
- cmdClearAttachments :: forall io. MonadIO io => CommandBuffer -> ("attachments" ::: Vector ClearAttachment) -> ("rects" ::: Vector ClearRect) -> io ()
- cmdResolveImage :: forall io. MonadIO io => CommandBuffer -> ("srcImage" ::: Image) -> ("srcImageLayout" ::: ImageLayout) -> ("dstImage" ::: Image) -> ("dstImageLayout" ::: ImageLayout) -> ("regions" ::: Vector ImageResolve) -> io ()
- cmdSetEvent :: forall io. MonadIO io => CommandBuffer -> Event -> ("stageMask" ::: PipelineStageFlags) -> io ()
- cmdResetEvent :: forall io. MonadIO io => CommandBuffer -> Event -> ("stageMask" ::: PipelineStageFlags) -> io ()
- cmdWaitEvents :: forall io. MonadIO io => CommandBuffer -> ("events" ::: Vector Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector (SomeStruct BufferMemoryBarrier)) -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) -> io ()
- cmdWaitEventsSafe :: forall io. MonadIO io => CommandBuffer -> ("events" ::: Vector Event) -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector (SomeStruct BufferMemoryBarrier)) -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) -> io ()
- cmdPipelineBarrier :: forall io. MonadIO io => CommandBuffer -> ("srcStageMask" ::: PipelineStageFlags) -> ("dstStageMask" ::: PipelineStageFlags) -> DependencyFlags -> ("memoryBarriers" ::: Vector MemoryBarrier) -> ("bufferMemoryBarriers" ::: Vector (SomeStruct BufferMemoryBarrier)) -> ("imageMemoryBarriers" ::: Vector (SomeStruct ImageMemoryBarrier)) -> io ()
- cmdBeginQuery :: forall io. MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> QueryControlFlags -> io ()
- cmdUseQuery :: forall io r. MonadIO io => CommandBuffer -> QueryPool -> Word32 -> QueryControlFlags -> io r -> io r
- cmdEndQuery :: forall io. MonadIO io => CommandBuffer -> QueryPool -> ("query" ::: Word32) -> io ()
- cmdResetQueryPool :: forall io. MonadIO io => CommandBuffer -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> io ()
- cmdWriteTimestamp :: forall io. MonadIO io => CommandBuffer -> PipelineStageFlagBits -> QueryPool -> ("query" ::: Word32) -> io ()
- cmdCopyQueryPoolResults :: forall io. MonadIO io => CommandBuffer -> QueryPool -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: Buffer) -> ("dstOffset" ::: DeviceSize) -> ("stride" ::: DeviceSize) -> QueryResultFlags -> io ()
- cmdPushConstants :: forall io. MonadIO io => CommandBuffer -> PipelineLayout -> ShaderStageFlags -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("values" ::: Ptr ()) -> io ()
- cmdBeginRenderPass :: forall a io. (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io ()
- cmdUseRenderPass :: forall a io r. (Extendss RenderPassBeginInfo a, PokeChain a, MonadIO io) => CommandBuffer -> RenderPassBeginInfo a -> SubpassContents -> io r -> io r
- cmdNextSubpass :: forall io. MonadIO io => CommandBuffer -> SubpassContents -> io ()
- cmdEndRenderPass :: forall io. MonadIO io => CommandBuffer -> io ()
- cmdExecuteCommands :: forall io. 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_UINT16 :: IndexType
- pattern INDEX_TYPE_UINT32 :: IndexType
- pattern INDEX_TYPE_UINT8_EXT :: IndexType
- pattern INDEX_TYPE_NONE_KHR :: IndexType
- newtype SubpassContents where
- newtype StencilFaceFlagBits where
- type StencilFaceFlags = StencilFaceFlagBits
Documentation
Arguments
| :: forall io. 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 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_EXT - If the
pipelineProtectedAccess
feature is enabled, and
commandBufferis not a protected command buffer,pipelinemust have been created withoutPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT -
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_GRAPHICS,pipelinemust have been created withoutPIPELINE_CREATE_LIBRARY_BIT_KHR
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 support graphics, or compute operations - 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 | Graphics Compute | State |
See Also
Arguments
| :: forall io. 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 support graphics operations - 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 | Graphics | State |
See Also
Arguments
| :: forall io. 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 support graphics operations - 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 | Graphics | State |
See Also
Arguments
| :: forall io. 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 support graphics operations - 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 | Graphics | State |
See Also
Arguments
| :: forall io. 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 support graphics operations - 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 | Graphics | State |
See Also
Arguments
| :: forall io. 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 support graphics operations - 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 | Graphics | State |
See Also
Arguments
| :: forall io. 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
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Both | Outside | Graphics | State |
See Also
cmdSetStencilCompareMask Source #
Arguments
| :: forall io. 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 support graphics operations - 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 | Graphics | State |
See Also
cmdSetStencilWriteMask Source #
Arguments
| :: forall io. 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 support graphics operations - 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 | Graphics | State |
See Also
cmdSetStencilReference Source #
Arguments
| :: forall io. 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 support graphics operations - 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 | Graphics | State |
See Also
cmdBindDescriptorSets Source #
Arguments
| :: forall io. 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.
If a pipeline accesses a descriptor either statically or dynamically
depending on the
DescriptorBindingFlagBits,
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.
Note
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
- Each element of
pDescriptorSetsmust 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 -
pipelineBindPointmust be supported by thecommandBuffer’s parentCommandPool’s queue family - 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
graphicsPipelineLibrary
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
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 support graphics, or compute operations - 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 | Graphics Compute | State |
See Also
VK_VERSION_1_0,
CommandBuffer,
DescriptorSet,
PipelineBindPoint,
PipelineLayout
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> Buffer |
|
| -> ("offset" ::: DeviceSize) |
|
| -> IndexType |
|
| -> io () |
vkCmdBindIndexBuffer - Bind an index buffer to a command buffer
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_BITflag - 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_EXT, the indexTypeUint8 feature must be enabled
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
buffermust be a validBufferhandle -
indexTypemust be a validIndexTypevalue -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called outside of a video coding scope
- 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 | Graphics | State |
See Also
VK_VERSION_1_0,
Buffer, CommandBuffer,
DeviceSize,
IndexType
Arguments
| :: forall io. 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_BITflag - 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 support graphics operations - This command must only be called outside of a video coding scope
-
bindingCountmust be greater than0 - Both of
commandBuffer, and the elements 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 | Graphics | State |
See Also
Arguments
| :: forall io. 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_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
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 - For each set n that is statically used
by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutorDescriptorSetLayoutarray that was used to create the currentPipelineorShaderEXT, as described in ??? - For each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - Descriptors in each bound descriptor
set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors used by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound descriptor buffers,
specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - 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 the
shaderObject
is enabled, either a valid pipeline must be bound to the pipeline
bind point used by this command, or a valid combination of valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding 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 not specified
as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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 bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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_UNORM_KHRis 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
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM - If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM - If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,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
OpImageWeightedSampleQCOM,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
- The current render pass must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index of the current
render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set
- If any shader executed by this
pipeline accesses an
OpTypeImagevariable with aDimoperand ofSubpassData, it must be decorated with anInputAttachmentIndexthat corresponds to a valid input attachment in the current subpass - Input attachment views accessed in a
subpass must be created with the same
Formatas the corresponding subpass definition, and be created with aImageViewthat is compatible with the attachment referenced by the subpass'pInputAttachments[InputAttachmentIndex] in the currently boundFramebufferas specified by Fragment Input Attachment Compatibility - Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command
If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_COLOR_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_DEPTH_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_STENCIL_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
- 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 any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment
- If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled
- If the current render pass instance uses
a depth/stencil attachment with a read-only layout for the stencil
aspect, both front and back
writeMaskare not zero, and stencil test is enabled, all stencil ops must beSTENCIL_OP_KEEP - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_VIEWPORTdynamic state enabled thencmdSetViewportmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_SCISSORdynamic state enabled thencmdSetScissormust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled thencmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object that outputs line
primitives is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthBiasEnablein the current command buffer setdepthBiasEnabletoTRUE,cmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled thencmdSetBlendConstantsmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTin the current command buffer set any element ofpColorBlendEnablestoTRUE, and the most recent call tocmdSetColorBlendEquationEXTin the current command buffer set the same element ofpColorBlendEquationsto aColorBlendEquationEXTstructure with anyBlendFactormember with a value ofBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,cmdSetBlendConstantsmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, and if the currentdepthBoundsTestEnablestate isTRUE, thencmdSetDepthBoundsmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthBoundsTestEnablein the current command buffer setdepthBoundsTestEnabletoTRUE, thencmdSetDepthBoundsmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilCompareMaskmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilCompareMaskmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilWriteMaskmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilWriteMaskmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilReferencemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilReferencemust have been called in the current command buffer prior to this drawing command - If the draw is
recorded in a render pass instance with multiview enabled, the
maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If the bound graphics
pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled thencmdSetSampleLocationsEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetSampleLocationsEnableEXTin the current command buffer setsampleLocationsEnabletoTRUE, thencmdSetSampleLocationsEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled, 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_CULL_MODEdynamic state enabled thencmdSetCullModemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCullModemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled thencmdSetFrontFacemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetFrontFacemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled thencmdSetDepthTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled thencmdSetDepthWriteEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthWriteEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled thencmdSetDepthCompareOpmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthTestEnablein the current command buffer setdepthTestEnabletoTRUE, thencmdSetDepthCompareOpmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled thencmdSetDepthBoundsTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the
depthBounds
feature is enabled, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then thecmdSetDepthBoundsTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled thencmdSetStencilTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetStencilTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled thencmdSetStencilOpmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE, thencmdSetStencilOpmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thePipelineViewportStateCreateInfo::scissorCountof the pipeline - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, thencmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and thescissorCountparameter ofcmdSetScissorWithCountmust match thePipelineViewportStateCreateInfo::viewportCountof the pipeline - If the bound graphics pipeline
state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled then bothcmdSetViewportWithCountandcmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If a shader object is bound to any
graphics stage, then both
cmdSetViewportWithCountandcmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNVin the current command buffer setviewportWScalingEnabletoTRUE, thencmdSetViewportWScalingNVmust have been called 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, and the most recent call tocmdSetViewportWScalingEnableNVin the current command buffer setviewportWScalingEnabletoTRUE, then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoarseSampleOrderNVmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetShadingRateImageEnableNVin the current command buffer setshadingRateImageEnabletoTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetShadingRateImageEnableNVin the current command buffer setshadingRateImageEnabletoTRUE, then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled thencmdSetExclusiveScissorEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled thencmdSetExclusiveScissorNVmust have been called in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetExclusiveScissorEnableNVmust have been called in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled thencmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, then
cmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled thencmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state
was created with the
DYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetLogicOpEnableEXTsetlogicOpEnabletoTRUE, thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 -
If 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 rasterization is not disabled
in the bound graphics pipeline, then for each color attachment in
the subpass, if the corresponding image view’s
format features
do not contain
FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then theblendEnablemember of the corresponding element of thepAttachmentsmember ofpColorBlendStatemust beFALSE - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then for each color attachment in the render pass, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding member ofpColorBlendEnablesin the most recent call tocmdSetColorBlendEnableEXTin the current command buffer that affected that attachment index must have beenFALSE - If
rasterization is not disabled in the bound graphics pipeline, and
none of the
VK_AMD_mixed_attachment_samplesextension, theVK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature is enabled, thenrasterizationSamplesfor the currently bound graphics pipeline must be the same as the current subpass color and/or depth/stencil attachments - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and none of theVK_AMD_mixed_attachment_samplesextension, theVK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature is enabled, then the most recent call tocmdSetRasterizationSamplesEXTin the current command buffer must have setrasterizationSamplesto be the same as the number of samples for the current render pass color and/or depth/stencil attachments - 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 currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If the current render
pass instance was begun with
cmdBeginRendering, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline - If the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - 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 aimageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound pipeline equal toFORMAT_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_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 currently 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_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 currently 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 currently 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 currently 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_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_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 currently 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 currently 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_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_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled thencmdSetColorWriteEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled then theattachmentCountparameter ofcmdSetColorWriteEnableEXTmust be greater than or equal to thePipelineColorBlendStateCreateInfo::attachmentCountof the currently bound graphics pipeline - If the
colorWriteEnable
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled thencmdSetDiscardRectangleEXTmust have been called in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled thencmdSetDiscardRectangleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDiscardRectangleEnableEXTin the current command buffer setdiscardRectangleEnabletoTRUE, thencmdSetDiscardRectangleEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled thencmdSetDiscardRectangleModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDiscardRectangleEnableEXTin the current command buffer setdiscardRectangleEnabletoTRUE, thencmdSetDiscardRectangleModeEXTmust have been called 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 currently 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 currently 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 currently 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 currently 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 currently 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 currently 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 currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the current render pass instance
was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the currently bound
pipeline was created with a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the corresponding element of thepColorAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline - If the current render pass
instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If the current render pass
instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If the
currently bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the value ofrasterizationSamplesfor the currently bound graphics pipeline - If the
current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If the
current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command has been called inside
a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current render pass
instance was begun with
cmdBeginRendering, the currently bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the current render pass
instance was begun with
cmdBeginRendering, 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, there is a graphics pipeline bound, depth test is enabled, depth write 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, 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
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, rasterization discard must not be enabled - If
the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, the bound graphics pipeline must not have been created with a non-zero value inPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled thencmdSetTessellationDomainOriginEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled thencmdSetDepthClampEnableEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage, thencmdSetTessellationDomainOriginEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClamp
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthClampEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled thencmdSetPolygonModeEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetPolygonModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled thencmdSetRasterizationSamplesEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetRasterizationSamplesEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled thencmdSetSampleMaskEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetSampleMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToCoverageEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_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
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called in the current command buffer prior to this drawing command - 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 the bound graphics pipeline state was
created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToOneEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAlphaToOneEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled thencmdSetLogicOpEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLogicOpEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTfor any attachment set that attachment’s value inpColorBlendEnablestoTRUE, thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled thencmdSetRasterizationStreamEXTmust have been called in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage, thencmdSetRasterizationStreamEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetConservativeRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetConservativeRasterizationModeEXTin the current command buffer setconservativeRasterizationModetoCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state enabled thencmdSetDepthClipEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetDepthClipEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled thencmdSetSampleLocationsEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetSampleLocationsEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_blend_operation_advancedextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then at least one ofcmdSetColorBlendEquationEXTandcmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled thencmdSetProvokingVertexModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetProvokingVertexModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_LINE_STIPPLE_EXTdynamic state enabled thencmdSetLineStippleEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetLineStippleEnableEXTin the current command buffer setstippledLineEnabletoTRUE, thencmdSetLineStippleEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled thencmdSetDepthClipNegativeOneToOneEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetDepthClipNegativeOneToOneEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled thencmdSetViewportWScalingEnableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportWScalingEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled thencmdSetViewportSwizzleNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportSwizzleNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled thencmdSetCoverageToColorEnableNVmust have been called in the current command buffer prior to this drawing command - If the
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, thencmdSetCoverageToColorEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled thencmdSetCoverageToColorLocationNVmust have been called in the current command buffer prior to this drawing command - If the
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 most recent call tocmdSetCoverageToColorEnableNVin the current command buffer setcoverageToColorEnabletoTRUE, thencmdSetCoverageToColorLocationNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled thencmdSetCoverageModulationModeNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoverageModulationModeNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled thencmdSetCoverageModulationTableEnableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetCoverageModulationModeNVin the current command buffer set coverageModulationMode to any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled thencmdSetCoverageModulationTableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetCoverageModulationTableEnableNVin the current command buffer setcoverageModulationTableEnabletoTRUE, thencmdSetCoverageModulationTableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled thencmdSetShadingRateImageEnableNVmust have been called in the current command buffer prior to this drawing command - If the
pipelineFragmentShadingRate
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer set rasterizerDiscardEnable toFALSE, thencmdSetFragmentShadingRateKHRmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetShadingRateImageEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled thencmdSetRepresentativeFragmentTestEnableNVmust have been called in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled thencmdSetCoverageReductionModeNVmust have been called in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoverageReductionModeNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTstate enabled and the last call tocmdSetColorBlendEnableEXTsetpColorBlendEnablesfor any attachment toTRUE, then for those attachments in the subpass the corresponding image view’s format features must containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust follow the rules for a zero-attachment subpass - If the bound graphics pipeline state
was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to thePipelineMultisampleStateCreateInfo::rasterizationSamplesparameter used to create the bound graphics pipeline - If the bound graphics pipeline state
was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to therasterizationSamplesparameter in the last call tocmdSetRasterizationSamplesEXT - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and 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 the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendAdvancedEXTcalls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled and the last calls tocmdSetColorBlendEnableEXTandcmdSetColorBlendAdvancedEXThave enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments - If
the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXTstate enabled, the last call tocmdSetRasterizationStreamEXTmust have set therasterizationStreamto zero - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesmember of thePipelineMultisampleStateCreateInfostructure the bound graphics pipeline has been created with - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If 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 tocmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If 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.sampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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.sampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.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 subpass - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the currently bound pipeline state, then the currentrasterizationSamplesmust be the same as the sample count of the depth/stencil attachment - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVstate enabled and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If 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 the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If this
VK_NV_coverage_reduction_modeextension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVandDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, the current coverage reduction modecoverageReductionMode, then the currentrasterizationSamples, and the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned bygetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_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 if the current subpass has any color attachments andrasterizationSamplesof the last call tocmdSetRasterizationSamplesEXTis greater than the number of color samples, then the pipelinesampleShadingEnablemust beFALSE - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the stippledRectangularLines feature must be enabled - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the stippledBresenhamLines feature must be enabled - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the stippledSmoothLines feature must be enabled - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_DEFAULT_EXT, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then theconservativeRasterizationModeset by the last call tocmdSetConservativeRasterizationModeEXTmust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the currently bound pipeline was
created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_VERTEX_BIT,SHADER_STAGE_TESSELLATION_CONTROL_BIT,SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic statecmdSetAttachmentFeedbackLoopEnableEXTmust have been called 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 - 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 both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created without theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, a validShaderEXTmust be bound to theSHADER_STAGE_TASK_BIT_EXTstage - If there is no bound graphics pipeline,
and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created with theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, there must be noShaderEXTbound to theSHADER_STAGE_TASK_BIT_EXTstage - 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 been created 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_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the
attachmentFeedbackLoopDynamicState
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called in the current command buffer prior to this drawing command - 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 currently 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
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 - For a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ???
- 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 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 the bound graphics pipeline was
created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXTandDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic states enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound graphics pipeline was
created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2EXTmust have been called in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2EXTmust not beNULL - If 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 in the current command buffer prior to this draw 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_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 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_VERTEX_BITstage and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LIST, or the bound graphics pipeline state was created with theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled thencmdSetPatchControlPointsEXTmust have been called 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 in the current command buffer prior to this drawing command - The bound graphics pipeline must not
have been created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no shader object bound
to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Inside | Outside | Graphics | Action |
See Also
Arguments
| :: forall io. 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
cmdBindIndexBuffer2KHR::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
cmdBindIndexBuffer2KHR, 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_EXT 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_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
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 - For each set n that is
statically used by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutorDescriptorSetLayoutarray that was used to create the currentPipelineorShaderEXT, as described in ??? - For each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors used by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound descriptor
buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - 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 the
shaderObject
is enabled, either a valid pipeline must be bound to the pipeline
bind point used by this command, or a valid combination of valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding 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 not
specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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 bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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_UNORM_KHRis 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
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM - If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM - If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,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
OpImageWeightedSampleQCOM,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
- The current render pass
must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index of the
current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set
- If any shader executed by
this pipeline accesses an
OpTypeImagevariable with aDimoperand ofSubpassData, it must be decorated with anInputAttachmentIndexthat corresponds to a valid input attachment in the current subpass - Input attachment views accessed
in a subpass must be created with the same
Formatas the corresponding subpass definition, and be created with aImageViewthat is compatible with the attachment referenced by the subpass'pInputAttachments[InputAttachmentIndex] in the currently boundFramebufferas specified by Fragment Input Attachment Compatibility - Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command
If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_COLOR_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_DEPTH_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_STENCIL_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
- 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 any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment
- If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled
- If the current render pass
instance uses a depth/stencil attachment with a read-only layout
for the stencil aspect, both front and back
writeMaskare not zero, and stencil test is enabled, all stencil ops must beSTENCIL_OP_KEEP - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORTdynamic state enabled thencmdSetViewportmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SCISSORdynamic state enabled thencmdSetScissormust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled thencmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object that outputs
line primitives is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthBiasEnablein the current command buffer setdepthBiasEnabletoTRUE,cmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled thencmdSetBlendConstantsmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTin the current command buffer set any element ofpColorBlendEnablestoTRUE, and the most recent call tocmdSetColorBlendEquationEXTin the current command buffer set the same element ofpColorBlendEquationsto aColorBlendEquationEXTstructure with anyBlendFactormember with a value ofBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,cmdSetBlendConstantsmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, and if the currentdepthBoundsTestEnablestate isTRUE, thencmdSetDepthBoundsmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthBoundsTestEnablein the current command buffer setdepthBoundsTestEnabletoTRUE, thencmdSetDepthBoundsmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilCompareMaskmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilCompareMaskmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilWriteMaskmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilWriteMaskmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilReferencemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilReferencemust have been called in the current command buffer prior to this drawing command - If the draw
is recorded in a render pass instance with multiview enabled, the
maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If the bound
graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled thencmdSetSampleLocationsEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetSampleLocationsEnableEXTin the current command buffer setsampleLocationsEnabletoTRUE, thencmdSetSampleLocationsEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled, 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_CULL_MODEdynamic state enabled thencmdSetCullModemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCullModemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled thencmdSetFrontFacemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetFrontFacemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled thencmdSetDepthTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled thencmdSetDepthWriteEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthWriteEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled thencmdSetDepthCompareOpmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthTestEnablein the current command buffer setdepthTestEnabletoTRUE, thencmdSetDepthCompareOpmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled thencmdSetDepthBoundsTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the
depthBounds
feature is enabled, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then thecmdSetDepthBoundsTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled thencmdSetStencilTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetStencilTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled thencmdSetStencilOpmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE, thencmdSetStencilOpmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thePipelineViewportStateCreateInfo::scissorCountof the pipeline - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, thencmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and thescissorCountparameter ofcmdSetScissorWithCountmust match thePipelineViewportStateCreateInfo::viewportCountof the pipeline - If the bound graphics
pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled then bothcmdSetViewportWithCountandcmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If a shader object is bound to
any graphics stage, then both
cmdSetViewportWithCountandcmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNVin the current command buffer setviewportWScalingEnabletoTRUE, thencmdSetViewportWScalingNVmust have been called 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, and the most recent call tocmdSetViewportWScalingEnableNVin the current command buffer setviewportWScalingEnabletoTRUE, then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoarseSampleOrderNVmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetShadingRateImageEnableNVin the current command buffer setshadingRateImageEnabletoTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetShadingRateImageEnableNVin the current command buffer setshadingRateImageEnabletoTRUE, then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled thencmdSetExclusiveScissorEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled thencmdSetExclusiveScissorNVmust have been called in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetExclusiveScissorEnableNVmust have been called in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled thencmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, then
cmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled thencmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetLogicOpEnableEXTsetlogicOpEnabletoTRUE, thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 -
If 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 rasterization is not
disabled in the bound graphics pipeline, then for each color
attachment in the subpass, if the corresponding image view’s
format features
do not contain
FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then theblendEnablemember of the corresponding element of thepAttachmentsmember ofpColorBlendStatemust beFALSE - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then for each color attachment in the render pass, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding member ofpColorBlendEnablesin the most recent call tocmdSetColorBlendEnableEXTin the current command buffer that affected that attachment index must have beenFALSE - If
rasterization is not disabled in the bound graphics pipeline, and
none of the
VK_AMD_mixed_attachment_samplesextension, theVK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature is enabled, thenrasterizationSamplesfor the currently bound graphics pipeline must be the same as the current subpass color and/or depth/stencil attachments - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and none of theVK_AMD_mixed_attachment_samplesextension, theVK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature is enabled, then the most recent call tocmdSetRasterizationSamplesEXTin the current command buffer must have setrasterizationSamplesto be the same as the number of samples for the current render pass color and/or depth/stencil attachments - 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 currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If the current
render pass instance was begun with
cmdBeginRendering, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If
the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline - If
the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - 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 aimageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound pipeline equal toFORMAT_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_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 currently 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_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 currently 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 currently 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 currently 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_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_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 currently 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 currently 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_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_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled thencmdSetColorWriteEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled then theattachmentCountparameter ofcmdSetColorWriteEnableEXTmust be greater than or equal to thePipelineColorBlendStateCreateInfo::attachmentCountof the currently bound graphics pipeline - If the
colorWriteEnable
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled thencmdSetDiscardRectangleEXTmust have been called in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled thencmdSetDiscardRectangleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDiscardRectangleEnableEXTin the current command buffer setdiscardRectangleEnabletoTRUE, thencmdSetDiscardRectangleEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled thencmdSetDiscardRectangleModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDiscardRectangleEnableEXTin the current command buffer setdiscardRectangleEnabletoTRUE, thencmdSetDiscardRectangleModeEXTmust have been called 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 currently 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 currently 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 currently 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 currently 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 currently 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 currently 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 currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the current render pass
instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the currently
bound pipeline was created with a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the corresponding element of thepColorAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline - If the current render
pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If the current
render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If
the currently bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the value ofrasterizationSamplesfor the currently bound graphics pipeline - If
the current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If
the current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command has been called
inside a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current render pass
instance was begun with
cmdBeginRendering, the currently bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the current
render pass instance was begun with
cmdBeginRendering, 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, there is a graphics pipeline bound, depth test is enabled, depth write 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, 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
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, the bound graphics pipeline must not have been created with a non-zero value inPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled thencmdSetTessellationDomainOriginEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled thencmdSetDepthClampEnableEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage, thencmdSetTessellationDomainOriginEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClamp
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthClampEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled thencmdSetPolygonModeEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetPolygonModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled thencmdSetRasterizationSamplesEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetRasterizationSamplesEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled thencmdSetSampleMaskEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetSampleMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToCoverageEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_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
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called in the current command buffer prior to this drawing command - 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 the bound graphics pipeline
state was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToOneEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAlphaToOneEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled thencmdSetLogicOpEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLogicOpEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTfor any attachment set that attachment’s value inpColorBlendEnablestoTRUE, thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled thencmdSetRasterizationStreamEXTmust have been called in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage, thencmdSetRasterizationStreamEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetConservativeRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetConservativeRasterizationModeEXTin the current command buffer setconservativeRasterizationModetoCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state enabled thencmdSetDepthClipEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetDepthClipEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled thencmdSetSampleLocationsEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetSampleLocationsEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_blend_operation_advancedextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then at least one ofcmdSetColorBlendEquationEXTandcmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled thencmdSetProvokingVertexModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetProvokingVertexModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LINE_STIPPLE_EXTdynamic state enabled thencmdSetLineStippleEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetLineStippleEnableEXTin the current command buffer setstippledLineEnabletoTRUE, thencmdSetLineStippleEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled thencmdSetDepthClipNegativeOneToOneEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetDepthClipNegativeOneToOneEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled thencmdSetViewportWScalingEnableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportWScalingEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled thencmdSetViewportSwizzleNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportSwizzleNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled thencmdSetCoverageToColorEnableNVmust have been called in the current command buffer prior to this drawing command - If the
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, thencmdSetCoverageToColorEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled thencmdSetCoverageToColorLocationNVmust have been called in the current command buffer prior to this drawing command - If the
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 most recent call tocmdSetCoverageToColorEnableNVin the current command buffer setcoverageToColorEnabletoTRUE, thencmdSetCoverageToColorLocationNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled thencmdSetCoverageModulationModeNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoverageModulationModeNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled thencmdSetCoverageModulationTableEnableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetCoverageModulationModeNVin the current command buffer set coverageModulationMode to any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled thencmdSetCoverageModulationTableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetCoverageModulationTableEnableNVin the current command buffer setcoverageModulationTableEnabletoTRUE, thencmdSetCoverageModulationTableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled thencmdSetShadingRateImageEnableNVmust have been called in the current command buffer prior to this drawing command - If the
pipelineFragmentShadingRate
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer set rasterizerDiscardEnable toFALSE, thencmdSetFragmentShadingRateKHRmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetShadingRateImageEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled thencmdSetRepresentativeFragmentTestEnableNVmust have been called in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled thencmdSetCoverageReductionModeNVmust have been called in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoverageReductionModeNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTstate enabled and the last call tocmdSetColorBlendEnableEXTsetpColorBlendEnablesfor any attachment toTRUE, then for those attachments in the subpass the corresponding image view’s format features must containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust follow the rules for a zero-attachment subpass - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to thePipelineMultisampleStateCreateInfo::rasterizationSamplesparameter used to create the bound graphics pipeline - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to therasterizationSamplesparameter in the last call tocmdSetRasterizationSamplesEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and 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 the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendAdvancedEXTcalls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled and the last calls tocmdSetColorBlendEnableEXTandcmdSetColorBlendAdvancedEXThave enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXTstate enabled, the last call tocmdSetRasterizationStreamEXTmust have set therasterizationStreamto zero - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesmember of thePipelineMultisampleStateCreateInfostructure the bound graphics pipeline has been created with - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If 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 tocmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If 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.sampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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.sampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.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 subpass - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the currently bound pipeline state, then the currentrasterizationSamplesmust be the same as the sample count of the depth/stencil attachment - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVstate enabled and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If 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 the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If this
VK_NV_coverage_reduction_modeextension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVandDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, the current coverage reduction modecoverageReductionMode, then the currentrasterizationSamples, and the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned bygetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_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 if the current subpass has any color attachments andrasterizationSamplesof the last call tocmdSetRasterizationSamplesEXTis greater than the number of color samples, then the pipelinesampleShadingEnablemust beFALSE - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the stippledRectangularLines feature must be enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the stippledBresenhamLines feature must be enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the stippledSmoothLines feature must be enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_DEFAULT_EXT, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then theconservativeRasterizationModeset by the last call tocmdSetConservativeRasterizationModeEXTmust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the currently bound pipeline
was created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_VERTEX_BIT,SHADER_STAGE_TESSELLATION_CONTROL_BIT,SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic statecmdSetAttachmentFeedbackLoopEnableEXTmust have been called 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 - 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 both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created without theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, a validShaderEXTmust be bound to theSHADER_STAGE_TASK_BIT_EXTstage - If there is no bound graphics
pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created with theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, there must be noShaderEXTbound to theSHADER_STAGE_TASK_BIT_EXTstage - 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 been created 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_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the
attachmentFeedbackLoopDynamicState
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called in the current command buffer prior to this drawing command - 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 currently 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
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 - For a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ???
- 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 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 the bound graphics pipeline
was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXTandDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic states enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound graphics
pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2EXTmust have been called in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2EXTmust not beNULL - If 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 in the current command buffer prior to this draw 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_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 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_VERTEX_BITstage and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LIST, or the bound graphics pipeline state was created with theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled thencmdSetPatchControlPointsEXTmust have been called 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 in the current command buffer prior to this drawing command - The bound graphics pipeline
must not have been created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no shader object
bound to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages - An index buffer must be bound
- If
robustBufferAccess2
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 viacmdBindIndexBuffer - If
robustBufferAccess2
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 viacmdBindIndexBufferorcmdBindIndexBuffer2KHR. IfcmdBindIndexBuffer2KHRis used to bind the index buffer, the size of the bound index buffer iscmdBindIndexBuffer2KHR::size
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Inside | Outside | Graphics | Action |
See Also
Arguments
| :: forall io. 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_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
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 - For each set n that is
statically used by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutorDescriptorSetLayoutarray that was used to create the currentPipelineorShaderEXT, as described in ??? - For each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors used by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound descriptor
buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - 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 the
shaderObject
is enabled, either a valid pipeline must be bound to the pipeline
bind point used by this command, or a valid combination of valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding 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 not
specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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 bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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_UNORM_KHRis 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
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM - If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM - If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,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
OpImageWeightedSampleQCOM,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
- The current render pass
must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index of the
current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set
- If any shader executed by
this pipeline accesses an
OpTypeImagevariable with aDimoperand ofSubpassData, it must be decorated with anInputAttachmentIndexthat corresponds to a valid input attachment in the current subpass - Input attachment views accessed
in a subpass must be created with the same
Formatas the corresponding subpass definition, and be created with aImageViewthat is compatible with the attachment referenced by the subpass'pInputAttachments[InputAttachmentIndex] in the currently boundFramebufferas specified by Fragment Input Attachment Compatibility - Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command
If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_COLOR_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_DEPTH_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_STENCIL_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
- 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 any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment
- If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled
- If the current render pass
instance uses a depth/stencil attachment with a read-only layout
for the stencil aspect, both front and back
writeMaskare not zero, and stencil test is enabled, all stencil ops must beSTENCIL_OP_KEEP - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORTdynamic state enabled thencmdSetViewportmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SCISSORdynamic state enabled thencmdSetScissormust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled thencmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object that outputs
line primitives is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthBiasEnablein the current command buffer setdepthBiasEnabletoTRUE,cmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled thencmdSetBlendConstantsmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTin the current command buffer set any element ofpColorBlendEnablestoTRUE, and the most recent call tocmdSetColorBlendEquationEXTin the current command buffer set the same element ofpColorBlendEquationsto aColorBlendEquationEXTstructure with anyBlendFactormember with a value ofBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,cmdSetBlendConstantsmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, and if the currentdepthBoundsTestEnablestate isTRUE, thencmdSetDepthBoundsmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthBoundsTestEnablein the current command buffer setdepthBoundsTestEnabletoTRUE, thencmdSetDepthBoundsmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilCompareMaskmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilCompareMaskmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilWriteMaskmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilWriteMaskmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilReferencemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilReferencemust have been called in the current command buffer prior to this drawing command - If the draw
is recorded in a render pass instance with multiview enabled, the
maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If the bound
graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled thencmdSetSampleLocationsEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetSampleLocationsEnableEXTin the current command buffer setsampleLocationsEnabletoTRUE, thencmdSetSampleLocationsEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled, 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_CULL_MODEdynamic state enabled thencmdSetCullModemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCullModemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled thencmdSetFrontFacemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetFrontFacemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled thencmdSetDepthTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled thencmdSetDepthWriteEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthWriteEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled thencmdSetDepthCompareOpmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthTestEnablein the current command buffer setdepthTestEnabletoTRUE, thencmdSetDepthCompareOpmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled thencmdSetDepthBoundsTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the
depthBounds
feature is enabled, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then thecmdSetDepthBoundsTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled thencmdSetStencilTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetStencilTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled thencmdSetStencilOpmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE, thencmdSetStencilOpmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thePipelineViewportStateCreateInfo::scissorCountof the pipeline - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, thencmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and thescissorCountparameter ofcmdSetScissorWithCountmust match thePipelineViewportStateCreateInfo::viewportCountof the pipeline - If the bound graphics
pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled then bothcmdSetViewportWithCountandcmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If a shader object is bound to
any graphics stage, then both
cmdSetViewportWithCountandcmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNVin the current command buffer setviewportWScalingEnabletoTRUE, thencmdSetViewportWScalingNVmust have been called 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, and the most recent call tocmdSetViewportWScalingEnableNVin the current command buffer setviewportWScalingEnabletoTRUE, then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoarseSampleOrderNVmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetShadingRateImageEnableNVin the current command buffer setshadingRateImageEnabletoTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetShadingRateImageEnableNVin the current command buffer setshadingRateImageEnabletoTRUE, then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled thencmdSetExclusiveScissorEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled thencmdSetExclusiveScissorNVmust have been called in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetExclusiveScissorEnableNVmust have been called in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled thencmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, then
cmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled thencmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetLogicOpEnableEXTsetlogicOpEnabletoTRUE, thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 -
If 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 rasterization is not
disabled in the bound graphics pipeline, then for each color
attachment in the subpass, if the corresponding image view’s
format features
do not contain
FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then theblendEnablemember of the corresponding element of thepAttachmentsmember ofpColorBlendStatemust beFALSE - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then for each color attachment in the render pass, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding member ofpColorBlendEnablesin the most recent call tocmdSetColorBlendEnableEXTin the current command buffer that affected that attachment index must have beenFALSE - If
rasterization is not disabled in the bound graphics pipeline, and
none of the
VK_AMD_mixed_attachment_samplesextension, theVK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature is enabled, thenrasterizationSamplesfor the currently bound graphics pipeline must be the same as the current subpass color and/or depth/stencil attachments - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and none of theVK_AMD_mixed_attachment_samplesextension, theVK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature is enabled, then the most recent call tocmdSetRasterizationSamplesEXTin the current command buffer must have setrasterizationSamplesto be the same as the number of samples for the current render pass color and/or depth/stencil attachments - 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 currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If the current
render pass instance was begun with
cmdBeginRendering, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If
the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline - If
the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - 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 aimageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound pipeline equal toFORMAT_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_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 currently 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_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 currently 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 currently 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 currently 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_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_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 currently 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 currently 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_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_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled thencmdSetColorWriteEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled then theattachmentCountparameter ofcmdSetColorWriteEnableEXTmust be greater than or equal to thePipelineColorBlendStateCreateInfo::attachmentCountof the currently bound graphics pipeline - If the
colorWriteEnable
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled thencmdSetDiscardRectangleEXTmust have been called in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled thencmdSetDiscardRectangleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDiscardRectangleEnableEXTin the current command buffer setdiscardRectangleEnabletoTRUE, thencmdSetDiscardRectangleEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled thencmdSetDiscardRectangleModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDiscardRectangleEnableEXTin the current command buffer setdiscardRectangleEnabletoTRUE, thencmdSetDiscardRectangleModeEXTmust have been called 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 currently 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 currently 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 currently 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 currently 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 currently 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 currently 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 currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the current render pass
instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the currently
bound pipeline was created with a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the corresponding element of thepColorAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline - If the current
render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If the current
render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If
the currently bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the value ofrasterizationSamplesfor the currently bound graphics pipeline - If
the current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If
the current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command has been called
inside a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current render pass
instance was begun with
cmdBeginRendering, the currently bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the current
render pass instance was begun with
cmdBeginRendering, 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, there is a graphics pipeline bound, depth test is enabled, depth write 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, 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
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, the bound graphics pipeline must not have been created with a non-zero value inPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled thencmdSetTessellationDomainOriginEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled thencmdSetDepthClampEnableEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage, thencmdSetTessellationDomainOriginEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClamp
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthClampEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled thencmdSetPolygonModeEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetPolygonModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled thencmdSetRasterizationSamplesEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetRasterizationSamplesEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled thencmdSetSampleMaskEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetSampleMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToCoverageEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_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
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called in the current command buffer prior to this drawing command - 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 the bound graphics pipeline
state was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToOneEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAlphaToOneEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled thencmdSetLogicOpEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLogicOpEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTfor any attachment set that attachment’s value inpColorBlendEnablestoTRUE, thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled thencmdSetRasterizationStreamEXTmust have been called in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage, thencmdSetRasterizationStreamEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetConservativeRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetConservativeRasterizationModeEXTin the current command buffer setconservativeRasterizationModetoCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state enabled thencmdSetDepthClipEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetDepthClipEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled thencmdSetSampleLocationsEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetSampleLocationsEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_blend_operation_advancedextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then at least one ofcmdSetColorBlendEquationEXTandcmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled thencmdSetProvokingVertexModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetProvokingVertexModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_LINE_STIPPLE_EXTdynamic state enabled thencmdSetLineStippleEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetLineStippleEnableEXTin the current command buffer setstippledLineEnabletoTRUE, thencmdSetLineStippleEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled thencmdSetDepthClipNegativeOneToOneEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetDepthClipNegativeOneToOneEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled thencmdSetViewportWScalingEnableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportWScalingEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled thencmdSetViewportSwizzleNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportSwizzleNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled thencmdSetCoverageToColorEnableNVmust have been called in the current command buffer prior to this drawing command - If the
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, thencmdSetCoverageToColorEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled thencmdSetCoverageToColorLocationNVmust have been called in the current command buffer prior to this drawing command - If the
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 most recent call tocmdSetCoverageToColorEnableNVin the current command buffer setcoverageToColorEnabletoTRUE, thencmdSetCoverageToColorLocationNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled thencmdSetCoverageModulationModeNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoverageModulationModeNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled thencmdSetCoverageModulationTableEnableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetCoverageModulationModeNVin the current command buffer set coverageModulationMode to any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled thencmdSetCoverageModulationTableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetCoverageModulationTableEnableNVin the current command buffer setcoverageModulationTableEnabletoTRUE, thencmdSetCoverageModulationTableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled thencmdSetShadingRateImageEnableNVmust have been called in the current command buffer prior to this drawing command - If the
pipelineFragmentShadingRate
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer set rasterizerDiscardEnable toFALSE, thencmdSetFragmentShadingRateKHRmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetShadingRateImageEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled thencmdSetRepresentativeFragmentTestEnableNVmust have been called in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled thencmdSetCoverageReductionModeNVmust have been called in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoverageReductionModeNVmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTstate enabled and the last call tocmdSetColorBlendEnableEXTsetpColorBlendEnablesfor any attachment toTRUE, then for those attachments in the subpass the corresponding image view’s format features must containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust follow the rules for a zero-attachment subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to thePipelineMultisampleStateCreateInfo::rasterizationSamplesparameter used to create the bound graphics pipeline - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to therasterizationSamplesparameter in the last call tocmdSetRasterizationSamplesEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and 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 the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendAdvancedEXTcalls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled and the last calls tocmdSetColorBlendEnableEXTandcmdSetColorBlendAdvancedEXThave enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXTstate enabled, the last call tocmdSetRasterizationStreamEXTmust have set therasterizationStreamto zero - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesmember of thePipelineMultisampleStateCreateInfostructure the bound graphics pipeline has been created with - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If 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 tocmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If 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.sampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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.sampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.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 subpass - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the currently bound pipeline state, then the currentrasterizationSamplesmust be the same as the sample count of the depth/stencil attachment - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVstate enabled and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If 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 the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If this
VK_NV_coverage_reduction_modeextension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVandDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, the current coverage reduction modecoverageReductionMode, then the currentrasterizationSamples, and the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned bygetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_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 if the current subpass has any color attachments andrasterizationSamplesof the last call tocmdSetRasterizationSamplesEXTis greater than the number of color samples, then the pipelinesampleShadingEnablemust beFALSE - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the stippledRectangularLines feature must be enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the stippledBresenhamLines feature must be enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the stippledSmoothLines feature must be enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_DEFAULT_EXT, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then theconservativeRasterizationModeset by the last call tocmdSetConservativeRasterizationModeEXTmust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the currently bound pipeline
was created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_VERTEX_BIT,SHADER_STAGE_TESSELLATION_CONTROL_BIT,SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic statecmdSetAttachmentFeedbackLoopEnableEXTmust have been called 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 - 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 both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created without theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, a validShaderEXTmust be bound to theSHADER_STAGE_TASK_BIT_EXTstage - If there is no bound graphics
pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created with theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, there must be noShaderEXTbound to theSHADER_STAGE_TASK_BIT_EXTstage - 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 been created 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_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the
attachmentFeedbackLoopDynamicState
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called in the current command buffer prior to this drawing command - 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 currently 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 - All vertex input bindings
accessed via vertex input variables declared in the vertex shader
entry point’s interface must have either valid or
NULL_HANDLEbuffers bound - If the
nullDescriptor
feature is not enabled, all vertex input bindings accessed via
vertex input variables declared in the vertex shader entry point’s
interface must not be
NULL_HANDLE - For a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ???
- If 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 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 the bound graphics pipeline
was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXTandDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic states enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound graphics
pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2EXTmust have been called in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2EXTmust not beNULL - If 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 in the current command buffer prior to this draw 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_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 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_VERTEX_BITstage and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LIST, or the bound graphics pipeline state was created with theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled thencmdSetPatchControlPointsEXTmust have been called 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 in the current command buffer prior to this drawing command - The bound graphics pipeline
must not have been created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no shader object
bound to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages - If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITbit 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 support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
- Both of
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 | Graphics | Action |
See Also
cmdDrawIndexedIndirect Source #
Arguments
| :: forall io. 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_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
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 - For each set n that is
statically used by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutorDescriptorSetLayoutarray that was used to create the currentPipelineorShaderEXT, as described in ??? - For each push constant
that is statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors used
by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - 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 the
shaderObject
is enabled, either a valid pipeline must be bound to the pipeline
bind point used by this command, or a valid combination of valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding 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 not
specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If any stage of
the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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 bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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_UNORM_KHRis 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
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM - If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM - If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,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
OpImageWeightedSampleQCOM,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
- The current render
pass must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index of
the current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - If any shader statically accesses an input attachment, a valid descriptor must be bound to the pipeline via a descriptor set
- If any shader
executed by this pipeline accesses an
OpTypeImagevariable with aDimoperand ofSubpassData, it must be decorated with anInputAttachmentIndexthat corresponds to a valid input attachment in the current subpass - Input attachment views
accessed in a subpass must be created with the same
Formatas the corresponding subpass definition, and be created with aImageViewthat is compatible with the attachment referenced by the subpass'pInputAttachments[InputAttachmentIndex] in the currently boundFramebufferas specified by Fragment Input Attachment Compatibility - Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command
If a color attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_COLOR_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
If a depth attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_DEPTH_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
If a stencil attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it is not in the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTimage layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTis set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXTincludedIMAGE_ASPECT_STENCIL_BITand- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTit must not be accessed in any way other than as an attachment by this command
- the
- 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 any previously recorded command in the current subpass accessed an image subresource used as an attachment in this subpass in any way other than as an attachment, this command must not write to that image subresource as an attachment
- If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled
- If the current render
pass instance uses a depth/stencil attachment with a read-only
layout for the stencil aspect, both front and back
writeMaskare not zero, and stencil test is enabled, all stencil ops must beSTENCIL_OP_KEEP - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORTdynamic state enabled thencmdSetViewportmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SCISSORdynamic state enabled thencmdSetScissormust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled thencmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If a shader object that
outputs line primitives is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE,cmdSetLineWidthmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthBiasEnablein the current command buffer setdepthBiasEnabletoTRUE,cmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled thencmdSetBlendConstantsmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTin the current command buffer set any element ofpColorBlendEnablestoTRUE, and the most recent call tocmdSetColorBlendEquationEXTin the current command buffer set the same element ofpColorBlendEquationsto aColorBlendEquationEXTstructure with anyBlendFactormember with a value ofBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA,cmdSetBlendConstantsmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, and if the currentdepthBoundsTestEnablestate isTRUE, thencmdSetDepthBoundsmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthBoundsTestEnablein the current command buffer setdepthBoundsTestEnabletoTRUE, thencmdSetDepthBoundsmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilCompareMaskmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilCompareMaskmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilWriteMaskmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilWriteMaskmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, and if the currentstencilTestEnablestate isTRUE, thencmdSetStencilReferencemust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE,cmdSetStencilReferencemust have been called in the current command buffer prior to this drawing command - If
the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If the
bound graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled thencmdSetSampleLocationsEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetSampleLocationsEnableEXTin the current command buffer setsampleLocationsEnabletoTRUE, thencmdSetSampleLocationsEXTmust have been called in the current command buffer prior to this drawing command - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled, 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_CULL_MODEdynamic state enabled thencmdSetCullModemust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCullModemust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled thencmdSetFrontFacemust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetFrontFacemust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled thencmdSetDepthTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled thencmdSetDepthWriteEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthWriteEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled thencmdSetDepthCompareOpmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDepthTestEnablein the current command buffer setdepthTestEnabletoTRUE, thencmdSetDepthCompareOpmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled thencmdSetDepthBoundsTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the
depthBounds
feature is enabled, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then thecmdSetDepthBoundsTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled thencmdSetStencilTestEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetStencilTestEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled thencmdSetStencilOpmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetStencilTestEnablein the current command buffer setstencilTestEnabletoTRUE, thencmdSetStencilOpmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thePipelineViewportStateCreateInfo::scissorCountof the pipeline - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, thencmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and thescissorCountparameter ofcmdSetScissorWithCountmust match thePipelineViewportStateCreateInfo::viewportCountof the pipeline - If the bound
graphics pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled then bothcmdSetViewportWithCountandcmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If a shader object is
bound to any graphics stage, then both
cmdSetViewportWithCountandcmdSetScissorWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNVin the current command buffer setviewportWScalingEnabletoTRUE, thencmdSetViewportWScalingNVmust have been called 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, and the most recent call tocmdSetViewportWScalingEnableNVin the current command buffer setviewportWScalingEnabletoTRUE, then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoarseSampleOrderNVmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetShadingRateImageEnableNVin the current command buffer setshadingRateImageEnabletoTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetShadingRateImageEnableNVin the current command buffer setshadingRateImageEnabletoTRUE, then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled thencmdSetExclusiveScissorEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled thencmdSetExclusiveScissorNVmust have been called in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetExclusiveScissorEnableNVmust have been called in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled thencmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, then
cmdSetRasterizerDiscardEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled thencmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthBiasEnablemust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetLogicOpEnableEXTsetlogicOpEnabletoTRUE, thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 -
If 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 rasterization
is not disabled in the bound graphics pipeline, then for each color
attachment in the subpass, if the corresponding image view’s
format features
do not contain
FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then theblendEnablemember of the corresponding element of thepAttachmentsmember ofpColorBlendStatemust beFALSE - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then for each color attachment in the render pass, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding member ofpColorBlendEnablesin the most recent call tocmdSetColorBlendEnableEXTin the current command buffer that affected that attachment index must have beenFALSE -
If rasterization is not disabled in the bound graphics pipeline, and
none of the
VK_AMD_mixed_attachment_samplesextension, theVK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature is enabled, thenrasterizationSamplesfor the currently bound graphics pipeline must be the same as the current subpass color and/or depth/stencil attachments - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and none of theVK_AMD_mixed_attachment_samplesextension, theVK_NV_framebuffer_mixed_samplesextension, or the multisampledRenderToSingleSampled feature is enabled, then the most recent call tocmdSetRasterizationSamplesEXTin the current command buffer must have setrasterizationSamplesto be the same as the number of samples for the current render pass color and/or depth/stencil attachments - 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 currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If the
current render pass instance was begun with
cmdBeginRendering, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount -
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline -
If the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED -
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 aimageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the currently bound pipeline equal toFORMAT_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_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 currently 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_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 currently 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 currently 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 currently 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_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_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 currently 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 currently 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_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_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled thencmdSetColorWriteEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled then theattachmentCountparameter ofcmdSetColorWriteEnableEXTmust be greater than or equal to thePipelineColorBlendStateCreateInfo::attachmentCountof the currently bound graphics pipeline - If the
colorWriteEnable
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of color attachments in the current render pass instance - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled thencmdSetDiscardRectangleEXTmust have been called in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled thencmdSetDiscardRectangleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDiscardRectangleEnableEXTin the current command buffer setdiscardRectangleEnabletoTRUE, thencmdSetDiscardRectangleEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled thencmdSetDiscardRectangleModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetDiscardRectangleEnableEXTin the current command buffer setdiscardRectangleEnabletoTRUE, thencmdSetDiscardRectangleModeEXTmust have been called 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 currently 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 currently 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 currently 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 currently 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 currently 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 currently 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 currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the current
render pass instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the currently bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the
currently bound pipeline was created with a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the corresponding element of thepColorAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline - If the
current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If the
current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView -
If the currently bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the value ofrasterizationSamplesfor the currently bound graphics pipeline -
If the current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the currently bound pipeline was created without aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command has been
called inside a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the currently bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current
render pass instance was begun with
cmdBeginRendering, the currently bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the
current render pass instance was begun with
cmdBeginRendering, 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, there is a graphics pipeline bound, depth test is enabled, depth write 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, 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
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, the bound graphics pipeline must not have been created with a non-zero value inPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled thencmdSetTessellationDomainOriginEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled thencmdSetDepthClampEnableEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage, thencmdSetTessellationDomainOriginEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClamp
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetDepthClampEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled thencmdSetPolygonModeEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetPolygonModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled thencmdSetRasterizationSamplesEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetRasterizationSamplesEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled thencmdSetSampleMaskEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetSampleMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToCoverageEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_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
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called in the current command buffer prior to this drawing command - 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 the bound graphics
pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled thencmdSetAlphaToOneEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAlphaToOneEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled thencmdSetLogicOpEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLogicOpEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetColorBlendEnableEXTfor any attachment set that attachment’s value inpColorBlendEnablestoTRUE, thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled thencmdSetRasterizationStreamEXTmust have been called in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage, thencmdSetRasterizationStreamEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetConservativeRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetConservativeRasterizationModeEXTin the current command buffer setconservativeRasterizationModetoCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state enabled thencmdSetDepthClipEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetDepthClipEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled thencmdSetSampleLocationsEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetSampleLocationsEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_blend_operation_advancedextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, then at least one ofcmdSetColorBlendEquationEXTandcmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled thencmdSetProvokingVertexModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetProvokingVertexModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineRasterizationModeEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPolygonModeEXTin the current command buffer setpolygonModetoPOLYGON_MODE_LINE, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologyto any line topology, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetLineStippleEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_EXTdynamic state enabled thencmdSetLineStippleEXTmust have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterizationextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetLineStippleEnableEXTin the current command buffer setstippledLineEnabletoTRUE, thencmdSetLineStippleEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled thencmdSetDepthClipNegativeOneToOneEXTmust have been called in the current command buffer prior to this drawing command - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage, then
cmdSetDepthClipNegativeOneToOneEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled thencmdSetViewportWScalingEnableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportWScalingEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled thencmdSetViewportSwizzleNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportSwizzleNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled thencmdSetCoverageToColorEnableNVmust have been called in the current command buffer prior to this drawing command - If the
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, thencmdSetCoverageToColorEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled thencmdSetCoverageToColorLocationNVmust have been called in the current command buffer prior to this drawing command - If the
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 most recent call tocmdSetCoverageToColorEnableNVin the current command buffer setcoverageToColorEnabletoTRUE, thencmdSetCoverageToColorLocationNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled thencmdSetCoverageModulationModeNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoverageModulationModeNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled thencmdSetCoverageModulationTableEnableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetCoverageModulationModeNVin the current command buffer set coverageModulationMode to any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled thencmdSetCoverageModulationTableNVmust have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the most recent call tocmdSetCoverageModulationTableEnableNVin the current command buffer setcoverageModulationTableEnabletoTRUE, thencmdSetCoverageModulationTableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled thencmdSetShadingRateImageEnableNVmust have been called in the current command buffer prior to this drawing command - If
the
pipelineFragmentShadingRate
feature is enabled, and a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer set rasterizerDiscardEnable toFALSE, thencmdSetFragmentShadingRateKHRmust have been called 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, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetShadingRateImageEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled thencmdSetRepresentativeFragmentTestEnableNVmust have been called in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled thencmdSetCoverageReductionModeNVmust have been called in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, and a shader object is bound to any graphics
stage, and the most recent call to
cmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetCoverageReductionModeNVmust have been called in the current command buffer prior to this drawing command - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTstate enabled and the last call tocmdSetColorBlendEnableEXTsetpColorBlendEnablesfor any attachment toTRUE, then for those attachments in the subpass the corresponding image view’s format features must containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust follow the rules for a zero-attachment subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to thePipelineMultisampleStateCreateInfo::rasterizationSamplesparameter used to create the bound graphics pipeline - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to therasterizationSamplesparameter in the last call tocmdSetRasterizationSamplesEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and 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 the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEnableEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEnableEXTcalls must specify an enable for all active color attachments in the current subpass - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorBlendEquationEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendEquationEXTcalls must specify the blend equations for all active color attachments in the current subpass where blending is enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetColorWriteMaskEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorWriteMaskEXTcalls must specify the color write mask for all active color attachments in the current subpass - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled thencmdSetColorBlendAdvancedEXTmust have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachmentandattachmentCountparameters ofcmdSetColorBlendAdvancedEXTcalls must specify the advanced blend equations for all active color attachments in the current subpass where blending is enabled -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled and the last calls tocmdSetColorBlendEnableEXTandcmdSetColorBlendAdvancedEXThave enabled advanced blending, then the number of active color attachments in the current subpass must not exceed advancedBlendMaxColorAttachments -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXTstate enabled, the last call tocmdSetRasterizationStreamEXTmust have set therasterizationStreamto zero - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesmember of thePipelineMultisampleStateCreateInfostructure the bound graphics pipeline has been created with - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If 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 tocmdSetSampleLocationsEnableEXT, and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If 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.sampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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.sampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::sampleLocationGridSize.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, thesampleLocationsEnablemember of aPipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnablein the bound graphics pipeline isTRUEorDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, then,sampleLocationsInfo.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 subpass - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the currently bound pipeline state, then the currentrasterizationSamplesmust be the same as the sample count of the depth/stencil attachment - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVstate enabled and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If 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 the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If this
VK_NV_coverage_reduction_modeextension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVandDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, the current coverage reduction modecoverageReductionMode, then the currentrasterizationSamples, and the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned bygetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_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 if the current subpass has any color attachments andrasterizationSamplesof the last call tocmdSetRasterizationSamplesEXTis greater than the number of color samples, then the pipelinesampleShadingEnablemust beFALSE - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_EXT, then the stippledRectangularLines feature must be enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_BRESENHAM_EXT, then the stippledBresenhamLines feature must be enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT, then the stippledSmoothLines feature must be enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_DEFAULT_EXT, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, conservativePointAndLineRasterization is not supported, and the effective primitive topology output by the last pre-rasterization shader stage is a line or point, then theconservativeRasterizationModeset by the last call tocmdSetConservativeRasterizationModeEXTmust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the currently bound
pipeline was created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_VERTEX_BIT,SHADER_STAGE_TESSELLATION_CONTROL_BIT,SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic statecmdSetAttachmentFeedbackLoopEnableEXTmust have been called 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 - 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 both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created without theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, a validShaderEXTmust be bound to theSHADER_STAGE_TASK_BIT_EXTstage - If there is no bound
graphics pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXTis bound the to theSHADER_STAGE_MESH_BIT_EXTstage, and thatShaderEXTwas created with theSHADER_CREATE_NO_TASK_SHADER_BIT_EXTflag, there must be noShaderEXTbound to theSHADER_STAGE_TASK_BIT_EXTstage - 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 been created 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_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the
attachmentFeedbackLoopDynamicState
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called in the current command buffer prior to this drawing command - 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 currently 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 - All vertex input bindings
accessed via vertex input variables declared in the vertex shader
entry point’s interface must have either valid or
NULL_HANDLEbuffers bound - If the
nullDescriptor
feature is not enabled, all vertex input bindings accessed via
vertex input variables declared in the vertex shader entry point’s
interface must not be
NULL_HANDLE - For a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ???
- If 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 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 the bound graphics
pipeline was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXTandDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic states enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound graphics
pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2EXTmust have been called in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2EXTmust not beNULL - If 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 in the current command buffer prior to this draw 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_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 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_VERTEX_BITstage and the most recent call tocmdSetPrimitiveTopologyin the current command buffer setprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LIST, or the bound graphics pipeline state was created with theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled thencmdSetPatchControlPointsEXTmust have been called 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 in the current command buffer prior to this drawing command - The bound graphics
pipeline must not have been created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no shader
object bound to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages - If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITbit 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 - An index buffer must be bound
- If
robustBufferAccess2
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 viacmdBindIndexBuffer - 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 support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
- Both of
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 | Graphics | Action |
See Also
Arguments
| :: forall io. 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_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
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 - For each set n that is statically
used by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutorDescriptorSetLayoutarray that was used to create the currentPipelineorShaderEXT, as described in ??? - For each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - Descriptors in each bound descriptor
set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors used by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound descriptor
buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - 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 the
shaderObject
is enabled, either a valid pipeline must be bound to the pipeline
bind point used by this command, or a valid combination of valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding 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 not
specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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 bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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_UNORM_KHRis 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
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM - If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM - If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,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
OpImageWeightedSampleQCOM,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
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 support compute operations - This command must only be called outside of a render pass instance
- 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 | Outside | Outside | Compute | Action |
See Also
Arguments
| :: forall io. 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_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
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 - For each set n that is
statically used by
a bound shader,
a descriptor set must have been bound to n at the same pipeline
bind point, with a
PipelineLayoutthat is compatible for set n, with thePipelineLayoutorDescriptorSetLayoutarray that was used to create the currentPipelineorShaderEXT, as described in ??? - For each push constant that
is statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - If the
maintenance4
feature is not enabled, then for each push constant that is
statically used by
a bound shader,
a push constant value must have been set for the same pipeline
bind point, with a
PipelineLayoutthat is compatible for push constants, with thePipelineLayoutorDescriptorSetLayoutandPushConstantRangearrays used to create the currentPipelineorShaderEXT, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If the descriptors used by
the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - 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 the
shaderObject
is enabled, either a valid pipeline must be bound to the pipeline
bind point used by this command, or a valid combination of valid and
NULL_HANDLEshader objects must be bound to every supported shader stage corresponding 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 not
specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command or anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If any stage of
the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforuniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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_ACCESS_EXTorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXTforstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If 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 bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*orOpImageSparseSample*instructions - If
a bound shader
accesses a
SamplerorImageViewobject that enables sampler Y′CBCR conversion, that object must not use theConstOffsetandOffsetoperands - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageViewis accessed as a result of this command, then the numeric type of the image view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORM_KHRis 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_UNORM_KHRis 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
OpImageWeightedSampleQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM - If
OpImageWeightedSampleQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM - If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - If
OpImageWeightedSampleQCOM,OpImageBoxFilterQCOM,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
OpImageWeightedSampleQCOM,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
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITbit 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 support compute operations - This command must only be called outside of a render pass instance
- 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 | Outside | Outside | Compute | Action |
See Also
Arguments
| :: forall io. 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 withBUFFER_USAGE_TRANSFER_SRC_BITusage flag - If
srcBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
dstBuffermust have been created withBUFFER_USAGE_TRANSFER_DST_BITusage flag - 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 support transfer, graphics, or compute operations - This command must only be called outside of a render pass instance
- 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 | Transfer Graphics Compute | Action |
See Also
Arguments
| :: forall io. 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.
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
maintenance5
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 - 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 - 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 image format then for each element ofpRegions,srcSubresource.aspectMaskanddstSubresource.aspectMaskmust match - If
srcImagehas a multi-planar image format, then for each element ofpRegions,srcSubresource.aspectMaskmust be a single valid multi-planar aspect mask bit - If
dstImagehas a multi-planar image format, then for each element ofpRegions,dstSubresource.aspectMaskmust be a single valid multi-planar aspect mask bit - If
srcImagehas a multi-planar image 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 image format and thesrcImagedoes not have a multi-planar image format, then for each element ofpRegions,srcSubresource.aspectMaskmust beIMAGE_ASPECT_COLOR_BIT - 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 be0andextent.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 maintenance5 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 the
maintenance5
feature is not enabled, the
layerCountmember ofsrcSubresourceordstSubresourcemust not beREMAINING_ARRAY_LAYERS - 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) 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 - If
dstImageis of typeIMAGE_TYPE_3D, then for each element ofpRegions,dstOffset.zand (extent.depth+dstOffset.z) 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 - For each element of
pRegions, if the sum ofdstOffset.xandextent.widthdoes not equal the width of the subresource specified bydstSubresource,extent.widthmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions, if the sum ofdstOffset.yandextent.heightdoes not equal the height of the subresource specified bydstSubresource,extent.heightmust be a multiple of the texel block extent height of theFormatofdstImage - For each element of
pRegions, if the sum ofdstOffset.zandextent.depthdoes not equal the depth of the subresource specified bydstSubresource,extent.depthmust be a multiple of the texel block extent depth of theFormatofdstImage - If the
aspectmember of any element ofpRegionsincludes any flag other thanIMAGE_ASPECT_STENCIL_BITorsrcImagewas not created with separate stencil usage,IMAGE_USAGE_TRANSFER_SRC_BITmust have been included in theImageCreateInfo::usageused to createsrcImage - If the
aspectmember of any element ofpRegionsincludes any flag other thanIMAGE_ASPECT_STENCIL_BITordstImagewas not created with separate stencil usage,IMAGE_USAGE_TRANSFER_DST_BITmust have been included in theImageCreateInfo::usageused to createdstImage - If the
aspectmember of any element ofpRegionsincludesIMAGE_ASPECT_STENCIL_BIT, andsrcImagewas created with separate stencil usage,IMAGE_USAGE_TRANSFER_SRC_BITmust have been included in theImageStencilUsageCreateInfo::stencilUsageused to createsrcImage - If the
aspectmember of any element ofpRegionsincludesIMAGE_ASPECT_STENCIL_BIT, anddstImagewas created with separate stencil usage,IMAGE_USAGE_TRANSFER_DST_BITmust have been included in theImageStencilUsageCreateInfo::stencilUsageused to createdstImage - If
srcImageis non-sparse then the image or the 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 the 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 support transfer, graphics, or compute operations - This command must only be called outside of a render pass instance
- 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 | Transfer Graphics Compute | Action |
See Also
VK_VERSION_1_0,
CommandBuffer, Image,
ImageCopy, ImageLayout
Arguments
| :: forall io. 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.
Note
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 source region specified by
each element of
pRegionsmust be a region that is contained withinsrcImage - The destination region
specified by each element of
pRegionsmust be a region that is contained withindstImage - 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 withIMAGE_USAGE_TRANSFER_SRC_BITusage flag - 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 - 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 withIMAGE_USAGE_TRANSFER_DST_BITusage flag - 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
srcSubresource.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 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 support graphics operations - This command must only be called outside of a render pass instance
- 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 | Graphics | Action |
See Also
VK_VERSION_1_0,
CommandBuffer,
Filter, Image,
ImageBlit, ImageLayout
Arguments
| :: forall io. 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 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 the 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 - The image
region specified by each element of
pRegionsmust be contained within the specifiedimageSubresourceofdstImage - 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, for each element ofpRegions, theaspectMaskmember ofimageSubresourcemust not beIMAGE_ASPECT_DEPTH_BITorIMAGE_ASPECT_STENCIL_BIT -
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 withBUFFER_USAGE_TRANSFER_SRC_BITusage flag - 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 withIMAGE_USAGE_TRANSFER_DST_BITusage flag -
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,imageOffset.xmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions,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, if the sum ofimageOffset.xandextent.widthdoes not equal the width of the subresource specified bysrcSubresource,extent.widthmust be a multiple of the texel block extent width of theFormatofdstImage - For each element of
pRegions, if the sum ofimageOffset.yandextent.heightdoes not equal the height of the subresource specified bysrcSubresource,extent.heightmust 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 image 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 support transfer, graphics, or compute operations - This command must only be called outside of a render pass instance
- 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 | Transfer Graphics Compute | Action |
See Also
VK_VERSION_1_0,
Buffer, BufferImageCopy,
CommandBuffer, Image,
ImageLayout
Arguments
| :: forall io. 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 the 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 - The image
region specified by each element of
pRegionsmust be contained within the specifiedimageSubresourceofsrcImage - 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 -
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 withIMAGE_USAGE_TRANSFER_SRC_BITusage flag - The
format features
of
srcImagemust containFORMAT_FEATURE_TRANSFER_SRC_BIT -
dstBuffermust have been created withBUFFER_USAGE_TRANSFER_DST_BITusage flag - 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,imageOffset.xmust be a multiple of the texel block extent width of theFormatofsrcImage - For each element of
pRegions,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, if the sum ofimageOffset.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 ofimageOffset.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 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 image 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 support transfer, graphics, or compute operations - This command must only be called outside of a render pass instance
- 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 | Transfer Graphics Compute | Action |
See Also
VK_VERSION_1_0,
Buffer, BufferImageCopy,
CommandBuffer, Image,
ImageLayout
Arguments
| :: forall io. 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.
Note
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 is only recommended for very small amounts of data, and is why it is limited to only 65536 bytes.
Applications can work around this by issuing multiple
cmdUpdateBuffer commands to different ranges of the same buffer, but
it is strongly recommended that they should not.
The source data is copied from the user pointer 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 withBUFFER_USAGE_TRANSFER_DST_BITusage flag - 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 support transfer, graphics, or compute operations - This command must only be called outside of a render pass instance
- 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 | Transfer Graphics Compute | Action |
See Also
Arguments
| :: forall io. 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. The
BUFFER_USAGE_TRANSFER_DST_BIT
must be specified in usage of
BufferCreateInfo in order for the buffer to be
compatible with cmdFillBuffer.
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 withBUFFER_USAGE_TRANSFER_DST_BITusage flag - 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 support transfer, graphics or compute operations - This command must only be called outside of a render pass instance
- 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 | Transfer Graphics Compute | Action |
See Also
Arguments
| :: forall io. 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 withIMAGE_USAGE_TRANSFER_DST_BITusage flag -
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
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 support graphics, or compute operations - This command must only be called outside of a render pass instance
- 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 | Graphics Compute | Action |
See Also
VK_VERSION_1_0,
ClearColorValue, CommandBuffer,
Image,
ImageLayout,
ImageSubresourceRange
cmdClearDepthStencilImage Source #
Arguments
| :: forall io. 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,IMAGE_USAGE_TRANSFER_DST_BITmust have been included in theImageStencilUsageCreateInfo::stencilUsageused to createimage - If the
aspectmember of any element ofpRangesincludesIMAGE_ASPECT_STENCIL_BIT, andimagewas not created with separate stencil usage,IMAGE_USAGE_TRANSFER_DST_BITmust have been included in theImageCreateInfo::usageused to createimage - If the
aspectmember of any element ofpRangesincludesIMAGE_ASPECT_DEPTH_BIT,IMAGE_USAGE_TRANSFER_DST_BITmust have been included in theImageCreateInfo::usageused to createimage - 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 support graphics operations - This command must only be called outside of a render pass instance
- 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 | Graphics | Action |
See Also
VK_VERSION_1_0,
ClearDepthStencilValue, CommandBuffer,
Image,
ImageLayout,
ImageSubresourceRange
Arguments
| :: forall io. 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.
Note
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 - 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
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 support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
-
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 | Graphics | Action |
See Also
Arguments
| :: forall io. 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 formats are floating-point or normalized types, the sample values for each pixel are resolved in an implementation-dependent manner. If the source formats are integer types, 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 - The
format features
of
dstImagemust containFORMAT_FEATURE_COLOR_ATTACHMENT_BIT - 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 withIMAGE_USAGE_TRANSFER_SRC_BITusage flag - The
format features
of
srcImagemust containFORMAT_FEATURE_TRANSFER_SRC_BIT -
dstImagemust have been created withIMAGE_USAGE_TRANSFER_DST_BITusage flag - The
format features
of
dstImagemust containFORMAT_FEATURE_TRANSFER_DST_BIT
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 support graphics operations - This command must only be called outside of a render pass instance
- 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 | Graphics | Action |
See Also
VK_VERSION_1_0,
CommandBuffer, Image,
ImageLayout, ImageResolve
Arguments
| :: forall io. 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 the
shadingRateImage
or
attachmentFragmentShadingRate
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
rayTracingPipeline feature
are enabled,
stageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_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 support graphics, compute, decode, or encode operations - This command must only be called outside of a render pass instance
- 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 | Graphics Compute Decode Encode | Synchronization |
See Also
Arguments
| :: forall io. 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 the
shadingRateImage
or
attachmentFragmentShadingRate
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
rayTracingPipeline feature
are enabled,
stageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_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 support graphics, compute, decode, or encode operations - This command must only be called outside of a render pass instance
- 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 | Graphics Compute Decode Encode | Synchronization |
See Also
Arguments
| :: forall io. 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.
Note
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 the
shadingRateImage
or
attachmentFragmentShadingRate
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
rayTracingPipeline feature
are enabled,
srcStageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_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 the
shadingRateImage
or
attachmentFragmentShadingRate
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
rayTracingPipeline feature
are enabled,
dstStageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_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 any 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 any 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 any 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 any 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 - 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
cmdWaitEventsis being 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
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 support graphics, compute, decode, or encode operations -
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 | Graphics Compute Decode Encode | Synchronization |
See Also
VK_VERSION_1_0,
BufferMemoryBarrier,
CommandBuffer, Event,
ImageMemoryBarrier,
MemoryBarrier,
PipelineStageFlags
Arguments
| :: forall io. 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
| :: forall io. 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 an
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 the
shadingRateImage
or
attachmentFragmentShadingRate
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
rayTracingPipeline feature
are enabled,
srcStageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_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 the
shadingRateImage
or
attachmentFragmentShadingRate
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
rayTracingPipeline feature
are enabled,
dstStageMaskmust not containPIPELINE_STAGE_RAY_TRACING_SHADER_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 any
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 any
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 any
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 any
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, 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 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, 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 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
cmdPipelineBarrieris called within a render pass instance and none of the shaderTileImageColorReadAccess, shaderTileImageDepthReadAccess, shaderTileImageStencilReadAccess features are enabled, the render pass must not have been started withcmdBeginRendering - If
cmdPipelineBarrieris called within a render pass instance started withcmdBeginRendering, it must adhere to the restrictions in Explicit Render Pass Tile Image Access Synchronization - 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
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 support transfer, graphics, compute, decode, or encode operations
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 | Transfer Graphics Compute Decode Encode | Synchronization |
See Also
VK_VERSION_1_0,
BufferMemoryBarrier,
CommandBuffer,
DependencyFlags,
ImageMemoryBarrier,
MemoryBarrier,
PipelineStageFlags
Arguments
| :: forall io. 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.
Note
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 createqueryPoolwasVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, then theCommandPoolthatcommandBufferwas allocated from must have been created with a queue family index that supports result status queries, as indicated by VkQueueFamilyQueryResultStatusPropertiesKHR::queryResultStatusSupport - If there is a bound video session, then there must be no active queries
- If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHRand there is a bound video session, thenqueryPoolmust have been created with a VkVideoProfileInfoKHR structure included in thepNextchain ofQueryPoolCreateInfoidentical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfilethe bound video session was created with - If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then theCommandPoolthatcommandBufferwas allocated from must support video encode operations - If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be a bound video session - If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHRand there is a bound video session, thenqueryPoolmust have been created with a VkVideoProfileInfoKHR structure included in thepNextchain ofQueryPoolCreateInfoidentical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfilethe bound video session was created with - If the
queryTypeused to createqueryPoolwas notVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHRorVK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR, then there must be no bound video session -
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 support graphics, compute, decode, or encode operations - 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 | Graphics Compute Decode Encode | Action State |
See Also
VK_VERSION_1_0,
CommandBuffer,
QueryControlFlags,
QueryPool,
cmdBeginQueryIndexedEXT,
cmdEndQuery,
cmdEndQueryIndexedEXT
cmdUseQuery :: forall io r. 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
| :: forall io. 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 - If called outside of a render pass
instance, the corresponding
cmdBeginQuery* command must have been called outside of a render pass instance
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
queryPoolmust be a validQueryPoolhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics, compute, decode, or encode operations - 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 | Graphics Compute Decode Encode | Action State |
See Also
VK_VERSION_1_0,
CommandBuffer,
QueryPool, cmdBeginQuery,
cmdBeginQueryIndexedEXT,
cmdEndQueryIndexedEXT
Arguments
| :: forall io. 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.
Note
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 support graphics, compute, decode, encode, or optical flow operations - This command must only be called outside of a render pass instance
- 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 | Graphics Compute Decode Encode Opticalflow | Action |
See Also
Arguments
| :: forall io. 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.
Note
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_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_EXT
time domain. If an overflow occurs, the timestamp
value must wrap back to zero.
Note
Comparisons between timestamps should be done between timestamps where
they are guaranteed to not decrease. For example, subtracting an older
timestamp from a newer one to determine the execution time of a sequence
of commands is only a reliable measurement if the two timestamp writes
were performed in the same submission, or if the writes were performed
on the same logical device and VK_EXT_calibrated_timestamps is
enabled.
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 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. If two timestamps are written in the same subpass, the sum of the execution time of all views between those commands is the difference between the first query written by each command.
- All N queries are timestamp values. If two timestamps are written in the same subpass, the sum of the execution time of all views between those commands is the sum of the difference between corresponding queries written by each command. The difference between corresponding queries may be the execution time of a single view.
In either case, the application can sum the differences between all N queries to determine the total execution time.
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 the
shadingRateImage
or
attachmentFragmentShadingRate
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 the
VK_NV_ray_tracing
extension or
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
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 support transfer, graphics, compute, decode, encode, or optical flow operations - 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 | Transfer Graphics Compute Decode Encode Opticalflow | Action |
See Also
VK_VERSION_1_0,
CommandBuffer,
PipelineStageFlagBits,
QueryPool
cmdCopyQueryPoolResults Source #
Arguments
| :: forall io. 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.
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 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,
cmdEndQueryIndexedEXT,
cmdWriteTimestamp2,
cmdEndQuery, 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
-
dstOffsetmust be less than the size ofdstBuffer -
firstQuerymust be less than the number of queries inqueryPool - The sum of
firstQueryandqueryCountmust be less than or equal to the number of queries inqueryPool - If
QUERY_RESULT_64_BITis not set inflagsthendstOffsetandstridemust be multiples of4 - If
QUERY_RESULT_64_BITis set inflagsthendstOffsetandstridemust be multiples of8 -
dstBuffermust have enough storage, fromdstOffset, to contain the result of each query, as described here -
dstBuffermust have been created withBUFFER_USAGE_TRANSFER_DST_BITusage flag - If
dstBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_TIMESTAMP,flagsmust not containQUERY_RESULT_PARTIAL_BIT - If the
queryTypeused to createqueryPoolwasQUERY_TYPE_PERFORMANCE_QUERY_KHR,PhysicalDevicePerformanceQueryPropertiesKHR::allowCommandBufferQueryCopiesmust beTRUE - 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 submitted once for each pass as retrieved via a call togetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR -
cmdCopyQueryPoolResultsmust not be called if thequeryTypeused to createqueryPoolwasQUERY_TYPE_PERFORMANCE_QUERY_INTEL - If the
queryTypeused to createqueryPoolwasVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR, thenflagsmust includeVK_QUERY_RESULT_WITH_STATUS_BIT_KHR - If
flagsincludesVK_QUERY_RESULT_WITH_STATUS_BIT_KHR, then it must not includeQUERY_RESULT_WITH_AVAILABILITY_BIT - 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 support graphics, or compute operations - This command must only be called outside of a render pass instance
- 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 | Graphics Compute | Action |
See Also
VK_VERSION_1_0,
Buffer, CommandBuffer,
DeviceSize,
QueryPool,
QueryResultFlags
Arguments
| :: forall io. 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.
Note
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
- 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 support graphics, or compute operations - 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 | Graphics Compute | State |
See Also
VK_VERSION_1_0,
CommandBuffer,
PipelineLayout,
ShaderStageFlags
Arguments
| :: forall a 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 ausagevalue includingIMAGE_USAGE_COLOR_ATTACHMENT_BIT
- 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 ausagevalue includingIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT - 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 ausagevalue includingIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT - 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 ausagevalue includingIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT - 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 ausagevalue includingIMAGE_USAGE_SAMPLED_BITorIMAGE_USAGE_INPUT_ATTACHMENT_BIT - 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 ausagevalue includingIMAGE_USAGE_TRANSFER_SRC_BIT - 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 ausagevalue includingIMAGE_USAGE_TRANSFER_DST_BIT - 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 ausagevalue including either theIMAGE_USAGE_COLOR_ATTACHMENT_BITorIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BITand either theIMAGE_USAGE_INPUT_ATTACHMENT_BITorIMAGE_USAGE_SAMPLED_BITusage bits - 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 ausagevalue theIMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXTusage bit
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 support graphics operations - This command must only be called outside of a render pass instance
- 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 | Graphics | Action State Synchronization |
See Also
VK_VERSION_1_0,
CommandBuffer, RenderPassBeginInfo,
SubpassContents
cmdUseRenderPass :: forall a 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
| :: forall io. 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 support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
-
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 | Graphics | Action State Synchronization |
See Also
Arguments
| :: forall io. 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.
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
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called inside of a render pass instance
- This command must only be called outside of a video coding scope
-
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 | Graphics | Action State Synchronization |
See Also
Arguments
| :: forall io. 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
cmdExecuteCommandsis being called within a render pass instance, each element ofpCommandBuffersmust have been recorded with theCOMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT - If
cmdExecuteCommandsis being called within a render pass instance, and any element ofpCommandBufferswas recorded withCommandBufferInheritanceInfo::framebuffernot equal toNULL_HANDLE, thatFramebuffermust match theFramebufferused in the current render pass instance - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderPass, itscontentsparameter must have been set toSUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS, orSUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderPass, each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceInfo::subpassset to the index of the subpass which the given command buffer will be executed in - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderPass, 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
cmdExecuteCommandsis being called within a render pass instance that includedRenderPassTransformBeginInfoQCOMin thepNextchain ofRenderPassBeginInfo, then each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceRenderPassTransformInfoQCOMin thepNextchain ofCommandBufferBeginInfo - If
cmdExecuteCommandsis being called within a render pass instance that includedRenderPassTransformBeginInfoQCOMin thepNextchain ofRenderPassBeginInfo, then each element ofpCommandBuffersmust have been recorded withCommandBufferInheritanceRenderPassTransformInfoQCOM::transformidentical toRenderPassTransformBeginInfoQCOM::transform - If
cmdExecuteCommandsis being called within a render pass instance that includedRenderPassTransformBeginInfoQCOMin 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
cmdExecuteCommandsis being called within a render pass instance and any recorded command incommandBufferin 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
cmdExecuteCommandsis being called within a render pass instance and any recorded command incommandBufferin 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
cmdExecuteCommandsis being called within a render pass instance and any recorded command in a given element ofpCommandBufferswill 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
cmdExecuteCommandsis being called within a render pass instance and any recorded command in a given element ofpCommandBufferswill 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, itsRenderingInfo::flagsparameter must have includedRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, the render passes specified in thepBeginInfo->pInheritanceInfo->renderPassmembers of thebeginCommandBuffercommands used to begin recording each element ofpCommandBuffersmust beNULL_HANDLE - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, thecolorAttachmentCountmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to theRenderingInfo::colorAttachmentCountparameter tocmdBeginRendering - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderingand 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderingand 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, theviewMaskmember of theCommandBufferInheritanceRenderingInfostructure included in thepNextchain ofCommandBufferBeginInfo::pInheritanceInfoused to begin recording each element ofpCommandBuffersmust be equal to theRenderingInfo::viewMaskparameter tocmdBeginRendering - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderingand 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderingand 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderingand 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderingand thepNextchain ofCommandBufferInheritanceInfodoes not include aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, 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
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderingand thepNextchain ofCommandBufferInheritanceInfodoes not include aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, if theRenderingInfo::pDepthAttachment->imageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value ofCommandBufferInheritanceRenderingInfo::rasterizationSamplesmust be equal to the sample count used to create that image view - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderingand thepNextchain ofCommandBufferInheritanceInfodoes not include aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, if theRenderingInfo::pStencilAttachment->imageViewparameter tocmdBeginRenderingis notNULL_HANDLE, the value ofCommandBufferInheritanceRenderingInfo::rasterizationSamplesmust be equal to the sample count used to create that image view - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRendering, with any color attachment using a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID, thepNextchain ofCommandBufferInheritanceInfoused to create each element ofpCommandBuffersmust include aExternalFormatANDROIDstructure with aexternalFormatmatching that used to create the resolve attachment in the render pass - If
cmdExecuteCommandsis being called within a render pass instance begun withcmdBeginRenderingwith any color attachment using a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_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, the
command buffer nesting level
of each element of
pCommandBuffersmust 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
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 support transfer, graphics, or compute operations - 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 | Transfer Graphics Compute | Indirection |
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,
CopyMemoryToImageIndirectCommandNV,
ImageAspectFlags, ImageBlit,
ImageBlit2,
ImageCopy,
ImageCopy2,
ImageResolve,
ImageResolve2,
ImageToMemoryCopyEXT,
MemoryToImageCopyEXT,
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 the
maintenance5
feature is not enabled, the
layerCountmember ofsrcSubresourceordstSubresourcemust not beREMAINING_ARRAY_LAYERS - 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 the
maintenance5
feature is not enabled, the
layerCountmember ofsrcSubresourceordstSubresourcemust not beREMAINING_ARRAY_LAYERS - 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 set to 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.
Note
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
DeviceGroupRenderPassBeginInfo::deviceRenderAreaCountis 0,renderArea.extent.widthmust be greater than 0 - If
DeviceGroupRenderPassBeginInfo::deviceRenderAreaCountis 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, 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.
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,RenderPassSampleLocationsBeginInfoEXT, orRenderPassTransformBeginInfoQCOM - The
sTypevalue of each struct 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,
cmdBeginRenderPass2KHR
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
See Also
VK_VERSION_1_0,
AccelerationStructureGeometryTrianglesDataKHR,
AccelerationStructureTrianglesDisplacementMicromapNV,
AccelerationStructureTrianglesOpacityMicromapEXT,
BindIndexBufferIndirectCommandNV,
GeometryTrianglesNV,
IndirectCommandsLayoutTokenNV,
cmdBindIndexBuffer,
cmdBindIndexBuffer2KHR
Bundled Patterns
| pattern INDEX_TYPE_UINT16 :: IndexType |
|
| pattern INDEX_TYPE_UINT32 :: IndexType |
|
| pattern INDEX_TYPE_UINT8_EXT :: IndexType |
|
| pattern INDEX_TYPE_NONE_KHR :: IndexType |
|
Instances
| Storable IndexType Source # | |
Defined in Vulkan.Core10.Enums.IndexType | |
| Read IndexType Source # | |
| Show IndexType Source # | |
| Eq IndexType Source # | |
| Ord 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
See Also
VK_VERSION_1_0,
SubpassBeginInfo,
cmdBeginRenderPass,
cmdNextSubpass
Constructors
| SubpassContents Int32 |
Bundled Patterns
| pattern SUBPASS_CONTENTS_INLINE :: SubpassContents |
|
| pattern SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS :: SubpassContents |
|
| pattern SUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT :: SubpassContents |
|
Instances
newtype StencilFaceFlagBits Source #
VkStencilFaceFlagBits - Bitmask specifying sets of stencil state for which to update the compare mask
See Also
Constructors
| StencilFaceFlagBits Flags |
Bundled Patterns
| pattern STENCIL_FACE_FRONT_BIT :: StencilFaceFlagBits |
|
| pattern STENCIL_FACE_BACK_BIT :: StencilFaceFlagBits |
|
| pattern STENCIL_FACE_FRONT_AND_BACK :: StencilFaceFlagBits |
|