Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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
:: 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
pipelineBindPoint
isPIPELINE_BIND_POINT_COMPUTE
, theCommandPool
thatcommandBuffer
was allocated from must support compute operations
- If
pipelineBindPoint
isPIPELINE_BIND_POINT_GRAPHICS
, theCommandPool
thatcommandBuffer
was allocated from must support graphics operations - If
pipelineBindPoint
isPIPELINE_BIND_POINT_COMPUTE
,pipeline
must be a compute pipeline - If
pipelineBindPoint
isPIPELINE_BIND_POINT_GRAPHICS
,pipeline
must be a graphics pipeline - If the
variableMultisampleRate
feature is not supported,
pipeline
is 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
::variableSampleLocations
isFALSE
, andpipeline
is a graphics pipeline created with aPipelineSampleLocationsStateCreateInfoEXT
structure having itssampleLocationsEnable
member set toTRUE
but withoutDYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
enabled then the current render pass instance must have been begun by specifying aRenderPassSampleLocationsBeginInfoEXT
structure whosepPostSubpassSampleLocations
member contains an element with asubpassIndex
matching the current subpass index and thesampleLocationsInfo
member of that element must match thesampleLocationsInfo
specified inPipelineSampleLocationsStateCreateInfoEXT
when the pipeline was created - This command must not be recorded when transform feedback is active
- If
pipelineBindPoint
isPIPELINE_BIND_POINT_RAY_TRACING_KHR
, theCommandPool
thatcommandBuffer
was allocated from must support compute operations - If
pipelineBindPoint
isPIPELINE_BIND_POINT_RAY_TRACING_KHR
,pipeline
must be a ray tracing pipeline - If
pipelineBindPoint
isPIPELINE_BIND_POINT_RAY_TRACING_KHR
,commandBuffer
must not be a protected command buffer - If the
pipelineProtectedAccess
feature is enabled, and
commandBuffer
is a protected command buffer,pipeline
must have been created withoutPIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT
- If the
pipelineProtectedAccess
feature is enabled, and
commandBuffer
is not a protected command buffer,pipeline
must have been created withoutPIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT
-
pipeline
must not have been created withPIPELINE_CREATE_LIBRARY_BIT_KHR
set - If
commandBuffer
is a secondary command buffer withCommandBufferInheritanceViewportScissorInfoNV
::viewportScissor2D
enabled andpipelineBindPoint
isPIPELINE_BIND_POINT_GRAPHICS
, then thepipeline
must have been created withDYNAMIC_STATE_VIEWPORT_WITH_COUNT
orDYNAMIC_STATE_VIEWPORT
, andDYNAMIC_STATE_SCISSOR_WITH_COUNT
orDYNAMIC_STATE_SCISSOR
enabled - If
commandBuffer
is a secondary command buffer withCommandBufferInheritanceViewportScissorInfoNV
::viewportScissor2D
enabled andpipelineBindPoint
isPIPELINE_BIND_POINT_GRAPHICS
andpipeline
was created withPipelineDiscardRectangleStateCreateInfoEXT
structure and itsdiscardRectangleCount
member is not0
, or the pipeline was created withDYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT
enabled, then the pipeline must have been created withDYNAMIC_STATE_DISCARD_RECTANGLE_EXT
enabled - If
pipelineBindPoint
isPIPELINE_BIND_POINT_GRAPHICS
and the provokingVertexModePerPipeline limit isFALSE
, then pipeline’sPipelineRasterizationProvokingVertexStateCreateInfoEXT
::provokingVertexMode
must 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
pipelineBindPoint
isPIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI
, theCommandPool
thatcommandBuffer
was allocated from must support compute operations - If
pipelineBindPoint
isPIPELINE_BIND_POINT_SUBPASS_SHADING_HUAWEI
,pipeline
must be a subpass shading pipeline - If
pipelineBindPoint
isPIPELINE_BIND_POINT_GRAPHICS
,pipeline
must have been created withoutPIPELINE_CREATE_LIBRARY_BIT_KHR
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pipelineBindPoint
must be a validPipelineBindPoint
value -
pipeline
must be a validPipeline
handle -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics, or compute operations - This command must only be called outside of a video coding scope
- Both of
commandBuffer
, andpipeline
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
firstViewport
andviewportCount
must be between1
andPhysicalDeviceLimits
::maxViewports
, inclusive
- If the
multiViewport
feature is not enabled,
firstViewport
must be0
- If the
multiViewport
feature is not enabled,
viewportCount
must be1
-
commandBuffer
must not haveCommandBufferInheritanceViewportScissorInfoNV
::viewportScissor2D
enabled
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pViewports
must be a valid pointer to an array ofviewportCount
validViewport
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
-
viewportCount
must be greater than0
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
firstScissor
andscissorCount
must be between1
andPhysicalDeviceLimits
::maxViewports
, inclusive
- If the
multiViewport
feature is not enabled,
firstScissor
must be0
- If the
multiViewport
feature is not enabled,
scissorCount
must be1
- The
x
andy
members ofoffset
member of any element ofpScissors
must 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
::viewportScissor2D
enabled, then this function must not be called
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pScissors
must be a valid pointer to an array ofscissorCount
Rect2D
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
-
scissorCount
must be greater than0
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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,
lineWidth
must be1.0
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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,
depthBiasClamp
must be0.0
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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_unrestricted
extension is not enabledminDepthBounds
must be between0.0
and1.0
, inclusive
- If the
VK_EXT_depth_range_unrestricted
extension is not enabledmaxDepthBounds
must be between0.0
and1.0
, inclusive
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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)
-
commandBuffer
must be a validCommandBuffer
handle
-
faceMask
must be a valid combination ofStencilFaceFlagBits
values -
faceMask
must not be0
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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)
-
commandBuffer
must be a validCommandBuffer
handle
-
faceMask
must be a valid combination ofStencilFaceFlagBits
values -
faceMask
must not be0
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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)
-
commandBuffer
must be a validCommandBuffer
handle
-
faceMask
must be a valid combination ofStencilFaceFlagBits
values -
faceMask
must not be0
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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_BIT
bit 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
pDescriptorSets
must have been allocated with aDescriptorSetLayout
that matches (is the same as, or identically defined as) theDescriptorSetLayout
at set n inlayout
, where n is the sum offirstSet
and the index intopDescriptorSets
-
dynamicOffsetCount
must be equal to the total number of dynamic descriptors inpDescriptorSets
- The sum of
firstSet
anddescriptorSetCount
must be less than or equal toPipelineLayoutCreateInfo
::setLayoutCount
provided whenlayout
was created -
pipelineBindPoint
must be supported by thecommandBuffer
’s parentCommandPool
’s queue family - Each element of
pDynamicOffsets
which corresponds to a descriptor binding with typeDESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
must be a multiple ofPhysicalDeviceLimits
::minUniformBufferOffsetAlignment
- Each element of
pDynamicOffsets
which corresponds to a descriptor binding with typeDESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
must 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_SIZE
thenpDynamicOffsets
which corresponds to the descriptor binding must be 0 - Each element of
pDescriptorSets
must not have been allocated from aDescriptorPool
with theDESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT
flag set - If
graphicsPipelineLibrary
is not enabled, each element of
pDescriptorSets
must be a validDescriptorSet
- Each element of
pDescriptorSets
must have been allocated with aDescriptorSetLayout
which was not created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pipelineBindPoint
must be a validPipelineBindPoint
value -
layout
must be a validPipelineLayout
handle -
pDescriptorSets
must be a valid pointer to an array ofdescriptorSetCount
valid orNULL_HANDLE
DescriptorSet
handles - If
dynamicOffsetCount
is not0
,pDynamicOffsets
must be a valid pointer to an array ofdynamicOffsetCount
uint32_t
values -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics, or compute operations - This command must only be called outside of a video coding scope
-
descriptorSetCount
must be greater than0
- Each of
commandBuffer
,layout
, and the elements ofpDescriptorSets
that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: forall io. MonadIO io | |
=> CommandBuffer |
|
-> Buffer |
|
-> ("offset" ::: DeviceSize) |
|
-> IndexType |
|
-> io () |
vkCmdBindIndexBuffer - Bind an index buffer to a command buffer
Valid Usage
- The sum of
offset
and the base address of the range ofDeviceMemory
object that is backingbuffer
, must be a multiple of the size of the type indicated byindexType
-
buffer
must have been created with theBUFFER_USAGE_INDEX_BUFFER_BIT
flag - If
buffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
indexType
must not beINDEX_TYPE_NONE_KHR
- If
indexType
isINDEX_TYPE_UINT8_EXT
, the indexTypeUint8 feature must be enabled
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
buffer
must be a validBuffer
handle -
indexType
must be a validIndexType
value -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
- Both of
buffer
, andcommandBuffer
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
-
firstBinding
must be less thanPhysicalDeviceLimits
::maxVertexInputBindings
- The sum of
firstBinding
andbindingCount
must be less than or equal toPhysicalDeviceLimits
::maxVertexInputBindings
- All elements of
pOffsets
must be less than the size of the corresponding element inpBuffers
- All elements of
pBuffers
must have been created with theBUFFER_USAGE_VERTEX_BUFFER_BIT
flag - Each element of
pBuffers
that is non-sparse must be bound completely and contiguously to a singleDeviceMemory
object - If the
nullDescriptor
feature is not enabled, all elements of
pBuffers
must not beNULL_HANDLE
- If an element of
pBuffers
isNULL_HANDLE
, then the corresponding element ofpOffsets
must be zero
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pBuffers
must be a valid pointer to an array ofbindingCount
valid orNULL_HANDLE
Buffer
handles -
pOffsets
must be a valid pointer to an array ofbindingCount
DeviceSize
values -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics operations - This command must only be called outside of a video coding scope
-
bindingCount
must be greater than0
- Both of
commandBuffer
, and the elements ofpBuffers
that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
Sampler
created withmagFilter
orminFilter
equal toFILTER_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Sampler
created withmipmapMode
equal toSAMPLER_MIPMAP_MODE_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageView
is sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
- If a
ImageView
is 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_BUFFER
descriptor 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
ImageView
is sampled withFILTER_CUBIC_EXT
as 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
ImageView
is sampled withFILTER_CUBIC_EXT
as a result of this command, it must not have aImageViewType
ofIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
, orIMAGE_VIEW_TYPE_CUBE_ARRAY
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must have aImageViewType
and format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubic
returned bygetPhysicalDeviceImageFormatProperties2
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
with a reduction mode of eitherSAMPLER_REDUCTION_MODE_MIN
orSAMPLER_REDUCTION_MODE_MAX
as a result of this command must have aImageViewType
and format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubicMinmax
returned bygetPhysicalDeviceImageFormatProperties2
- If the
cubicRangeClamp
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must not have aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
- Any
ImageView
being sampled with aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
as a result of this command must sample withFILTER_CUBIC_EXT
- If the
selectableCubicWeights
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must haveSamplerCubicWeightsCreateInfoQCOM
::cubicWeights
equal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
- Any
Image
created with aImageCreateInfo
::flags
containingIMAGE_CREATE_CORNER_SAMPLED_BIT_NV
sampled as a result of this command must only be sampled using aSamplerAddressMode
ofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
- For any
ImageView
being written as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- For any
ImageView
being read as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
- For any
BufferView
being written as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- Any
BufferView
being read as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
then 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
PipelineLayout
that is compatible for set n, with thePipelineLayout
orDescriptorSetLayout
array that was used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, as described in ??? - Descriptors in each bound descriptor
set, specified via
cmdBindDescriptorSets
, must be valid if they are statically used by thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If the descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdBindDescriptorSets
, the boundPipeline
must 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 thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- Descriptors in bound descriptor buffers,
specified via
cmdSetDescriptorBufferOffsetsEXT
, must be valid if they are dynamically used by anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT
, the boundPipeline
must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If a descriptor is dynamically used with
a
Pipeline
created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, the descriptor memory must be resident - If a descriptor is dynamically used with
a
ShaderEXT
created with aDescriptorSetLayout
that 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_HANDLE
shader 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
Pipeline
object bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used to sample from anyImage
with aImageView
of the typeIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
,IMAGE_VIEW_TYPE_1D_ARRAY
,IMAGE_VIEW_TYPE_2D_ARRAY
orIMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
foruniformBuffers
, 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
ShaderEXT
bound 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
forstorageBuffers
, 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
ShaderEXT
bound 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
commandBuffer
is 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
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*
orOpImageSparseSample*
instructions - If
a bound shader
accesses a
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must not use theConstOffset
andOffset
operands - If a
ImageView
is accessed as a result of this command, then the image view’sviewType
must match theDim
operand of theOpTypeImage
as described in ??? - If a
ImageView
is accessed as a result of this command, then the numeric type of the image view’sformat
and theSampled
Type
operand of theOpTypeImage
must match - If a
ImageView
created with a format other thanFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the image view’s format - If a
ImageView
created with the formatFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have four components - If a
BufferView
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the buffer view’s format - If a
ImageView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
ImageView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If a
BufferView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
BufferView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If the
sparseImageInt64Atomics
feature is not enabled,
Image
objects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If the
sparseImageInt64Atomics
feature is not enabled,
Buffer
objects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If
OpImageWeightedSampleQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
- If
OpImageWeightedSampleQCOM
uses aImageView
as 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
OpImageBoxFilterQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
- If
OpImageBlockMatchSSDQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
or 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format must be a single-component format. - If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
read 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
renderPass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound toPIPELINE_BIND_POINT_GRAPHICS
- The subpass index of the current
render pass must be equal to the
subpass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound 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
OpTypeImage
variable with aDim
operand ofSubpassData
, it must be decorated with anInputAttachmentIndex
that corresponds to a valid input attachment in the current subpass - Input attachment views accessed in a
subpass must be created with the same
Format
as the corresponding subpass definition, and be created with aImageView
that is compatible with the attachment referenced by the subpass'pInputAttachments
[InputAttachmentIndex
] in the currently boundFramebuffer
as 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_EXT
image layout, and either:- the
PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_COLOR_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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_EXT
image layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_DEPTH_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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_EXT
image layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_STENCIL_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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
writeMask
are 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_VIEWPORT
dynamic state enabled thencmdSetViewport
must have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_SCISSOR
dynamic state enabled thencmdSetScissor
must have 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_WIDTH
dynamic state enabled thencmdSetLineWidth
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
,cmdSetLineWidth
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology,cmdSetLineWidth
must 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_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
,cmdSetLineWidth
must have 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
dynamic state enabled thencmdSetDepthBias
orcmdSetDepthBias2EXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthBiasEnable
in the current command buffer setdepthBiasEnable
toTRUE
,cmdSetDepthBias
orcmdSetDepthBias2EXT
must have 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_CONSTANTS
dynamic state enabled thencmdSetBlendConstants
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetColorBlendEnableEXT
in the current command buffer set any element ofpColorBlendEnables
toTRUE
, and the most recent call tocmdSetColorBlendEquationEXT
in the current command buffer set the same element ofpColorBlendEquations
to aColorBlendEquationEXT
structure with anyBlendFactor
member with a value ofBLEND_FACTOR_CONSTANT_COLOR
,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
,BLEND_FACTOR_CONSTANT_ALPHA
, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
,cmdSetBlendConstants
must have 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
dynamic state enabled, and if the currentdepthBoundsTestEnable
state isTRUE
, thencmdSetDepthBounds
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthBoundsTestEnable
in the current command buffer setdepthBoundsTestEnable
toTRUE
, thencmdSetDepthBounds
must have 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_MASK
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilCompareMask
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilCompareMask
must have 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_MASK
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilWriteMask
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilWriteMask
must have 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_REFERENCE
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilReference
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilReference
must 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
::sampleLocationsEnable
set toTRUE
and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
bit set - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
dynamic state enabled thencmdSetSampleLocationsEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetSampleLocationsEnableEXT
in the current command buffer setsampleLocationsEnable
toTRUE
, thencmdSetSampleLocationsEXT
must have 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_EXT
state enabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
member of thePipelineMultisampleStateCreateInfo
structure the bound graphics pipeline has been created with - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_CULL_MODE
dynamic state enabled thencmdSetCullMode
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCullMode
must have 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_FACE
dynamic state enabled thencmdSetFrontFace
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetFrontFace
must have 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_ENABLE
dynamic state enabled thencmdSetDepthTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthTestEnable
must have 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_ENABLE
dynamic state enabled thencmdSetDepthWriteEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthWriteEnable
must have 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_OP
dynamic state enabled thencmdSetDepthCompareOp
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthTestEnable
in the current command buffer setdepthTestEnable
toTRUE
, thencmdSetDepthCompareOp
must have 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_ENABLE
dynamic state enabled thencmdSetDepthBoundsTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then thecmdSetDepthBoundsTestEnable
must have 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_ENABLE
dynamic state enabled thencmdSetStencilTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetStencilTestEnable
must have 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_OP
dynamic state enabled thencmdSetStencilOp
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
, thencmdSetStencilOp
must have 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_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNT
dynamic state enabled, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thePipelineViewportStateCreateInfo
::scissorCount
of the pipeline - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, thencmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and thescissorCount
parameter ofcmdSetScissorWithCount
must match thePipelineViewportStateCreateInfo
::viewportCount
of the pipeline - If the bound graphics pipeline
state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic states enabled then bothcmdSetViewportWithCount
andcmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thescissorCount
parameter ofcmdSetScissorWithCount
- If a shader object is bound to any
graphics stage, then both
cmdSetViewportWithCount
andcmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thescissorCount
parameter ofcmdSetScissorWithCount
- If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportWScalingNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNV
in the current command buffer setviewportWScalingEnable
toTRUE
, thencmdSetViewportWScalingNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNV
in the current command buffer setviewportWScalingEnable
toTRUE
, then theviewportCount
parameter in the last call tocmdSetViewportWScalingNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportShadingRatePaletteNV
must be greater than or equal to theviewportCount
parameter 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoarseSampleOrderNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetShadingRateImageEnableNV
in the current command buffer setshadingRateImageEnable
toTRUE
, thencmdSetViewportShadingRatePaletteNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetShadingRateImageEnableNV
in the current command buffer setshadingRateImageEnable
toTRUE
, then theviewportCount
parameter in the last call tocmdSetViewportShadingRatePaletteNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNV
structure chained fromPipelineViewportStateCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNV
structure chained fromPipelineViewportStateCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV
::exclusiveScissorCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV
dynamic state enabled thencmdSetExclusiveScissorEnableNV
must have 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_NV
dynamic state enabled thencmdSetExclusiveScissorNV
must 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
cmdSetExclusiveScissorEnableNV
must 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
cmdSetExclusiveScissorEnableNV
in the current command buffer set any element ofpExclusiveScissorEnables
toTRUE
, thencmdSetExclusiveScissorNV
must have 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_ENABLE
dynamic state enabled thencmdSetRasterizerDiscardEnable
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to any
graphics stage, then
cmdSetRasterizerDiscardEnable
must have 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_ENABLE
dynamic state enabled thencmdSetDepthBiasEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthBiasEnable
must have 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_EXT
dynamic state enabled thencmdSetLogicOpEXT
must have been called in the current command buffer prior to this drawing command and thelogicOp
must be a validLogicOp
value - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetLogicOpEnableEXT
setlogicOpEnable
toTRUE
, thencmdSetLogicOpEXT
must have been called in the current command buffer prior to this drawing command and thelogicOp
must be a validLogicOp
value -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHR
built-in, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must be1
-
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHR
built-in, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must 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 theblendEnable
member of the corresponding element of thepAttachments
member ofpColorBlendState
must beFALSE
- If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, 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 ofpColorBlendEnables
in the most recent call tocmdSetColorBlendEnableEXT
in 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_samples
extension, theVK_NV_framebuffer_mixed_samples
extension, or the multisampledRenderToSingleSampled feature is enabled, thenrasterizationSamples
for 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and none of theVK_AMD_mixed_attachment_samples
extension, theVK_NV_framebuffer_mixed_samples
extension, or the multisampledRenderToSingleSampled feature is enabled, then the most recent call tocmdSetRasterizationSamplesEXT
in the current command buffer must have setrasterizationSamples
to 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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
::viewMask
equal toRenderingInfo
::viewMask
- If the current render
pass instance was begun with
cmdBeginRendering
, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo
::colorAttachmentCount
equal toRenderingInfo
::colorAttachmentCount
- If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with aFormat
equal to the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used to create the currently bound graphics pipeline - If the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with aFormat
equal to the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used 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
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
equal toNULL_HANDLE
must have the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used to create the currently bound pipeline equal toFORMAT_UNDEFINED
- If the current render
pass instance was begun with
cmdBeginRendering
, with aRenderingInfo
::colorAttachmentCount
equal 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
::pColorAttachments
array with aresolveImageView
not equal toNULL_HANDLE
must have been created with an image created with aExternalFormatANDROID
::externalFormat
value equal to theExternalFormatANDROID
::externalFormat
value 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
cmdBeginRendering
and aRenderingInfo
::colorAttachmentCount
equal to1
, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with an image created with aExternalFormatANDROID
::externalFormat
value equal to theExternalFormatANDROID
::externalFormat
value 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
::externalFormat
value and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic state enabled, thencmdSetColorBlendEnableEXT
must have set the blend enable toFALSE
prior 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
::externalFormat
value and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
dynamic state enabled, thencmdSetRasterizationSamplesEXT
must have setrasterizationSamples
toSAMPLE_COUNT_1_BIT
prior 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_ANDROID
resolve mode, thencmdSetColorBlendEnableEXT
must have set blend enable toFALSE
prior 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_ANDROID
resolve mode, thencmdSetRasterizationSamplesEXT
must have setrasterizationSamples
toSAMPLE_COUNT_1_BIT
prior 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
::externalFormat
value and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
dynamic state enabled, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->width
to1
prior 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
::externalFormat
value and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
dynamic state enabled, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->height
to1
prior 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_ANDROID
resolve mode, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->width
to1
prior 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_ANDROID
resolve mode, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->height
to1
prior to this drawing command - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT
dynamic state enabled thencmdSetColorWriteEnableEXT
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteEnableEXT
must have 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_EXT
dynamic state enabled then theattachmentCount
parameter ofcmdSetColorWriteEnableEXT
must be greater than or equal to thePipelineColorBlendStateCreateInfo
::attachmentCount
of 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then theattachmentCount
parameter of most recent call tocmdSetColorWriteEnableEXT
in 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_EXT
dynamic state enabled thencmdSetDiscardRectangleEXT
must 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_EXT
dynamic state enabled thencmdSetDiscardRectangleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDiscardRectangleEnableEXT
in the current command buffer setdiscardRectangleEnable
toTRUE
, thencmdSetDiscardRectangleEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDiscardRectangleEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetDiscardRectangleModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDiscardRectangleEnableEXT
in the current command buffer setdiscardRectangleEnable
toTRUE
, thencmdSetDiscardRectangleModeEXT
must 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->imageView
wasNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used to create the currently bound graphics pipeline must be equal to theFormat
used to createRenderingInfo
::pDepthAttachment->imageView
- If the
current render pass instance was begun with
cmdBeginRendering
, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, and the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used to create the currently bound graphics pipeline was not equal to theFormat
used 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->imageView
wasNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the currently bound graphics pipeline must be equal to theFormat
used to createRenderingInfo
::pStencilAttachment->imageView
- If the
current render pass instance was begun with
cmdBeginRendering
, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, and the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the currently bound graphics pipeline was not equal to theFormat
used to createRenderingInfo
::pStencilAttachment->imageView
, the value of the format must beFORMAT_UNDEFINED
- If the current render pass instance
was begun with
cmdBeginRendering
andRenderingFragmentShadingRateAttachmentInfoKHR
::imageView
was 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
cmdBeginRendering
andRenderingFragmentDensityMapAttachmentInfoEXT
::imageView
was 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
AttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the current render pass instance was begun withcmdBeginRendering
with aRenderingInfo
::colorAttachmentCount
parameter greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with a sample count equal to the corresponding element of thepColorAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used to create the currently bound graphics pipeline - If the current render pass
instance was begun with
cmdBeginRendering
, the currently bound pipeline was created with aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, andRenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used 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 aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, andRenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used 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
AttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRendering
with aRenderingInfo
::colorAttachmentCount
parameter greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with a sample count equal to the value ofrasterizationSamples
for the currently bound graphics pipeline - If the
current render pass instance was begun with
cmdBeginRendering
, the currently bound pipeline was created without aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, the value ofrasterizationSamples
for 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 aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, the value ofrasterizationSamples
for 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 thepNext
chain ofRenderingInfo
includes aMultisampledRenderToSingleSampledInfoEXT
structure withmultisampledRenderToSingleSampledEnable
equal toTRUE
, then the value ofrasterizationSamples
for 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
::renderPass
equal 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->imageView
was notNULL_HANDLE
, then the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used 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->imageView
was notNULL_HANDLE
, then thePipelineRenderingCreateInfo
::depthAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, then thePipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the pipeline must not beFORMAT_UNDEFINED
-
If the
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXT
query is active, rasterization discard must not be enabled - If
the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXT
query 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_EXT
dynamic state enabled thencmdSetTessellationDomainOriginEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClampEnableEXT
must 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_BIT
stage, thencmdSetTessellationDomainOriginEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthClampEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetPolygonModeEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetPolygonModeEXT
must have 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_EXT
dynamic state enabled thencmdSetRasterizationSamplesEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetRasterizationSamplesEXT
must have 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_EXT
dynamic state enabled thencmdSetSampleMaskEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetSampleMaskEXT
must have 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_EXT
dynamic state enabled thencmdSetAlphaToCoverageEnableEXT
must have 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_EXT
dynamic state enabled, andalphaToCoverageEnable
wasTRUE
in the last call tocmdSetAlphaToCoverageEnableEXT
, then the Fragment Output Interface must contain a variable for the alphaComponent
word inLocation
0 atIndex
0 - If a shader object is bound to any
graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAlphaToCoverageEnableEXT
must 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
cmdSetAlphaToCoverageEnableEXT
in the current command buffer setalphaToCoverageEnable
toTRUE
, then the Fragment Output Interface must contain a variable for the alphaComponent
word inLocation
0 atIndex
0 - If the bound graphics pipeline state was
created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT
dynamic state enabled thencmdSetAlphaToOneEnableEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAlphaToOneEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetLogicOpEnableEXT
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLogicOpEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetColorBlendEnableEXT
for any attachment set that attachment’s value inpColorBlendEnables
toTRUE
, thencmdSetColorBlendEquationEXT
must have 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_EXT
dynamic state enabled thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteMaskEXT
must have 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_EXT
dynamic state enabled thencmdSetRasterizationStreamEXT
must 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_BIT
stage, thencmdSetRasterizationStreamEXT
must have 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_EXT
dynamic state enabled thencmdSetConservativeRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetConservativeRasterizationModeEXT
must have 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_EXT
dynamic state enabled thencmdSetExtraPrimitiveOverestimationSizeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetConservativeRasterizationModeEXT
in the current command buffer setconservativeRasterizationMode
toCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
, thencmdSetExtraPrimitiveOverestimationSizeEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClipEnableEXT
must 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
cmdSetDepthClipEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetSampleLocationsEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locations
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetSampleLocationsEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendAdvancedEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_blend_operation_advanced
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then at least one ofcmdSetColorBlendEquationEXT
andcmdSetColorBlendAdvancedEXT
must have 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_EXT
dynamic state enabled thencmdSetProvokingVertexModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertex
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetProvokingVertexModeEXT
must have 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_EXT
dynamic state enabled thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
, thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology, thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLineRasterizationModeEXT
must have 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_EXT
dynamic state enabled thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
, thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology, thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLineStippleEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetLineStippleEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetLineStippleEnableEXT
in the current command buffer setstippledLineEnable
toTRUE
, thencmdSetLineStippleEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClipNegativeOneToOneEXT
must 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
cmdSetDepthClipNegativeOneToOneEXT
must have 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_NV
dynamic state enabled thencmdSetViewportWScalingEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportWScalingEnableNV
must have 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_NV
dynamic state enabled thencmdSetViewportSwizzleNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzle
extension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportSwizzleNV
must have 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_NV
dynamic state enabled thencmdSetCoverageToColorEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageToColorEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageToColorLocationNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageToColorEnableNV
in the current command buffer setcoverageToColorEnable
toTRUE
, thencmdSetCoverageToColorLocationNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationModeNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageModulationModeNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationTableEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageModulationModeNV
in the current command buffer set coverageModulationMode to any value other thanCOVERAGE_MODULATION_MODE_NONE_NV
, thencmdSetCoverageModulationTableEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationTableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageModulationTableEnableNV
in the current command buffer setcoverageModulationTableEnable
toTRUE
, thencmdSetCoverageModulationTableNV
must have 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_NV
dynamic state enabled thencmdSetShadingRateImageEnableNV
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer set rasterizerDiscardEnable toFALSE
, thencmdSetFragmentShadingRateKHR
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetShadingRateImageEnableNV
must have 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_NV
dynamic state enabled thencmdSetRepresentativeFragmentTestEnableNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetRepresentativeFragmentTestEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageReductionModeNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageReductionModeNV
must have 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_EXT
state enabled and the last call tocmdSetColorBlendEnableEXT
setpColorBlendEnables
for 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_EXT
state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must follow the rules for a zero-attachment subpass - If the bound graphics pipeline state
was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state disabled, then thesamples
parameter in the last call tocmdSetSampleMaskEXT
must be greater or equal to thePipelineMultisampleStateCreateInfo
::rasterizationSamples
parameter used to create the bound graphics pipeline - If the bound graphics pipeline state
was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXT
state andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
states enabled, then thesamples
parameter in the last call tocmdSetSampleMaskEXT
must be greater or equal to therasterizationSamples
parameter in the last call tocmdSetRasterizationSamplesEXT
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, and neither theVK_AMD_mixed_attachment_samples
nor theVK_NV_framebuffer_mixed_samples
extensions are enabled, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must 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_EXT
state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXT
structure withmultisampledRenderToSingleSampledEnable
equal toTRUE
, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must be the same as therasterizationSamples
member of that structure - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic state enabled thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEnableEXT
calls must specify an enable for all active color attachments in the current subpass - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEnableEXT
calls 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_EXT
dynamic state enabled thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEquationEXT
calls 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEquationEXT
calls 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_EXT
dynamic state enabled thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorWriteMaskEXT
calls 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorWriteMaskEXT
calls 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_EXT
dynamic state enabled thencmdSetColorBlendAdvancedEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendAdvancedEXT
calls 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_EXT
andDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic states enabled and the last calls tocmdSetColorBlendEnableEXT
andcmdSetColorBlendAdvancedEXT
have 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_EXT
query is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXT
state enabled, the last call tocmdSetRasterizationStreamEXT
must have set therasterizationStream
to zero - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state disabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
member of thePipelineMultisampleStateCreateInfo
structure the bound graphics pipeline has been created with - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
parameter of the last call tocmdSetRasterizationSamplesEXT
- If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, andsampleLocationsEnable
wasTRUE
in 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_EXT
bit set - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in the last call tocmdSetSampleLocationsEnableEXT
, then thesampleLocationsInfo.sampleLocationGridSize.width
in the last call tocmdSetSampleLocationsEXT
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.width
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equalingrasterizationSamples
- If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in the last call tocmdSetSampleLocationsEnableEXT
, then thesampleLocationsInfo.sampleLocationGridSize.height
in the last call tocmdSetSampleLocationsEXT
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.height
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equalingrasterizationSamples
- If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in 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_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationGridSize.width
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.width
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equaling the value ofrasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationGridSize.height
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.height
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equaling the value ofrasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationsPerPixel
must equalrasterizationSamples
in 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_NV
state enabled, and the last call tocmdSetCoverageModulationTableEnableNV
setcoverageModulationTableEnable
toTRUE
, then thecoverageModulationTableCount
parameter in the last call tocmdSetCoverageModulationTableNV
must equal the currentrasterizationSamples
divided by the number of color samples in the current subpass - If the
VK_NV_framebuffer_mixed_samples
extension 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 currentrasterizationSamples
must 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_NV
state enabled and the last call tocmdSetCoverageToColorEnableNV
set thecoverageToColorEnable
toTRUE
, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNV
coverageToColorLocation
, with aFormat
ofFORMAT_R8_UINT
,FORMAT_R8_SINT
,FORMAT_R16_UINT
,FORMAT_R16_SINT
,FORMAT_R32_UINT
, orFORMAT_R32_SINT
- If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the last call tocmdSetCoverageToColorEnableNV
set thecoverageToColorEnable
toTRUE
, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNV
coverageToColorLocation
, with aFormat
ofFORMAT_R8_UINT
,FORMAT_R8_SINT
,FORMAT_R16_UINT
,FORMAT_R16_SINT
,FORMAT_R32_UINT
, orFORMAT_R32_SINT
- If this
VK_NV_coverage_reduction_mode
extension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV
andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
states 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_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportSwizzleNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_viewport_swizzle
extension is enabled, and a shader object is bound to any graphics stage, then theviewportCount
parameter in the last call tocmdSetViewportSwizzleNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and if the current subpass has any color attachments andrasterizationSamples
of the last call tocmdSetRasterizationSamplesEXT
is greater than the number of color samples, then the pipelinesampleShadingEnable
must beFALSE
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state isLINE_RASTERIZATION_MODE_DEFAULT_EXT
, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits
::strictLines
must beTRUE
- If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT
dynamic 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 theconservativeRasterizationMode
set by the last call tocmdSetConservativeRasterizationModeEXT
must beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
- If the currently bound pipeline was
created with the
PipelineShaderStageCreateInfo
::stage
member of an element ofGraphicsPipelineCreateInfo
::pStages
set toSHADER_STAGE_VERTEX_BIT
,SHADER_STAGE_TESSELLATION_CONTROL_BIT
,SHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_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_EXT
dynamic statecmdSetAttachmentFeedbackLoopEnableEXT
must 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,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_VERTEX_BIT
- If there is no bound graphics pipeline,
and the
tessellationShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT
- If there is no bound graphics pipeline,
and the
tessellationShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT
- If there is no bound graphics pipeline,
and the
geometryShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_GEOMETRY_BIT
- If there is no bound graphics pipeline,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_FRAGMENT_BIT
- If there is no bound graphics pipeline,
and the
taskShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TASK_BIT_EXT
- If there is no bound graphics pipeline,
and the
meshShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with 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_BIT
orSHADER_STAGE_MESH_BIT_EXT
stages must have a validShaderEXT
bound, and the other must have noShaderEXT
bound - If there is no bound graphics pipeline,
and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXT
is bound the to theSHADER_STAGE_MESH_BIT_EXT
stage, and thatShaderEXT
was created without theSHADER_CREATE_NO_TASK_SHADER_BIT_EXT
flag, a validShaderEXT
must be bound to theSHADER_STAGE_TASK_BIT_EXT
stage - If there is no bound graphics pipeline,
and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXT
is bound the to theSHADER_STAGE_MESH_BIT_EXT
stage, and thatShaderEXT
was created with theSHADER_CREATE_NO_TASK_SHADER_BIT_EXT
flag, there must be noShaderEXT
bound to theSHADER_STAGE_TASK_BIT_EXT
stage - If there is no bound graphics pipeline,
and a valid
ShaderEXT
is bound to theSHADER_STAGE_VERTEX_BIT
stage, there must be noShaderEXT
bound to either theSHADER_STAGE_TASK_BIT_EXT
stage or theSHADER_STAGE_MESH_BIT_EXT
stage - If any graphics shader is bound which
was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXT
flag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXT
flag in the samecreateShadersEXT
call must also be bound - If any graphics shader is bound which
was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXT
flag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXT
flag as part of the samecreateShadersEXT
call must not have anyShaderEXT
bound - 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
cmdBeginRendering
and aRenderingInfo
::colorAttachmentCount
equal to1
, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, and a fragment shader is bound, it must not declare theDepthReplacing
orStencilRefReplacingEXT
execution modes - If the
attachmentFeedbackLoopDynamicState
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAttachmentFeedbackLoopEnableEXT
must 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_ENABLE
set inPipelineDynamicStateCreateInfo
::pDynamicStates
, and the fragment shader declares theEarlyFragmentTests
execution mode and usesOpDepthAttachmentReadEXT
, thedepthWriteEnable
parameter in the last call tocmdSetDepthWriteEnable
must beFALSE
- If the bound graphics pipeline
state includes a fragment shader stage, was created with
DYNAMIC_STATE_STENCIL_WRITE_MASK
set inPipelineDynamicStateCreateInfo
::pDynamicStates
, and the fragment shader declares theEarlyFragmentTests
execution mode and usesOpStencilAttachmentReadEXT
, thewriteMask
parameter in the last call tocmdSetStencilWriteMask
must 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 thepColorWriteMasks
parameter ofcmdSetColorWriteMaskEXT
must 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
Location
for any output attachment statically used in theFragment
Execution
Model
executed by this command must be less than maxFragmentDualSrcAttachments - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported, any resource written to by thePipeline
object bound to the pipeline bind point used by this command must not be an unprotected resource - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in thePipeline
object bound to the pipeline bind point used by this command must not write to any resource - If any of the shader stages of
the
Pipeline
bound to the pipeline bind point used by this command uses the RayQueryKHR capability, thencommandBuffer
must 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_HANDLE
buffers 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGY
dynamic state enabled thencmdSetPrimitiveTopology
must have 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_TOPOLOGY
dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted isFALSE
, then theprimitiveTopology
parameter ofcmdSetPrimitiveTopology
must be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo
::topology
state - If the bound graphics pipeline was
created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXT
andDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT
dynamic states enabled, thencmdSetVertexInputEXT
must 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_EXT
dynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled, thencmdBindVertexBuffers2EXT
must have been called in the current command buffer prior to this draw command, and thepStrides
parameter ofcmdBindVertexBuffers2EXT
must not beNULL
- If there is a shader object bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled thencmdSetVertexInputEXT
must 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled then all variables with theInput
storage class decorated withLocation
in theVertex
Execution
Model
OpEntryPoint
must contain a location inVertexInputAttributeDescription2EXT
::location
- If there is a shader object bound to
the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled then the numeric type associated with allInput
variables of the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must be the same asVertexInputAttributeDescription2EXT
::format
- If there is a shader object bound to
the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled andVertexInputAttributeDescription2EXT
::format
has a 64-bit component, then the scalar width associated with allInput
variables of the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must be 64-bit - If there is a shader object bound to
the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled and the scalar width associated with aLocation
decoratedInput
variable in theVertex
Execution
Model
OpEntryPoint
is 64-bit, then the correspondingVertexInputAttributeDescription2EXT
::format
must have a 64-bit component - If there is a shader object bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled andVertexInputAttributeDescription2EXT
::format
has a 64-bit component, then allInput
variables at the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must not use components that are not present in the format - If there is a shader object bound to the
SHADER_STAGE_VERTEX_BIT
stage and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
toPRIMITIVE_TOPOLOGY_PATCH_LIST
, or the bound graphics pipeline state was created with theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
dynamic state enabled thencmdSetPatchControlPointsEXT
must 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE
dynamic state enabled thencmdSetPrimitiveRestartEnable
must 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
::stage
member of an element ofGraphicsPipelineCreateInfo
::pStages
set toSHADER_STAGE_TASK_BIT_EXT
orSHADER_STAGE_MESH_BIT_EXT
- There must be no shader object bound
to either of the
SHADER_STAGE_TASK_BIT_EXT
orSHADER_STAGE_MESH_BIT_EXT
stages
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
Sampler
created withmagFilter
orminFilter
equal toFILTER_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Sampler
created withmipmapMode
equal toSAMPLER_MIPMAP_MODE_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageView
is sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
- If a
ImageView
is 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_BUFFER
descriptor 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
ImageView
is sampled withFILTER_CUBIC_EXT
as 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
ImageView
is sampled withFILTER_CUBIC_EXT
as a result of this command, it must not have aImageViewType
ofIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
, orIMAGE_VIEW_TYPE_CUBE_ARRAY
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must have aImageViewType
and format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubic
returned bygetPhysicalDeviceImageFormatProperties2
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
with a reduction mode of eitherSAMPLER_REDUCTION_MODE_MIN
orSAMPLER_REDUCTION_MODE_MAX
as a result of this command must have aImageViewType
and format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubicMinmax
returned bygetPhysicalDeviceImageFormatProperties2
- If the
cubicRangeClamp
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must not have aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
- Any
ImageView
being sampled with aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
as a result of this command must sample withFILTER_CUBIC_EXT
- If the
selectableCubicWeights
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must haveSamplerCubicWeightsCreateInfoQCOM
::cubicWeights
equal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
- Any
Image
created with aImageCreateInfo
::flags
containingIMAGE_CREATE_CORNER_SAMPLED_BIT_NV
sampled as a result of this command must only be sampled using aSamplerAddressMode
ofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
- For any
ImageView
being written as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- For any
ImageView
being read as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
- For any
BufferView
being written as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- Any
BufferView
being read as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
then 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
PipelineLayout
that is compatible for set n, with thePipelineLayout
orDescriptorSetLayout
array that was used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets
, must be valid if they are statically used by thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If the descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdBindDescriptorSets
, the boundPipeline
must 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 thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- Descriptors in bound descriptor
buffers, specified via
cmdSetDescriptorBufferOffsetsEXT
, must be valid if they are dynamically used by anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT
, the boundPipeline
must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If a descriptor is dynamically
used with a
Pipeline
created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, the descriptor memory must be resident - If a descriptor is dynamically
used with a
ShaderEXT
created with aDescriptorSetLayout
that 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_HANDLE
shader 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
Pipeline
object bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used to sample from anyImage
with aImageView
of the typeIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
,IMAGE_VIEW_TYPE_1D_ARRAY
,IMAGE_VIEW_TYPE_2D_ARRAY
orIMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
foruniformBuffers
, 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
ShaderEXT
bound 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
forstorageBuffers
, 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
ShaderEXT
bound 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
commandBuffer
is 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
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*
orOpImageSparseSample*
instructions - If
a bound shader
accesses a
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must not use theConstOffset
andOffset
operands - If a
ImageView
is accessed as a result of this command, then the image view’sviewType
must match theDim
operand of theOpTypeImage
as described in ??? - If a
ImageView
is accessed as a result of this command, then the numeric type of the image view’sformat
and theSampled
Type
operand of theOpTypeImage
must match - If a
ImageView
created with a format other thanFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the image view’s format - If a
ImageView
created with the formatFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have four components - If a
BufferView
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the buffer view’s format - If a
ImageView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
ImageView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If a
BufferView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
BufferView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If the
sparseImageInt64Atomics
feature is not enabled,
Image
objects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If the
sparseImageInt64Atomics
feature is not enabled,
Buffer
objects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If
OpImageWeightedSampleQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
- If
OpImageWeightedSampleQCOM
uses aImageView
as 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
OpImageBoxFilterQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
- If
OpImageBlockMatchSSDQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
or 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format must be a single-component format. - If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
read 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
renderPass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound toPIPELINE_BIND_POINT_GRAPHICS
- The subpass index of the
current render pass must be equal to the
subpass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound 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
OpTypeImage
variable with aDim
operand ofSubpassData
, it must be decorated with anInputAttachmentIndex
that corresponds to a valid input attachment in the current subpass - Input attachment views accessed
in a subpass must be created with the same
Format
as the corresponding subpass definition, and be created with aImageView
that is compatible with the attachment referenced by the subpass'pInputAttachments
[InputAttachmentIndex
] in the currently boundFramebuffer
as 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_EXT
image layout, and either:- the
PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_COLOR_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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_EXT
image layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_DEPTH_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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_EXT
image layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_STENCIL_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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
writeMask
are 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_VIEWPORT
dynamic state enabled thencmdSetViewport
must have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SCISSOR
dynamic state enabled thencmdSetScissor
must have 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_WIDTH
dynamic state enabled thencmdSetLineWidth
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
,cmdSetLineWidth
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology,cmdSetLineWidth
must 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_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
,cmdSetLineWidth
must have 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
dynamic state enabled thencmdSetDepthBias
orcmdSetDepthBias2EXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthBiasEnable
in the current command buffer setdepthBiasEnable
toTRUE
,cmdSetDepthBias
orcmdSetDepthBias2EXT
must have 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_CONSTANTS
dynamic state enabled thencmdSetBlendConstants
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetColorBlendEnableEXT
in the current command buffer set any element ofpColorBlendEnables
toTRUE
, and the most recent call tocmdSetColorBlendEquationEXT
in the current command buffer set the same element ofpColorBlendEquations
to aColorBlendEquationEXT
structure with anyBlendFactor
member with a value ofBLEND_FACTOR_CONSTANT_COLOR
,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
,BLEND_FACTOR_CONSTANT_ALPHA
, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
,cmdSetBlendConstants
must have 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
dynamic state enabled, and if the currentdepthBoundsTestEnable
state isTRUE
, thencmdSetDepthBounds
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthBoundsTestEnable
in the current command buffer setdepthBoundsTestEnable
toTRUE
, thencmdSetDepthBounds
must have 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_MASK
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilCompareMask
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilCompareMask
must have 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_MASK
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilWriteMask
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilWriteMask
must have 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_REFERENCE
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilReference
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilReference
must 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
::sampleLocationsEnable
set toTRUE
and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
bit set - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
dynamic state enabled thencmdSetSampleLocationsEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetSampleLocationsEnableEXT
in the current command buffer setsampleLocationsEnable
toTRUE
, thencmdSetSampleLocationsEXT
must have 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_EXT
state enabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
member of thePipelineMultisampleStateCreateInfo
structure the bound graphics pipeline has been created with - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_CULL_MODE
dynamic state enabled thencmdSetCullMode
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCullMode
must have 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_FACE
dynamic state enabled thencmdSetFrontFace
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetFrontFace
must have 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_ENABLE
dynamic state enabled thencmdSetDepthTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthTestEnable
must have 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_ENABLE
dynamic state enabled thencmdSetDepthWriteEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthWriteEnable
must have 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_OP
dynamic state enabled thencmdSetDepthCompareOp
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthTestEnable
in the current command buffer setdepthTestEnable
toTRUE
, thencmdSetDepthCompareOp
must have 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_ENABLE
dynamic state enabled thencmdSetDepthBoundsTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then thecmdSetDepthBoundsTestEnable
must have 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_ENABLE
dynamic state enabled thencmdSetStencilTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetStencilTestEnable
must have 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_OP
dynamic state enabled thencmdSetStencilOp
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
, thencmdSetStencilOp
must have 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_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNT
dynamic state enabled, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thePipelineViewportStateCreateInfo
::scissorCount
of the pipeline - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, thencmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and thescissorCount
parameter ofcmdSetScissorWithCount
must match thePipelineViewportStateCreateInfo
::viewportCount
of the pipeline - If the bound graphics
pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic states enabled then bothcmdSetViewportWithCount
andcmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thescissorCount
parameter ofcmdSetScissorWithCount
- If a shader object is bound to
any graphics stage, then both
cmdSetViewportWithCount
andcmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thescissorCount
parameter ofcmdSetScissorWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportWScalingNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNV
in the current command buffer setviewportWScalingEnable
toTRUE
, thencmdSetViewportWScalingNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNV
in the current command buffer setviewportWScalingEnable
toTRUE
, then theviewportCount
parameter in the last call tocmdSetViewportWScalingNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportShadingRatePaletteNV
must be greater than or equal to theviewportCount
parameter 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoarseSampleOrderNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetShadingRateImageEnableNV
in the current command buffer setshadingRateImageEnable
toTRUE
, thencmdSetViewportShadingRatePaletteNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetShadingRateImageEnableNV
in the current command buffer setshadingRateImageEnable
toTRUE
, then theviewportCount
parameter in the last call tocmdSetViewportShadingRatePaletteNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNV
structure chained fromPipelineViewportStateCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNV
structure chained fromPipelineViewportStateCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV
::exclusiveScissorCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV
dynamic state enabled thencmdSetExclusiveScissorEnableNV
must have 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_NV
dynamic state enabled thencmdSetExclusiveScissorNV
must 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
cmdSetExclusiveScissorEnableNV
must 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
cmdSetExclusiveScissorEnableNV
in the current command buffer set any element ofpExclusiveScissorEnables
toTRUE
, thencmdSetExclusiveScissorNV
must have 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_ENABLE
dynamic state enabled thencmdSetRasterizerDiscardEnable
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, then
cmdSetRasterizerDiscardEnable
must have 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_ENABLE
dynamic state enabled thencmdSetDepthBiasEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthBiasEnable
must have 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_EXT
dynamic state enabled thencmdSetLogicOpEXT
must have been called in the current command buffer prior to this drawing command and thelogicOp
must be a validLogicOp
value - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetLogicOpEnableEXT
setlogicOpEnable
toTRUE
, thencmdSetLogicOpEXT
must have been called in the current command buffer prior to this drawing command and thelogicOp
must be a validLogicOp
value -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHR
built-in, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must be1
-
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHR
built-in, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must 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 theblendEnable
member of the corresponding element of thepAttachments
member ofpColorBlendState
must beFALSE
- If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, 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 ofpColorBlendEnables
in the most recent call tocmdSetColorBlendEnableEXT
in 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_samples
extension, theVK_NV_framebuffer_mixed_samples
extension, or the multisampledRenderToSingleSampled feature is enabled, thenrasterizationSamples
for 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and none of theVK_AMD_mixed_attachment_samples
extension, theVK_NV_framebuffer_mixed_samples
extension, or the multisampledRenderToSingleSampled feature is enabled, then the most recent call tocmdSetRasterizationSamplesEXT
in the current command buffer must have setrasterizationSamples
to 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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
::viewMask
equal toRenderingInfo
::viewMask
- If the current
render pass instance was begun with
cmdBeginRendering
, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo
::colorAttachmentCount
equal toRenderingInfo
::colorAttachmentCount
- If
the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with aFormat
equal to the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used to create the currently bound graphics pipeline - If
the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with aFormat
equal to the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used 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
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
equal toNULL_HANDLE
must have the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used to create the currently bound pipeline equal toFORMAT_UNDEFINED
- If the current
render pass instance was begun with
cmdBeginRendering
, with aRenderingInfo
::colorAttachmentCount
equal 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
::pColorAttachments
array with aresolveImageView
not equal toNULL_HANDLE
must have been created with an image created with aExternalFormatANDROID
::externalFormat
value equal to theExternalFormatANDROID
::externalFormat
value 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
cmdBeginRendering
and aRenderingInfo
::colorAttachmentCount
equal to1
, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with an image created with aExternalFormatANDROID
::externalFormat
value equal to theExternalFormatANDROID
::externalFormat
value 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
::externalFormat
value and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic state enabled, thencmdSetColorBlendEnableEXT
must have set the blend enable toFALSE
prior 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
::externalFormat
value and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
dynamic state enabled, thencmdSetRasterizationSamplesEXT
must have setrasterizationSamples
toSAMPLE_COUNT_1_BIT
prior 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_ANDROID
resolve mode, thencmdSetColorBlendEnableEXT
must have set blend enable toFALSE
prior 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_ANDROID
resolve mode, thencmdSetRasterizationSamplesEXT
must have setrasterizationSamples
toSAMPLE_COUNT_1_BIT
prior 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
::externalFormat
value and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
dynamic state enabled, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->width
to1
prior 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
::externalFormat
value and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
dynamic state enabled, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->height
to1
prior 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_ANDROID
resolve mode, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->width
to1
prior 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_ANDROID
resolve mode, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->height
to1
prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT
dynamic state enabled thencmdSetColorWriteEnableEXT
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteEnableEXT
must have 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_EXT
dynamic state enabled then theattachmentCount
parameter ofcmdSetColorWriteEnableEXT
must be greater than or equal to thePipelineColorBlendStateCreateInfo
::attachmentCount
of 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then theattachmentCount
parameter of most recent call tocmdSetColorWriteEnableEXT
in 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_EXT
dynamic state enabled thencmdSetDiscardRectangleEXT
must 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_EXT
dynamic state enabled thencmdSetDiscardRectangleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDiscardRectangleEnableEXT
in the current command buffer setdiscardRectangleEnable
toTRUE
, thencmdSetDiscardRectangleEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDiscardRectangleEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetDiscardRectangleModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDiscardRectangleEnableEXT
in the current command buffer setdiscardRectangleEnable
toTRUE
, thencmdSetDiscardRectangleModeEXT
must 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->imageView
wasNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used to create the currently bound graphics pipeline must be equal to theFormat
used to createRenderingInfo
::pDepthAttachment->imageView
- If
the current render pass instance was begun with
cmdBeginRendering
, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, and the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used to create the currently bound graphics pipeline was not equal to theFormat
used 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->imageView
wasNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the currently bound graphics pipeline must be equal to theFormat
used to createRenderingInfo
::pStencilAttachment->imageView
- If
the current render pass instance was begun with
cmdBeginRendering
, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, and the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the currently bound graphics pipeline was not equal to theFormat
used to createRenderingInfo
::pStencilAttachment->imageView
, the value of the format must beFORMAT_UNDEFINED
- If the current render pass
instance was begun with
cmdBeginRendering
andRenderingFragmentShadingRateAttachmentInfoKHR
::imageView
was 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
cmdBeginRendering
andRenderingFragmentDensityMapAttachmentInfoEXT
::imageView
was 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
AttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the current render pass instance was begun withcmdBeginRendering
with aRenderingInfo
::colorAttachmentCount
parameter greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with a sample count equal to the corresponding element of thepColorAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used to create the currently bound graphics pipeline - If the current render
pass instance was begun with
cmdBeginRendering
, the currently bound pipeline was created with aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, andRenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used 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 aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, andRenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used 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
AttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRendering
with aRenderingInfo
::colorAttachmentCount
parameter greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with a sample count equal to the value ofrasterizationSamples
for the currently bound graphics pipeline - If
the current render pass instance was begun with
cmdBeginRendering
, the currently bound pipeline was created without aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, the value ofrasterizationSamples
for 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 aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, the value ofrasterizationSamples
for 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 thepNext
chain ofRenderingInfo
includes aMultisampledRenderToSingleSampledInfoEXT
structure withmultisampledRenderToSingleSampledEnable
equal toTRUE
, then the value ofrasterizationSamples
for 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
::renderPass
equal 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->imageView
was notNULL_HANDLE
, then the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used 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->imageView
was notNULL_HANDLE
, then thePipelineRenderingCreateInfo
::depthAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, then thePipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the pipeline must not beFORMAT_UNDEFINED
-
If the
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXT
query is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXT
query 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_EXT
dynamic state enabled thencmdSetTessellationDomainOriginEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClampEnableEXT
must 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_BIT
stage, thencmdSetTessellationDomainOriginEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthClampEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetPolygonModeEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetPolygonModeEXT
must have 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_EXT
dynamic state enabled thencmdSetRasterizationSamplesEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetRasterizationSamplesEXT
must have 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_EXT
dynamic state enabled thencmdSetSampleMaskEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetSampleMaskEXT
must have 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_EXT
dynamic state enabled thencmdSetAlphaToCoverageEnableEXT
must have 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_EXT
dynamic state enabled, andalphaToCoverageEnable
wasTRUE
in the last call tocmdSetAlphaToCoverageEnableEXT
, then the Fragment Output Interface must contain a variable for the alphaComponent
word inLocation
0 atIndex
0 - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAlphaToCoverageEnableEXT
must 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
cmdSetAlphaToCoverageEnableEXT
in the current command buffer setalphaToCoverageEnable
toTRUE
, then the Fragment Output Interface must contain a variable for the alphaComponent
word inLocation
0 atIndex
0 - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT
dynamic state enabled thencmdSetAlphaToOneEnableEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAlphaToOneEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetLogicOpEnableEXT
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLogicOpEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetColorBlendEnableEXT
for any attachment set that attachment’s value inpColorBlendEnables
toTRUE
, thencmdSetColorBlendEquationEXT
must have 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_EXT
dynamic state enabled thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteMaskEXT
must have 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_EXT
dynamic state enabled thencmdSetRasterizationStreamEXT
must 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_BIT
stage, thencmdSetRasterizationStreamEXT
must have 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_EXT
dynamic state enabled thencmdSetConservativeRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetConservativeRasterizationModeEXT
must have 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_EXT
dynamic state enabled thencmdSetExtraPrimitiveOverestimationSizeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetConservativeRasterizationModeEXT
in the current command buffer setconservativeRasterizationMode
toCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
, thencmdSetExtraPrimitiveOverestimationSizeEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClipEnableEXT
must 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
cmdSetDepthClipEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetSampleLocationsEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locations
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetSampleLocationsEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendAdvancedEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_blend_operation_advanced
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then at least one ofcmdSetColorBlendEquationEXT
andcmdSetColorBlendAdvancedEXT
must have 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_EXT
dynamic state enabled thencmdSetProvokingVertexModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertex
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetProvokingVertexModeEXT
must have 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_EXT
dynamic state enabled thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
, thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology, thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLineRasterizationModeEXT
must have 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_EXT
dynamic state enabled thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
, thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology, thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLineStippleEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetLineStippleEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetLineStippleEnableEXT
in the current command buffer setstippledLineEnable
toTRUE
, thencmdSetLineStippleEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClipNegativeOneToOneEXT
must 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
cmdSetDepthClipNegativeOneToOneEXT
must have 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_NV
dynamic state enabled thencmdSetViewportWScalingEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportWScalingEnableNV
must have 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_NV
dynamic state enabled thencmdSetViewportSwizzleNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzle
extension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportSwizzleNV
must have 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_NV
dynamic state enabled thencmdSetCoverageToColorEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageToColorEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageToColorLocationNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageToColorEnableNV
in the current command buffer setcoverageToColorEnable
toTRUE
, thencmdSetCoverageToColorLocationNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationModeNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageModulationModeNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationTableEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageModulationModeNV
in the current command buffer set coverageModulationMode to any value other thanCOVERAGE_MODULATION_MODE_NONE_NV
, thencmdSetCoverageModulationTableEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationTableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageModulationTableEnableNV
in the current command buffer setcoverageModulationTableEnable
toTRUE
, thencmdSetCoverageModulationTableNV
must have 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_NV
dynamic state enabled thencmdSetShadingRateImageEnableNV
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer set rasterizerDiscardEnable toFALSE
, thencmdSetFragmentShadingRateKHR
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetShadingRateImageEnableNV
must have 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_NV
dynamic state enabled thencmdSetRepresentativeFragmentTestEnableNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetRepresentativeFragmentTestEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageReductionModeNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageReductionModeNV
must have 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_EXT
state enabled and the last call tocmdSetColorBlendEnableEXT
setpColorBlendEnables
for 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_EXT
state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must follow the rules for a zero-attachment subpass - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state disabled, then thesamples
parameter in the last call tocmdSetSampleMaskEXT
must be greater or equal to thePipelineMultisampleStateCreateInfo
::rasterizationSamples
parameter used to create the bound graphics pipeline - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXT
state andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
states enabled, then thesamples
parameter in the last call tocmdSetSampleMaskEXT
must be greater or equal to therasterizationSamples
parameter in the last call tocmdSetRasterizationSamplesEXT
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, and neither theVK_AMD_mixed_attachment_samples
nor theVK_NV_framebuffer_mixed_samples
extensions are enabled, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must 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_EXT
state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXT
structure withmultisampledRenderToSingleSampledEnable
equal toTRUE
, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must be the same as therasterizationSamples
member of that structure - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic state enabled thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEnableEXT
calls must specify an enable for all active color attachments in the current subpass - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEnableEXT
calls 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_EXT
dynamic state enabled thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEquationEXT
calls 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEquationEXT
calls 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_EXT
dynamic state enabled thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorWriteMaskEXT
calls 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorWriteMaskEXT
calls 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_EXT
dynamic state enabled thencmdSetColorBlendAdvancedEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendAdvancedEXT
calls 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_EXT
andDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic states enabled and the last calls tocmdSetColorBlendEnableEXT
andcmdSetColorBlendAdvancedEXT
have 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_EXT
query is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXT
state enabled, the last call tocmdSetRasterizationStreamEXT
must have set therasterizationStream
to zero - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state disabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
member of thePipelineMultisampleStateCreateInfo
structure the bound graphics pipeline has been created with - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
parameter of the last call tocmdSetRasterizationSamplesEXT
- If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, andsampleLocationsEnable
wasTRUE
in 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_EXT
bit set - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in the last call tocmdSetSampleLocationsEnableEXT
, then thesampleLocationsInfo.sampleLocationGridSize.width
in the last call tocmdSetSampleLocationsEXT
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.width
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equalingrasterizationSamples
- If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in the last call tocmdSetSampleLocationsEnableEXT
, then thesampleLocationsInfo.sampleLocationGridSize.height
in the last call tocmdSetSampleLocationsEXT
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.height
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equalingrasterizationSamples
- If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in 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_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationGridSize.width
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.width
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equaling the value ofrasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationGridSize.height
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.height
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equaling the value ofrasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationsPerPixel
must equalrasterizationSamples
in 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_NV
state enabled, and the last call tocmdSetCoverageModulationTableEnableNV
setcoverageModulationTableEnable
toTRUE
, then thecoverageModulationTableCount
parameter in the last call tocmdSetCoverageModulationTableNV
must equal the currentrasterizationSamples
divided by the number of color samples in the current subpass - If the
VK_NV_framebuffer_mixed_samples
extension 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 currentrasterizationSamples
must 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_NV
state enabled and the last call tocmdSetCoverageToColorEnableNV
set thecoverageToColorEnable
toTRUE
, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNV
coverageToColorLocation
, with aFormat
ofFORMAT_R8_UINT
,FORMAT_R8_SINT
,FORMAT_R16_UINT
,FORMAT_R16_SINT
,FORMAT_R32_UINT
, orFORMAT_R32_SINT
- If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the last call tocmdSetCoverageToColorEnableNV
set thecoverageToColorEnable
toTRUE
, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNV
coverageToColorLocation
, with aFormat
ofFORMAT_R8_UINT
,FORMAT_R8_SINT
,FORMAT_R16_UINT
,FORMAT_R16_SINT
,FORMAT_R32_UINT
, orFORMAT_R32_SINT
- If this
VK_NV_coverage_reduction_mode
extension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV
andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
states 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_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportSwizzleNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_viewport_swizzle
extension is enabled, and a shader object is bound to any graphics stage, then theviewportCount
parameter in the last call tocmdSetViewportSwizzleNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and if the current subpass has any color attachments andrasterizationSamples
of the last call tocmdSetRasterizationSamplesEXT
is greater than the number of color samples, then the pipelinesampleShadingEnable
must beFALSE
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state isLINE_RASTERIZATION_MODE_DEFAULT_EXT
, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits
::strictLines
must beTRUE
-
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT
dynamic 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 theconservativeRasterizationMode
set by the last call tocmdSetConservativeRasterizationModeEXT
must beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
- If the currently bound pipeline
was created with the
PipelineShaderStageCreateInfo
::stage
member of an element ofGraphicsPipelineCreateInfo
::pStages
set toSHADER_STAGE_VERTEX_BIT
,SHADER_STAGE_TESSELLATION_CONTROL_BIT
,SHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_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_EXT
dynamic statecmdSetAttachmentFeedbackLoopEnableEXT
must 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,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_VERTEX_BIT
- If there is no bound graphics
pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT
- If there is no bound graphics
pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT
- If there is no bound graphics
pipeline, and the
geometryShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_GEOMETRY_BIT
- If there is no bound graphics
pipeline,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_FRAGMENT_BIT
- If there is no bound graphics
pipeline, and the
taskShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TASK_BIT_EXT
- If there is no bound graphics
pipeline, and the
meshShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with 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_BIT
orSHADER_STAGE_MESH_BIT_EXT
stages must have a validShaderEXT
bound, and the other must have noShaderEXT
bound - If there is no bound graphics
pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXT
is bound the to theSHADER_STAGE_MESH_BIT_EXT
stage, and thatShaderEXT
was created without theSHADER_CREATE_NO_TASK_SHADER_BIT_EXT
flag, a validShaderEXT
must be bound to theSHADER_STAGE_TASK_BIT_EXT
stage - If there is no bound graphics
pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXT
is bound the to theSHADER_STAGE_MESH_BIT_EXT
stage, and thatShaderEXT
was created with theSHADER_CREATE_NO_TASK_SHADER_BIT_EXT
flag, there must be noShaderEXT
bound to theSHADER_STAGE_TASK_BIT_EXT
stage - If there is no bound graphics
pipeline, and a valid
ShaderEXT
is bound to theSHADER_STAGE_VERTEX_BIT
stage, there must be noShaderEXT
bound to either theSHADER_STAGE_TASK_BIT_EXT
stage or theSHADER_STAGE_MESH_BIT_EXT
stage - If any graphics shader is bound
which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXT
flag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXT
flag in the samecreateShadersEXT
call must also be bound - If any graphics shader is bound
which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXT
flag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXT
flag as part of the samecreateShadersEXT
call must not have anyShaderEXT
bound - 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
cmdBeginRendering
and aRenderingInfo
::colorAttachmentCount
equal to1
, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, and a fragment shader is bound, it must not declare theDepthReplacing
orStencilRefReplacingEXT
execution modes - If the
attachmentFeedbackLoopDynamicState
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAttachmentFeedbackLoopEnableEXT
must 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_ENABLE
set inPipelineDynamicStateCreateInfo
::pDynamicStates
, and the fragment shader declares theEarlyFragmentTests
execution mode and usesOpDepthAttachmentReadEXT
, thedepthWriteEnable
parameter in the last call tocmdSetDepthWriteEnable
must beFALSE
- If the bound graphics
pipeline state includes a fragment shader stage, was created with
DYNAMIC_STATE_STENCIL_WRITE_MASK
set inPipelineDynamicStateCreateInfo
::pDynamicStates
, and the fragment shader declares theEarlyFragmentTests
execution mode and usesOpStencilAttachmentReadEXT
, thewriteMask
parameter in the last call tocmdSetStencilWriteMask
must 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 thepColorWriteMasks
parameter ofcmdSetColorWriteMaskEXT
must 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
Location
for any output attachment statically used in theFragment
Execution
Model
executed by this command must be less than maxFragmentDualSrcAttachments - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported, any resource written to by thePipeline
object bound to the pipeline bind point used by this command must not be an unprotected resource - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in thePipeline
object bound to the pipeline bind point used by this command must not write to any resource - If any of the shader
stages of the
Pipeline
bound to the pipeline bind point used by this command uses the RayQueryKHR capability, thencommandBuffer
must 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_HANDLE
buffers 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGY
dynamic state enabled thencmdSetPrimitiveTopology
must have 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_TOPOLOGY
dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted isFALSE
, then theprimitiveTopology
parameter ofcmdSetPrimitiveTopology
must be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo
::topology
state - If the bound graphics pipeline
was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXT
andDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT
dynamic states enabled, thencmdSetVertexInputEXT
must 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_EXT
dynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled, thencmdBindVertexBuffers2EXT
must have been called in the current command buffer prior to this draw command, and thepStrides
parameter ofcmdBindVertexBuffers2EXT
must not beNULL
- If there is a shader object bound
to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled thencmdSetVertexInputEXT
must 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled then all variables with theInput
storage class decorated withLocation
in theVertex
Execution
Model
OpEntryPoint
must contain a location inVertexInputAttributeDescription2EXT
::location
- If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled then the numeric type associated with allInput
variables of the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must be the same asVertexInputAttributeDescription2EXT
::format
- If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled andVertexInputAttributeDescription2EXT
::format
has a 64-bit component, then the scalar width associated with allInput
variables of the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must be 64-bit - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled and the scalar width associated with aLocation
decoratedInput
variable in theVertex
Execution
Model
OpEntryPoint
is 64-bit, then the correspondingVertexInputAttributeDescription2EXT
::format
must have a 64-bit component - If there is a shader object bound
to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled andVertexInputAttributeDescription2EXT
::format
has a 64-bit component, then allInput
variables at the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must not use components that are not present in the format - If there is a shader object bound
to the
SHADER_STAGE_VERTEX_BIT
stage and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
toPRIMITIVE_TOPOLOGY_PATCH_LIST
, or the bound graphics pipeline state was created with theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
dynamic state enabled thencmdSetPatchControlPointsEXT
must 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE
dynamic state enabled thencmdSetPrimitiveRestartEnable
must 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
::stage
member of an element ofGraphicsPipelineCreateInfo
::pStages
set toSHADER_STAGE_TASK_BIT_EXT
orSHADER_STAGE_MESH_BIT_EXT
- There must be no shader object
bound to either of the
SHADER_STAGE_TASK_BIT_EXT
orSHADER_STAGE_MESH_BIT_EXT
stages - 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, withindexSize
being based on the type specified byindexType
, where the index buffer,indexType
, andoffset
are 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, withindexSize
being based on the type specified byindexType
, where the index buffer,indexType
, andoffset
are specified viacmdBindIndexBuffer
orcmdBindIndexBuffer2KHR
. IfcmdBindIndexBuffer2KHR
is used to bind the index buffer, the size of the bound index buffer iscmdBindIndexBuffer2KHR
::size
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
Sampler
created withmagFilter
orminFilter
equal toFILTER_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Sampler
created withmipmapMode
equal toSAMPLER_MIPMAP_MODE_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageView
is sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
- If a
ImageView
is 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_BUFFER
descriptor 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
ImageView
is sampled withFILTER_CUBIC_EXT
as 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
ImageView
is sampled withFILTER_CUBIC_EXT
as a result of this command, it must not have aImageViewType
ofIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
, orIMAGE_VIEW_TYPE_CUBE_ARRAY
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must have aImageViewType
and format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubic
returned bygetPhysicalDeviceImageFormatProperties2
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
with a reduction mode of eitherSAMPLER_REDUCTION_MODE_MIN
orSAMPLER_REDUCTION_MODE_MAX
as a result of this command must have aImageViewType
and format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubicMinmax
returned bygetPhysicalDeviceImageFormatProperties2
- If the
cubicRangeClamp
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must not have aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
- Any
ImageView
being sampled with aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
as a result of this command must sample withFILTER_CUBIC_EXT
- If the
selectableCubicWeights
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must haveSamplerCubicWeightsCreateInfoQCOM
::cubicWeights
equal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
- Any
Image
created with aImageCreateInfo
::flags
containingIMAGE_CREATE_CORNER_SAMPLED_BIT_NV
sampled as a result of this command must only be sampled using aSamplerAddressMode
ofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
- For any
ImageView
being written as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- For any
ImageView
being read as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
- For any
BufferView
being written as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- Any
BufferView
being read as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
then 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
PipelineLayout
that is compatible for set n, with thePipelineLayout
orDescriptorSetLayout
array that was used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets
, must be valid if they are statically used by thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If the descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdBindDescriptorSets
, the boundPipeline
must 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 thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- Descriptors in bound descriptor
buffers, specified via
cmdSetDescriptorBufferOffsetsEXT
, must be valid if they are dynamically used by anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT
, the boundPipeline
must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If a descriptor is dynamically
used with a
Pipeline
created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, the descriptor memory must be resident - If a descriptor is dynamically
used with a
ShaderEXT
created with aDescriptorSetLayout
that 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_HANDLE
shader 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
Pipeline
object bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used to sample from anyImage
with aImageView
of the typeIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
,IMAGE_VIEW_TYPE_1D_ARRAY
,IMAGE_VIEW_TYPE_2D_ARRAY
orIMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
foruniformBuffers
, 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
ShaderEXT
bound 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
forstorageBuffers
, 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
ShaderEXT
bound 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
commandBuffer
is 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
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*
orOpImageSparseSample*
instructions - If
a bound shader
accesses a
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must not use theConstOffset
andOffset
operands - If a
ImageView
is accessed as a result of this command, then the image view’sviewType
must match theDim
operand of theOpTypeImage
as described in ??? - If a
ImageView
is accessed as a result of this command, then the numeric type of the image view’sformat
and theSampled
Type
operand of theOpTypeImage
must match - If a
ImageView
created with a format other thanFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the image view’s format - If a
ImageView
created with the formatFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have four components - If a
BufferView
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the buffer view’s format - If a
ImageView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
ImageView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If a
BufferView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
BufferView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If the
sparseImageInt64Atomics
feature is not enabled,
Image
objects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If the
sparseImageInt64Atomics
feature is not enabled,
Buffer
objects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If
OpImageWeightedSampleQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
- If
OpImageWeightedSampleQCOM
uses aImageView
as 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
OpImageBoxFilterQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
- If
OpImageBlockMatchSSDQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
or 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format must be a single-component format. - If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
read 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
renderPass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound toPIPELINE_BIND_POINT_GRAPHICS
- The subpass index of the
current render pass must be equal to the
subpass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound 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
OpTypeImage
variable with aDim
operand ofSubpassData
, it must be decorated with anInputAttachmentIndex
that corresponds to a valid input attachment in the current subpass - Input attachment views accessed
in a subpass must be created with the same
Format
as the corresponding subpass definition, and be created with aImageView
that is compatible with the attachment referenced by the subpass'pInputAttachments
[InputAttachmentIndex
] in the currently boundFramebuffer
as 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_EXT
image layout, and either:- the
PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_COLOR_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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_EXT
image layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_DEPTH_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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_EXT
image layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_STENCIL_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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
writeMask
are 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_VIEWPORT
dynamic state enabled thencmdSetViewport
must have been called in the current command buffer prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SCISSOR
dynamic state enabled thencmdSetScissor
must have 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_WIDTH
dynamic state enabled thencmdSetLineWidth
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
,cmdSetLineWidth
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology,cmdSetLineWidth
must 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_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
,cmdSetLineWidth
must have 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
dynamic state enabled thencmdSetDepthBias
orcmdSetDepthBias2EXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthBiasEnable
in the current command buffer setdepthBiasEnable
toTRUE
,cmdSetDepthBias
orcmdSetDepthBias2EXT
must have 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_CONSTANTS
dynamic state enabled thencmdSetBlendConstants
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetColorBlendEnableEXT
in the current command buffer set any element ofpColorBlendEnables
toTRUE
, and the most recent call tocmdSetColorBlendEquationEXT
in the current command buffer set the same element ofpColorBlendEquations
to aColorBlendEquationEXT
structure with anyBlendFactor
member with a value ofBLEND_FACTOR_CONSTANT_COLOR
,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
,BLEND_FACTOR_CONSTANT_ALPHA
, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
,cmdSetBlendConstants
must have 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
dynamic state enabled, and if the currentdepthBoundsTestEnable
state isTRUE
, thencmdSetDepthBounds
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthBoundsTestEnable
in the current command buffer setdepthBoundsTestEnable
toTRUE
, thencmdSetDepthBounds
must have 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_MASK
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilCompareMask
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilCompareMask
must have 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_MASK
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilWriteMask
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilWriteMask
must have 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_REFERENCE
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilReference
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilReference
must 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
::sampleLocationsEnable
set toTRUE
and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
bit set - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
dynamic state enabled thencmdSetSampleLocationsEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetSampleLocationsEnableEXT
in the current command buffer setsampleLocationsEnable
toTRUE
, thencmdSetSampleLocationsEXT
must have 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_EXT
state enabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
member of thePipelineMultisampleStateCreateInfo
structure the bound graphics pipeline has been created with - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_CULL_MODE
dynamic state enabled thencmdSetCullMode
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCullMode
must have 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_FACE
dynamic state enabled thencmdSetFrontFace
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetFrontFace
must have 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_ENABLE
dynamic state enabled thencmdSetDepthTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthTestEnable
must have 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_ENABLE
dynamic state enabled thencmdSetDepthWriteEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthWriteEnable
must have 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_OP
dynamic state enabled thencmdSetDepthCompareOp
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthTestEnable
in the current command buffer setdepthTestEnable
toTRUE
, thencmdSetDepthCompareOp
must have 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_ENABLE
dynamic state enabled thencmdSetDepthBoundsTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then thecmdSetDepthBoundsTestEnable
must have 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_ENABLE
dynamic state enabled thencmdSetStencilTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetStencilTestEnable
must have 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_OP
dynamic state enabled thencmdSetStencilOp
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
, thencmdSetStencilOp
must have 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_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNT
dynamic state enabled, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thePipelineViewportStateCreateInfo
::scissorCount
of the pipeline - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, thencmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and thescissorCount
parameter ofcmdSetScissorWithCount
must match thePipelineViewportStateCreateInfo
::viewportCount
of the pipeline - If the bound graphics
pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic states enabled then bothcmdSetViewportWithCount
andcmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thescissorCount
parameter ofcmdSetScissorWithCount
- If a shader object is bound to
any graphics stage, then both
cmdSetViewportWithCount
andcmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thescissorCount
parameter ofcmdSetScissorWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportWScalingNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNV
in the current command buffer setviewportWScalingEnable
toTRUE
, thencmdSetViewportWScalingNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNV
in the current command buffer setviewportWScalingEnable
toTRUE
, then theviewportCount
parameter in the last call tocmdSetViewportWScalingNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportShadingRatePaletteNV
must be greater than or equal to theviewportCount
parameter 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoarseSampleOrderNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetShadingRateImageEnableNV
in the current command buffer setshadingRateImageEnable
toTRUE
, thencmdSetViewportShadingRatePaletteNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetShadingRateImageEnableNV
in the current command buffer setshadingRateImageEnable
toTRUE
, then theviewportCount
parameter in the last call tocmdSetViewportShadingRatePaletteNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNV
structure chained fromPipelineViewportStateCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNV
structure chained fromPipelineViewportStateCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV
::exclusiveScissorCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV
dynamic state enabled thencmdSetExclusiveScissorEnableNV
must have 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_NV
dynamic state enabled thencmdSetExclusiveScissorNV
must 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
cmdSetExclusiveScissorEnableNV
must 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
cmdSetExclusiveScissorEnableNV
in the current command buffer set any element ofpExclusiveScissorEnables
toTRUE
, thencmdSetExclusiveScissorNV
must have 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_ENABLE
dynamic state enabled thencmdSetRasterizerDiscardEnable
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
any graphics stage, then
cmdSetRasterizerDiscardEnable
must have 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_ENABLE
dynamic state enabled thencmdSetDepthBiasEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthBiasEnable
must have 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_EXT
dynamic state enabled thencmdSetLogicOpEXT
must have been called in the current command buffer prior to this drawing command and thelogicOp
must be a validLogicOp
value - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetLogicOpEnableEXT
setlogicOpEnable
toTRUE
, thencmdSetLogicOpEXT
must have been called in the current command buffer prior to this drawing command and thelogicOp
must be a validLogicOp
value -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHR
built-in, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must be1
-
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHR
built-in, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must 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 theblendEnable
member of the corresponding element of thepAttachments
member ofpColorBlendState
must beFALSE
- If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, 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 ofpColorBlendEnables
in the most recent call tocmdSetColorBlendEnableEXT
in 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_samples
extension, theVK_NV_framebuffer_mixed_samples
extension, or the multisampledRenderToSingleSampled feature is enabled, thenrasterizationSamples
for 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and none of theVK_AMD_mixed_attachment_samples
extension, theVK_NV_framebuffer_mixed_samples
extension, or the multisampledRenderToSingleSampled feature is enabled, then the most recent call tocmdSetRasterizationSamplesEXT
in the current command buffer must have setrasterizationSamples
to 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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
::viewMask
equal toRenderingInfo
::viewMask
- If the current
render pass instance was begun with
cmdBeginRendering
, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo
::colorAttachmentCount
equal toRenderingInfo
::colorAttachmentCount
- If
the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with aFormat
equal to the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used to create the currently bound graphics pipeline - If
the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with aFormat
equal to the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used 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
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
equal toNULL_HANDLE
must have the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used to create the currently bound pipeline equal toFORMAT_UNDEFINED
- If the current
render pass instance was begun with
cmdBeginRendering
, with aRenderingInfo
::colorAttachmentCount
equal 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
::pColorAttachments
array with aresolveImageView
not equal toNULL_HANDLE
must have been created with an image created with aExternalFormatANDROID
::externalFormat
value equal to theExternalFormatANDROID
::externalFormat
value 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
cmdBeginRendering
and aRenderingInfo
::colorAttachmentCount
equal to1
, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with an image created with aExternalFormatANDROID
::externalFormat
value equal to theExternalFormatANDROID
::externalFormat
value 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
::externalFormat
value and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic state enabled, thencmdSetColorBlendEnableEXT
must have set the blend enable toFALSE
prior 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
::externalFormat
value and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
dynamic state enabled, thencmdSetRasterizationSamplesEXT
must have setrasterizationSamples
toSAMPLE_COUNT_1_BIT
prior 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_ANDROID
resolve mode, thencmdSetColorBlendEnableEXT
must have set blend enable toFALSE
prior 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_ANDROID
resolve mode, thencmdSetRasterizationSamplesEXT
must have setrasterizationSamples
toSAMPLE_COUNT_1_BIT
prior 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
::externalFormat
value and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
dynamic state enabled, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->width
to1
prior 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
::externalFormat
value and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
dynamic state enabled, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->height
to1
prior 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_ANDROID
resolve mode, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->width
to1
prior 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_ANDROID
resolve mode, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->height
to1
prior to this drawing command - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT
dynamic state enabled thencmdSetColorWriteEnableEXT
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteEnableEXT
must have 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_EXT
dynamic state enabled then theattachmentCount
parameter ofcmdSetColorWriteEnableEXT
must be greater than or equal to thePipelineColorBlendStateCreateInfo
::attachmentCount
of 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then theattachmentCount
parameter of most recent call tocmdSetColorWriteEnableEXT
in 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_EXT
dynamic state enabled thencmdSetDiscardRectangleEXT
must 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_EXT
dynamic state enabled thencmdSetDiscardRectangleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDiscardRectangleEnableEXT
in the current command buffer setdiscardRectangleEnable
toTRUE
, thencmdSetDiscardRectangleEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDiscardRectangleEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetDiscardRectangleModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDiscardRectangleEnableEXT
in the current command buffer setdiscardRectangleEnable
toTRUE
, thencmdSetDiscardRectangleModeEXT
must 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->imageView
wasNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used to create the currently bound graphics pipeline must be equal to theFormat
used to createRenderingInfo
::pDepthAttachment->imageView
- If
the current render pass instance was begun with
cmdBeginRendering
, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, and the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used to create the currently bound graphics pipeline was not equal to theFormat
used 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->imageView
wasNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the currently bound graphics pipeline must be equal to theFormat
used to createRenderingInfo
::pStencilAttachment->imageView
- If
the current render pass instance was begun with
cmdBeginRendering
, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, and the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the currently bound graphics pipeline was not equal to theFormat
used to createRenderingInfo
::pStencilAttachment->imageView
, the value of the format must beFORMAT_UNDEFINED
- If the current render pass
instance was begun with
cmdBeginRendering
andRenderingFragmentShadingRateAttachmentInfoKHR
::imageView
was 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
cmdBeginRendering
andRenderingFragmentDensityMapAttachmentInfoEXT
::imageView
was 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
AttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the current render pass instance was begun withcmdBeginRendering
with aRenderingInfo
::colorAttachmentCount
parameter greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with a sample count equal to the corresponding element of thepColorAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used to create the currently bound graphics pipeline - If the current
render pass instance was begun with
cmdBeginRendering
, the currently bound pipeline was created with aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, andRenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used 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 aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, andRenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used 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
AttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRendering
with aRenderingInfo
::colorAttachmentCount
parameter greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with a sample count equal to the value ofrasterizationSamples
for the currently bound graphics pipeline - If
the current render pass instance was begun with
cmdBeginRendering
, the currently bound pipeline was created without aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, the value ofrasterizationSamples
for 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 aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, the value ofrasterizationSamples
for 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 thepNext
chain ofRenderingInfo
includes aMultisampledRenderToSingleSampledInfoEXT
structure withmultisampledRenderToSingleSampledEnable
equal toTRUE
, then the value ofrasterizationSamples
for 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
::renderPass
equal 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->imageView
was notNULL_HANDLE
, then the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used 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->imageView
was notNULL_HANDLE
, then thePipelineRenderingCreateInfo
::depthAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, then thePipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the pipeline must not beFORMAT_UNDEFINED
-
If the
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXT
query is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXT
query 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_EXT
dynamic state enabled thencmdSetTessellationDomainOriginEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClampEnableEXT
must 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_BIT
stage, thencmdSetTessellationDomainOriginEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthClampEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetPolygonModeEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetPolygonModeEXT
must have 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_EXT
dynamic state enabled thencmdSetRasterizationSamplesEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetRasterizationSamplesEXT
must have 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_EXT
dynamic state enabled thencmdSetSampleMaskEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetSampleMaskEXT
must have 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_EXT
dynamic state enabled thencmdSetAlphaToCoverageEnableEXT
must have 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_EXT
dynamic state enabled, andalphaToCoverageEnable
wasTRUE
in the last call tocmdSetAlphaToCoverageEnableEXT
, then the Fragment Output Interface must contain a variable for the alphaComponent
word inLocation
0 atIndex
0 - If a shader object is bound to
any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAlphaToCoverageEnableEXT
must 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
cmdSetAlphaToCoverageEnableEXT
in the current command buffer setalphaToCoverageEnable
toTRUE
, then the Fragment Output Interface must contain a variable for the alphaComponent
word inLocation
0 atIndex
0 - If the bound graphics pipeline
state was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT
dynamic state enabled thencmdSetAlphaToOneEnableEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAlphaToOneEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetLogicOpEnableEXT
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLogicOpEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetColorBlendEnableEXT
for any attachment set that attachment’s value inpColorBlendEnables
toTRUE
, thencmdSetColorBlendEquationEXT
must have 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_EXT
dynamic state enabled thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteMaskEXT
must have 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_EXT
dynamic state enabled thencmdSetRasterizationStreamEXT
must 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_BIT
stage, thencmdSetRasterizationStreamEXT
must have 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_EXT
dynamic state enabled thencmdSetConservativeRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetConservativeRasterizationModeEXT
must have 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_EXT
dynamic state enabled thencmdSetExtraPrimitiveOverestimationSizeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetConservativeRasterizationModeEXT
in the current command buffer setconservativeRasterizationMode
toCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
, thencmdSetExtraPrimitiveOverestimationSizeEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClipEnableEXT
must 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
cmdSetDepthClipEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetSampleLocationsEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locations
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetSampleLocationsEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendAdvancedEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_blend_operation_advanced
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then at least one ofcmdSetColorBlendEquationEXT
andcmdSetColorBlendAdvancedEXT
must have 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_EXT
dynamic state enabled thencmdSetProvokingVertexModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertex
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetProvokingVertexModeEXT
must have 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_EXT
dynamic state enabled thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
, thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology, thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLineRasterizationModeEXT
must have 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_EXT
dynamic state enabled thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
, thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology, thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLineStippleEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetLineStippleEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetLineStippleEnableEXT
in the current command buffer setstippledLineEnable
toTRUE
, thencmdSetLineStippleEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClipNegativeOneToOneEXT
must 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
cmdSetDepthClipNegativeOneToOneEXT
must have 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_NV
dynamic state enabled thencmdSetViewportWScalingEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportWScalingEnableNV
must have 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_NV
dynamic state enabled thencmdSetViewportSwizzleNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzle
extension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportSwizzleNV
must have 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_NV
dynamic state enabled thencmdSetCoverageToColorEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageToColorEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageToColorLocationNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageToColorEnableNV
in the current command buffer setcoverageToColorEnable
toTRUE
, thencmdSetCoverageToColorLocationNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationModeNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageModulationModeNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationTableEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageModulationModeNV
in the current command buffer set coverageModulationMode to any value other thanCOVERAGE_MODULATION_MODE_NONE_NV
, thencmdSetCoverageModulationTableEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationTableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageModulationTableEnableNV
in the current command buffer setcoverageModulationTableEnable
toTRUE
, thencmdSetCoverageModulationTableNV
must have 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_NV
dynamic state enabled thencmdSetShadingRateImageEnableNV
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer set rasterizerDiscardEnable toFALSE
, thencmdSetFragmentShadingRateKHR
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetShadingRateImageEnableNV
must have 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_NV
dynamic state enabled thencmdSetRepresentativeFragmentTestEnableNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetRepresentativeFragmentTestEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageReductionModeNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageReductionModeNV
must have 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_EXT
state enabled and the last call tocmdSetColorBlendEnableEXT
setpColorBlendEnables
for 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_EXT
state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must follow the rules for a zero-attachment subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state disabled, then thesamples
parameter in the last call tocmdSetSampleMaskEXT
must be greater or equal to thePipelineMultisampleStateCreateInfo
::rasterizationSamples
parameter used to create the bound graphics pipeline - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXT
state andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
states enabled, then thesamples
parameter in the last call tocmdSetSampleMaskEXT
must be greater or equal to therasterizationSamples
parameter in the last call tocmdSetRasterizationSamplesEXT
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, and neither theVK_AMD_mixed_attachment_samples
nor theVK_NV_framebuffer_mixed_samples
extensions are enabled, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must 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_EXT
state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXT
structure withmultisampledRenderToSingleSampledEnable
equal toTRUE
, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must be the same as therasterizationSamples
member of that structure - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic state enabled thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEnableEXT
calls must specify an enable for all active color attachments in the current subpass - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEnableEXT
calls 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_EXT
dynamic state enabled thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEquationEXT
calls 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEquationEXT
calls 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_EXT
dynamic state enabled thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorWriteMaskEXT
calls 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorWriteMaskEXT
calls 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_EXT
dynamic state enabled thencmdSetColorBlendAdvancedEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendAdvancedEXT
calls 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_EXT
andDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic states enabled and the last calls tocmdSetColorBlendEnableEXT
andcmdSetColorBlendAdvancedEXT
have 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_EXT
query is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXT
state enabled, the last call tocmdSetRasterizationStreamEXT
must have set therasterizationStream
to zero - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state disabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
member of thePipelineMultisampleStateCreateInfo
structure the bound graphics pipeline has been created with - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
parameter of the last call tocmdSetRasterizationSamplesEXT
- If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, andsampleLocationsEnable
wasTRUE
in 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_EXT
bit set - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in the last call tocmdSetSampleLocationsEnableEXT
, then thesampleLocationsInfo.sampleLocationGridSize.width
in the last call tocmdSetSampleLocationsEXT
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.width
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equalingrasterizationSamples
- If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in the last call tocmdSetSampleLocationsEnableEXT
, then thesampleLocationsInfo.sampleLocationGridSize.height
in the last call tocmdSetSampleLocationsEXT
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.height
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equalingrasterizationSamples
- If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in 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_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationGridSize.width
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.width
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equaling the value ofrasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationGridSize.height
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.height
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equaling the value ofrasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationsPerPixel
must equalrasterizationSamples
in 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_NV
state enabled, and the last call tocmdSetCoverageModulationTableEnableNV
setcoverageModulationTableEnable
toTRUE
, then thecoverageModulationTableCount
parameter in the last call tocmdSetCoverageModulationTableNV
must equal the currentrasterizationSamples
divided by the number of color samples in the current subpass - If the
VK_NV_framebuffer_mixed_samples
extension 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 currentrasterizationSamples
must 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_NV
state enabled and the last call tocmdSetCoverageToColorEnableNV
set thecoverageToColorEnable
toTRUE
, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNV
coverageToColorLocation
, with aFormat
ofFORMAT_R8_UINT
,FORMAT_R8_SINT
,FORMAT_R16_UINT
,FORMAT_R16_SINT
,FORMAT_R32_UINT
, orFORMAT_R32_SINT
- If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the last call tocmdSetCoverageToColorEnableNV
set thecoverageToColorEnable
toTRUE
, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNV
coverageToColorLocation
, with aFormat
ofFORMAT_R8_UINT
,FORMAT_R8_SINT
,FORMAT_R16_UINT
,FORMAT_R16_SINT
,FORMAT_R32_UINT
, orFORMAT_R32_SINT
- If this
VK_NV_coverage_reduction_mode
extension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV
andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
states 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_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportSwizzleNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_viewport_swizzle
extension is enabled, and a shader object is bound to any graphics stage, then theviewportCount
parameter in the last call tocmdSetViewportSwizzleNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and if the current subpass has any color attachments andrasterizationSamples
of the last call tocmdSetRasterizationSamplesEXT
is greater than the number of color samples, then the pipelinesampleShadingEnable
must beFALSE
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state isLINE_RASTERIZATION_MODE_DEFAULT_EXT
, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits
::strictLines
must beTRUE
-
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT
dynamic 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 theconservativeRasterizationMode
set by the last call tocmdSetConservativeRasterizationModeEXT
must beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
- If the currently bound pipeline
was created with the
PipelineShaderStageCreateInfo
::stage
member of an element ofGraphicsPipelineCreateInfo
::pStages
set toSHADER_STAGE_VERTEX_BIT
,SHADER_STAGE_TESSELLATION_CONTROL_BIT
,SHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_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_EXT
dynamic statecmdSetAttachmentFeedbackLoopEnableEXT
must 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,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_VERTEX_BIT
- If there is no bound graphics
pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT
- If there is no bound graphics
pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT
- If there is no bound graphics
pipeline, and the
geometryShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_GEOMETRY_BIT
- If there is no bound graphics
pipeline,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_FRAGMENT_BIT
- If there is no bound graphics
pipeline, and the
taskShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TASK_BIT_EXT
- If there is no bound graphics
pipeline, and the
meshShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with 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_BIT
orSHADER_STAGE_MESH_BIT_EXT
stages must have a validShaderEXT
bound, and the other must have noShaderEXT
bound - If there is no bound graphics
pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXT
is bound the to theSHADER_STAGE_MESH_BIT_EXT
stage, and thatShaderEXT
was created without theSHADER_CREATE_NO_TASK_SHADER_BIT_EXT
flag, a validShaderEXT
must be bound to theSHADER_STAGE_TASK_BIT_EXT
stage - If there is no bound graphics
pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXT
is bound the to theSHADER_STAGE_MESH_BIT_EXT
stage, and thatShaderEXT
was created with theSHADER_CREATE_NO_TASK_SHADER_BIT_EXT
flag, there must be noShaderEXT
bound to theSHADER_STAGE_TASK_BIT_EXT
stage - If there is no bound graphics
pipeline, and a valid
ShaderEXT
is bound to theSHADER_STAGE_VERTEX_BIT
stage, there must be noShaderEXT
bound to either theSHADER_STAGE_TASK_BIT_EXT
stage or theSHADER_STAGE_MESH_BIT_EXT
stage - If any graphics shader is bound
which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXT
flag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXT
flag in the samecreateShadersEXT
call must also be bound - If any graphics shader is bound
which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXT
flag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXT
flag as part of the samecreateShadersEXT
call must not have anyShaderEXT
bound - 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
cmdBeginRendering
and aRenderingInfo
::colorAttachmentCount
equal to1
, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, and a fragment shader is bound, it must not declare theDepthReplacing
orStencilRefReplacingEXT
execution modes - If the
attachmentFeedbackLoopDynamicState
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAttachmentFeedbackLoopEnableEXT
must 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_ENABLE
set inPipelineDynamicStateCreateInfo
::pDynamicStates
, and the fragment shader declares theEarlyFragmentTests
execution mode and usesOpDepthAttachmentReadEXT
, thedepthWriteEnable
parameter in the last call tocmdSetDepthWriteEnable
must beFALSE
- If the bound graphics
pipeline state includes a fragment shader stage, was created with
DYNAMIC_STATE_STENCIL_WRITE_MASK
set inPipelineDynamicStateCreateInfo
::pDynamicStates
, and the fragment shader declares theEarlyFragmentTests
execution mode and usesOpStencilAttachmentReadEXT
, thewriteMask
parameter in the last call tocmdSetStencilWriteMask
must 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 thepColorWriteMasks
parameter ofcmdSetColorWriteMaskEXT
must 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
Location
for any output attachment statically used in theFragment
Execution
Model
executed 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_HANDLE
buffers 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGY
dynamic state enabled thencmdSetPrimitiveTopology
must have 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_TOPOLOGY
dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted isFALSE
, then theprimitiveTopology
parameter ofcmdSetPrimitiveTopology
must be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo
::topology
state - If the bound graphics pipeline
was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXT
andDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT
dynamic states enabled, thencmdSetVertexInputEXT
must 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_EXT
dynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled, thencmdBindVertexBuffers2EXT
must have been called in the current command buffer prior to this draw command, and thepStrides
parameter ofcmdBindVertexBuffers2EXT
must not beNULL
- If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled thencmdSetVertexInputEXT
must 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled then all variables with theInput
storage class decorated withLocation
in theVertex
Execution
Model
OpEntryPoint
must contain a location inVertexInputAttributeDescription2EXT
::location
- If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled then the numeric type associated with allInput
variables of the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must be the same asVertexInputAttributeDescription2EXT
::format
- If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled andVertexInputAttributeDescription2EXT
::format
has a 64-bit component, then the scalar width associated with allInput
variables of the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must be 64-bit - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled and the scalar width associated with aLocation
decoratedInput
variable in theVertex
Execution
Model
OpEntryPoint
is 64-bit, then the correspondingVertexInputAttributeDescription2EXT
::format
must have a 64-bit component - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled andVertexInputAttributeDescription2EXT
::format
has a 64-bit component, then allInput
variables at the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must not use components that are not present in the format - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BIT
stage and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
toPRIMITIVE_TOPOLOGY_PATCH_LIST
, or the bound graphics pipeline state was created with theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
dynamic state enabled thencmdSetPatchControlPointsEXT
must 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE
dynamic state enabled thencmdSetPrimitiveRestartEnable
must 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
::stage
member of an element ofGraphicsPipelineCreateInfo
::pStages
set toSHADER_STAGE_TASK_BIT_EXT
orSHADER_STAGE_MESH_BIT_EXT
- There must be no shader object
bound to either of the
SHADER_STAGE_TASK_BIT_EXT
orSHADER_STAGE_MESH_BIT_EXT
stages - If
buffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
buffer
must have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BIT
bit set -
offset
must be a multiple of4
-
commandBuffer
must not be a protected command buffer - If the
multiDrawIndirect
feature is not enabled,
drawCount
must be0
or1
-
drawCount
must be less than or equal toPhysicalDeviceLimits
::maxDrawIndirectCount
- If
drawCount
is greater than1
,stride
must be a multiple of4
and must be greater than or equal tosizeof
(DrawIndirectCommand
) - If
drawCount
is equal to1
, (offset
+sizeof
(DrawIndirectCommand
)) must be less than or equal to the size ofbuffer
- If
drawCount
is greater than1
, (stride
× (drawCount
- 1) +offset
+sizeof
(DrawIndirectCommand
)) must be less than or equal to the size ofbuffer
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
buffer
must be a validBuffer
handle -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
, andcommandBuffer
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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
Sampler
created withmagFilter
orminFilter
equal toFILTER_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Sampler
created withmipmapMode
equal toSAMPLER_MIPMAP_MODE_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageView
is sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
- If a
ImageView
is 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_BUFFER
descriptor 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
ImageView
is sampled withFILTER_CUBIC_EXT
as 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
ImageView
is sampled withFILTER_CUBIC_EXT
as a result of this command, it must not have aImageViewType
ofIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
, orIMAGE_VIEW_TYPE_CUBE_ARRAY
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must have aImageViewType
and format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubic
returned bygetPhysicalDeviceImageFormatProperties2
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
with a reduction mode of eitherSAMPLER_REDUCTION_MODE_MIN
orSAMPLER_REDUCTION_MODE_MAX
as a result of this command must have aImageViewType
and format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubicMinmax
returned bygetPhysicalDeviceImageFormatProperties2
- If the
cubicRangeClamp
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must not have aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
- Any
ImageView
being sampled with aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
as a result of this command must sample withFILTER_CUBIC_EXT
- If the
selectableCubicWeights
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must haveSamplerCubicWeightsCreateInfoQCOM
::cubicWeights
equal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
- Any
Image
created with aImageCreateInfo
::flags
containingIMAGE_CREATE_CORNER_SAMPLED_BIT_NV
sampled as a result of this command must only be sampled using aSamplerAddressMode
ofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
- For any
ImageView
being written as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- For any
ImageView
being read as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
- For any
BufferView
being written as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- Any
BufferView
being read as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
then 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
PipelineLayout
that is compatible for set n, with thePipelineLayout
orDescriptorSetLayout
array that was used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets
, must be valid if they are statically used by thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If the descriptors used
by the
Pipeline
bound to the pipeline bind point were specified viacmdBindDescriptorSets
, the boundPipeline
must 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 thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT
, must be valid if they are dynamically used by anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used
by the
Pipeline
bound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT
, the boundPipeline
must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If a descriptor is
dynamically used with a
Pipeline
created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, the descriptor memory must be resident - If a descriptor is
dynamically used with a
ShaderEXT
created with aDescriptorSetLayout
that 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_HANDLE
shader 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
Pipeline
object bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used to sample from anyImage
with aImageView
of the typeIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
,IMAGE_VIEW_TYPE_1D_ARRAY
,IMAGE_VIEW_TYPE_2D_ARRAY
orIMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
foruniformBuffers
, 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
ShaderEXT
bound 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
forstorageBuffers
, 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
ShaderEXT
bound 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
commandBuffer
is 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
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*
orOpImageSparseSample*
instructions - If
a bound shader
accesses a
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must not use theConstOffset
andOffset
operands - If a
ImageView
is accessed as a result of this command, then the image view’sviewType
must match theDim
operand of theOpTypeImage
as described in ??? - If a
ImageView
is accessed as a result of this command, then the numeric type of the image view’sformat
and theSampled
Type
operand of theOpTypeImage
must match - If a
ImageView
created with a format other thanFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the image view’s format - If a
ImageView
created with the formatFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have four components - If a
BufferView
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the buffer view’s format - If a
ImageView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
ImageView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If a
BufferView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
BufferView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If the
sparseImageInt64Atomics
feature is not enabled,
Image
objects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If the
sparseImageInt64Atomics
feature is not enabled,
Buffer
objects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If
OpImageWeightedSampleQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
- If
OpImageWeightedSampleQCOM
uses aImageView
as 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
OpImageBoxFilterQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
- If
OpImageBlockMatchSSDQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
or 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format must be a single-component format. - If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
read 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
renderPass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound toPIPELINE_BIND_POINT_GRAPHICS
- The subpass index of
the current render pass must be equal to the
subpass
member of theGraphicsPipelineCreateInfo
structure specified when creating thePipeline
bound 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
OpTypeImage
variable with aDim
operand ofSubpassData
, it must be decorated with anInputAttachmentIndex
that corresponds to a valid input attachment in the current subpass - Input attachment views
accessed in a subpass must be created with the same
Format
as the corresponding subpass definition, and be created with aImageView
that is compatible with the attachment referenced by the subpass'pInputAttachments
[InputAttachmentIndex
] in the currently boundFramebuffer
as 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_EXT
image layout, and either:- the
PIPELINE_CREATE_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_COLOR_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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_EXT
image layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_DEPTH_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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_EXT
image layout, and either:- the
PIPELINE_CREATE_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
is set on the currently bound pipeline or the last call to
cmdSetAttachmentFeedbackLoopEnableEXT
includedIMAGE_ASPECT_STENCIL_BIT
and- there is no currently bound graphics pipeline or
- the currently bound graphics pipeline was created with
DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT
it 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
writeMask
are 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_VIEWPORT
dynamic state enabled thencmdSetViewport
must have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SCISSOR
dynamic state enabled thencmdSetScissor
must have 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_WIDTH
dynamic state enabled thencmdSetLineWidth
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
,cmdSetLineWidth
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology,cmdSetLineWidth
must 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_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
,cmdSetLineWidth
must have 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
dynamic state enabled thencmdSetDepthBias
orcmdSetDepthBias2EXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthBiasEnable
in the current command buffer setdepthBiasEnable
toTRUE
,cmdSetDepthBias
orcmdSetDepthBias2EXT
must have 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_CONSTANTS
dynamic state enabled thencmdSetBlendConstants
must have been called in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetColorBlendEnableEXT
in the current command buffer set any element ofpColorBlendEnables
toTRUE
, and the most recent call tocmdSetColorBlendEquationEXT
in the current command buffer set the same element ofpColorBlendEquations
to aColorBlendEquationEXT
structure with anyBlendFactor
member with a value ofBLEND_FACTOR_CONSTANT_COLOR
,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
,BLEND_FACTOR_CONSTANT_ALPHA
, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
,cmdSetBlendConstants
must have 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
dynamic state enabled, and if the currentdepthBoundsTestEnable
state isTRUE
, thencmdSetDepthBounds
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthBoundsTestEnable
in the current command buffer setdepthBoundsTestEnable
toTRUE
, thencmdSetDepthBounds
must have 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_MASK
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilCompareMask
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilCompareMask
must have 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_MASK
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilWriteMask
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilWriteMask
must have 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_REFERENCE
dynamic state enabled, and if the currentstencilTestEnable
state isTRUE
, thencmdSetStencilReference
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
,cmdSetStencilReference
must 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
::sampleLocationsEnable
set toTRUE
and the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
bit set - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
dynamic state enabled thencmdSetSampleLocationsEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetSampleLocationsEnableEXT
in the current command buffer setsampleLocationsEnable
toTRUE
, thencmdSetSampleLocationsEXT
must have 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_EXT
state enabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
member of thePipelineMultisampleStateCreateInfo
structure the bound graphics pipeline has been created with - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_CULL_MODE
dynamic state enabled thencmdSetCullMode
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCullMode
must have 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_FACE
dynamic state enabled thencmdSetFrontFace
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetFrontFace
must have 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_ENABLE
dynamic state enabled thencmdSetDepthTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthTestEnable
must have 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_ENABLE
dynamic state enabled thencmdSetDepthWriteEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthWriteEnable
must have 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_OP
dynamic state enabled thencmdSetDepthCompareOp
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDepthTestEnable
in the current command buffer setdepthTestEnable
toTRUE
, thencmdSetDepthCompareOp
must have 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_ENABLE
dynamic state enabled thencmdSetDepthBoundsTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then thecmdSetDepthBoundsTestEnable
must have 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_ENABLE
dynamic state enabled thencmdSetStencilTestEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetStencilTestEnable
must have 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_OP
dynamic state enabled thencmdSetStencilOp
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetStencilTestEnable
in the current command buffer setstencilTestEnable
toTRUE
, thencmdSetStencilOp
must have 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_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNT
dynamic state enabled, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thePipelineViewportStateCreateInfo
::scissorCount
of the pipeline - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, thencmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and thescissorCount
parameter ofcmdSetScissorWithCount
must match thePipelineViewportStateCreateInfo
::viewportCount
of the pipeline - If the bound
graphics pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic states enabled then bothcmdSetViewportWithCount
andcmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thescissorCount
parameter ofcmdSetScissorWithCount
- If a shader object is
bound to any graphics stage, then both
cmdSetViewportWithCount
andcmdSetScissorWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must match thescissorCount
parameter ofcmdSetScissorWithCount
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_W_SCALING_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportWScalingNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNV
in the current command buffer setviewportWScalingEnable
toTRUE
, thencmdSetViewportWScalingNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetViewportWScalingEnableNV
in the current command buffer setviewportWScalingEnable
toTRUE
, then theviewportCount
parameter in the last call tocmdSetViewportWScalingNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportShadingRatePaletteNV
must be greater than or equal to theviewportCount
parameter 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoarseSampleOrderNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetShadingRateImageEnableNV
in the current command buffer setshadingRateImageEnable
toTRUE
, thencmdSetViewportShadingRatePaletteNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetShadingRateImageEnableNV
in the current command buffer setshadingRateImageEnable
toTRUE
, then theviewportCount
parameter in the last call tocmdSetViewportShadingRatePaletteNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNV
structure chained fromPipelineViewportStateCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNV
structure chained fromPipelineViewportStateCreateInfo
, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV
::exclusiveScissorCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NV
dynamic state enabled thencmdSetExclusiveScissorEnableNV
must have 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_NV
dynamic state enabled thencmdSetExclusiveScissorNV
must 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
cmdSetExclusiveScissorEnableNV
must 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
cmdSetExclusiveScissorEnableNV
in the current command buffer set any element ofpExclusiveScissorEnables
toTRUE
, thencmdSetExclusiveScissorNV
must have 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_ENABLE
dynamic state enabled thencmdSetRasterizerDiscardEnable
must have been called in the current command buffer prior to this drawing command - If a shader object is
bound to any graphics stage, then
cmdSetRasterizerDiscardEnable
must have 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_ENABLE
dynamic state enabled thencmdSetDepthBiasEnable
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthBiasEnable
must have 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_EXT
dynamic state enabled thencmdSetLogicOpEXT
must have been called in the current command buffer prior to this drawing command and thelogicOp
must be a validLogicOp
value - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetLogicOpEnableEXT
setlogicOpEnable
toTRUE
, thencmdSetLogicOpEXT
must have been called in the current command buffer prior to this drawing command and thelogicOp
must be a validLogicOp
value -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
dynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHR
built-in, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must be1
-
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHR
built-in, thencmdSetViewportWithCount
must have been called in the current command buffer prior to this drawing command, and theviewportCount
parameter ofcmdSetViewportWithCount
must 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 theblendEnable
member of the corresponding element of thepAttachments
member ofpColorBlendState
must beFALSE
- If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, 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 ofpColorBlendEnables
in the most recent call tocmdSetColorBlendEnableEXT
in 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_samples
extension, theVK_NV_framebuffer_mixed_samples
extension, or the multisampledRenderToSingleSampled feature is enabled, thenrasterizationSamples
for 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and none of theVK_AMD_mixed_attachment_samples
extension, theVK_NV_framebuffer_mixed_samples
extension, or the multisampledRenderToSingleSampled feature is enabled, then the most recent call tocmdSetRasterizationSamplesEXT
in the current command buffer must have setrasterizationSamples
to 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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
, theimageView
member ofpDepthAttachment
is notNULL_HANDLE
, and thelayout
member ofpDepthAttachment
isIMAGE_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
, theimageView
member ofpStencilAttachment
is notNULL_HANDLE
, and thelayout
member ofpStencilAttachment
isIMAGE_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
::viewMask
equal toRenderingInfo
::viewMask
- If the
current render pass instance was begun with
cmdBeginRendering
, the currently bound graphics pipeline must have been created with aPipelineRenderingCreateInfo
::colorAttachmentCount
equal toRenderingInfo
::colorAttachmentCount
-
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with aFormat
equal to the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used to create the currently bound graphics pipeline -
If the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with aFormat
equal to the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used 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
cmdBeginRendering
andRenderingInfo
::colorAttachmentCount
greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
equal toNULL_HANDLE
must have the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used to create the currently bound pipeline equal toFORMAT_UNDEFINED
- If the
current render pass instance was begun with
cmdBeginRendering
, with aRenderingInfo
::colorAttachmentCount
equal 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
::pColorAttachments
array with aresolveImageView
not equal toNULL_HANDLE
must have been created with an image created with aExternalFormatANDROID
::externalFormat
value equal to theExternalFormatANDROID
::externalFormat
value 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
cmdBeginRendering
and aRenderingInfo
::colorAttachmentCount
equal to1
, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with an image created with aExternalFormatANDROID
::externalFormat
value equal to theExternalFormatANDROID
::externalFormat
value 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
::externalFormat
value and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic state enabled, thencmdSetColorBlendEnableEXT
must have set the blend enable toFALSE
prior 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
::externalFormat
value and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
dynamic state enabled, thencmdSetRasterizationSamplesEXT
must have setrasterizationSamples
toSAMPLE_COUNT_1_BIT
prior 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_ANDROID
resolve mode, thencmdSetColorBlendEnableEXT
must have set blend enable toFALSE
prior 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_ANDROID
resolve mode, thencmdSetRasterizationSamplesEXT
must have setrasterizationSamples
toSAMPLE_COUNT_1_BIT
prior 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
::externalFormat
value and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
dynamic state enabled, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->width
to1
prior 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
::externalFormat
value and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR
dynamic state enabled, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->height
to1
prior 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_ANDROID
resolve mode, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->width
to1
prior 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_ANDROID
resolve mode, thencmdSetFragmentShadingRateKHR
must have setpFragmentSize->height
to1
prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT
dynamic state enabled thencmdSetColorWriteEnableEXT
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteEnableEXT
must have 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_EXT
dynamic state enabled then theattachmentCount
parameter ofcmdSetColorWriteEnableEXT
must be greater than or equal to thePipelineColorBlendStateCreateInfo
::attachmentCount
of 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then theattachmentCount
parameter of most recent call tocmdSetColorWriteEnableEXT
in 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_EXT
dynamic state enabled thencmdSetDiscardRectangleEXT
must 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_EXT
dynamic state enabled thencmdSetDiscardRectangleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDiscardRectangleEnableEXT
in the current command buffer setdiscardRectangleEnable
toTRUE
, thencmdSetDiscardRectangleEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDiscardRectangleEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetDiscardRectangleModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectangles
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetDiscardRectangleEnableEXT
in the current command buffer setdiscardRectangleEnable
toTRUE
, thencmdSetDiscardRectangleModeEXT
must 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->imageView
wasNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used to create the currently bound graphics pipeline must be equal to theFormat
used to createRenderingInfo
::pDepthAttachment->imageView
-
If the current render pass instance was begun with
cmdBeginRendering
, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, and the value ofPipelineRenderingCreateInfo
::depthAttachmentFormat
used to create the currently bound graphics pipeline was not equal to theFormat
used 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->imageView
wasNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the currently bound graphics pipeline must be equal to theFormat
used to createRenderingInfo
::pStencilAttachment->imageView
-
If the current render pass instance was begun with
cmdBeginRendering
, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, and the value ofPipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the currently bound graphics pipeline was not equal to theFormat
used to createRenderingInfo
::pStencilAttachment->imageView
, the value of the format must beFORMAT_UNDEFINED
- If the current
render pass instance was begun with
cmdBeginRendering
andRenderingFragmentShadingRateAttachmentInfoKHR
::imageView
was 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
cmdBeginRendering
andRenderingFragmentDensityMapAttachmentInfoEXT
::imageView
was 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
AttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the current render pass instance was begun withcmdBeginRendering
with aRenderingInfo
::colorAttachmentCount
parameter greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with a sample count equal to the corresponding element of thepColorAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used to create the currently bound graphics pipeline - If the
current render pass instance was begun with
cmdBeginRendering
, the currently bound pipeline was created with aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, andRenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used 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 aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, andRenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member ofAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
used 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
AttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, and the current render pass instance was begun withcmdBeginRendering
with aRenderingInfo
::colorAttachmentCount
parameter greater than0
, then each element of theRenderingInfo
::pColorAttachments
array with aimageView
not equal toNULL_HANDLE
must have been created with a sample count equal to the value ofrasterizationSamples
for the currently bound graphics pipeline -
If the current render pass instance was begun with
cmdBeginRendering
, the currently bound pipeline was created without aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo
::pDepthAttachment->imageView
was notNULL_HANDLE
, the value ofrasterizationSamples
for 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 aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, and the multisampledRenderToSingleSampled feature is not enabled, andRenderingInfo
::pStencilAttachment->imageView
was notNULL_HANDLE
, the value ofrasterizationSamples
for 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 thepNext
chain ofRenderingInfo
includes aMultisampledRenderToSingleSampledInfoEXT
structure withmultisampledRenderToSingleSampledEnable
equal toTRUE
, then the value ofrasterizationSamples
for 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
::renderPass
equal 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->imageView
was notNULL_HANDLE
, then the corresponding element ofPipelineRenderingCreateInfo
::pColorAttachmentFormats
used 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->imageView
was notNULL_HANDLE
, then thePipelineRenderingCreateInfo
::depthAttachmentFormat
used 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->imageView
was notNULL_HANDLE
, then thePipelineRenderingCreateInfo
::stencilAttachmentFormat
used to create the pipeline must not beFORMAT_UNDEFINED
-
If the
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXT
query is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXT
query 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_EXT
dynamic state enabled thencmdSetTessellationDomainOriginEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClampEnableEXT
must 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_BIT
stage, thencmdSetTessellationDomainOriginEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetDepthClampEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetPolygonModeEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetPolygonModeEXT
must have 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_EXT
dynamic state enabled thencmdSetRasterizationSamplesEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetRasterizationSamplesEXT
must have 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_EXT
dynamic state enabled thencmdSetSampleMaskEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetSampleMaskEXT
must have 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_EXT
dynamic state enabled thencmdSetAlphaToCoverageEnableEXT
must have 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_EXT
dynamic state enabled, andalphaToCoverageEnable
wasTRUE
in the last call tocmdSetAlphaToCoverageEnableEXT
, then the Fragment Output Interface must contain a variable for the alphaComponent
word inLocation
0 atIndex
0 - If a shader object is
bound to any graphics stage, and the most recent call to
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAlphaToCoverageEnableEXT
must 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
cmdSetAlphaToCoverageEnableEXT
in the current command buffer setalphaToCoverageEnable
toTRUE
, then the Fragment Output Interface must contain a variable for the alphaComponent
word inLocation
0 atIndex
0 - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXT
dynamic state enabled thencmdSetAlphaToOneEnableEXT
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAlphaToOneEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetLogicOpEnableEXT
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLogicOpEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetColorBlendEnableEXT
for any attachment set that attachment’s value inpColorBlendEnables
toTRUE
, thencmdSetColorBlendEquationEXT
must have 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_EXT
dynamic state enabled thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteMaskEXT
must have 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_EXT
dynamic state enabled thencmdSetRasterizationStreamEXT
must 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_BIT
stage, thencmdSetRasterizationStreamEXT
must have 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_EXT
dynamic state enabled thencmdSetConservativeRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetConservativeRasterizationModeEXT
must have 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_EXT
dynamic state enabled thencmdSetExtraPrimitiveOverestimationSizeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetConservativeRasterizationModeEXT
in the current command buffer setconservativeRasterizationMode
toCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
, thencmdSetExtraPrimitiveOverestimationSizeEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClipEnableEXT
must 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
cmdSetDepthClipEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetSampleLocationsEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locations
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetSampleLocationsEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetColorBlendAdvancedEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_blend_operation_advanced
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, then at least one ofcmdSetColorBlendEquationEXT
andcmdSetColorBlendAdvancedEXT
must have 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_EXT
dynamic state enabled thencmdSetProvokingVertexModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertex
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetProvokingVertexModeEXT
must have 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_EXT
dynamic state enabled thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
, thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology, thencmdSetLineRasterizationModeEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLineRasterizationModeEXT
must have 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_EXT
dynamic state enabled thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPolygonModeEXT
in the current command buffer setpolygonMode
toPOLYGON_MODE_LINE
, thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to theSHADER_STAGE_VERTEX_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
to any line topology, thencmdSetLineStippleEnableEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object that outputs line primitives is bound to theSHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_STAGE_GEOMETRY_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetLineStippleEnableEXT
must have 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_EXT
dynamic state enabled thencmdSetLineStippleEXT
must have been called in the current command buffer prior to this drawing command - If the
VK_EXT_line_rasterization
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetLineStippleEnableEXT
in the current command buffer setstippledLineEnable
toTRUE
, thencmdSetLineStippleEXT
must have 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_EXT
dynamic state enabled thencmdSetDepthClipNegativeOneToOneEXT
must 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
cmdSetDepthClipNegativeOneToOneEXT
must have 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_NV
dynamic state enabled thencmdSetViewportWScalingEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scaling
extension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportWScalingEnableNV
must have 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_NV
dynamic state enabled thencmdSetViewportSwizzleNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzle
extension is enabled, and a shader object is bound to any graphics stage, thencmdSetViewportSwizzleNV
must have 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_NV
dynamic state enabled thencmdSetCoverageToColorEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageToColorEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageToColorLocationNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageToColorEnableNV
in the current command buffer setcoverageToColorEnable
toTRUE
, thencmdSetCoverageToColorLocationNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationModeNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageModulationModeNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationTableEnableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageModulationModeNV
in the current command buffer set coverageModulationMode to any value other thanCOVERAGE_MODULATION_MODE_NONE_NV
, thencmdSetCoverageModulationTableEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageModulationTableNV
must have been called in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and a shader object is bound to any graphics stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the most recent call tocmdSetCoverageModulationTableEnableNV
in the current command buffer setcoverageModulationTableEnable
toTRUE
, thencmdSetCoverageModulationTableNV
must have 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_NV
dynamic state enabled thencmdSetShadingRateImageEnableNV
must 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer set rasterizerDiscardEnable toFALSE
, thencmdSetFragmentShadingRateKHR
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetShadingRateImageEnableNV
must have 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_NV
dynamic state enabled thencmdSetRepresentativeFragmentTestEnableNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetRepresentativeFragmentTestEnableNV
must have 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_NV
dynamic state enabled thencmdSetCoverageReductionModeNV
must 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
cmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetCoverageReductionModeNV
must have 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_EXT
state enabled and the last call tocmdSetColorBlendEnableEXT
setpColorBlendEnables
for 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_EXT
state enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must follow the rules for a zero-attachment subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state disabled, then thesamples
parameter in the last call tocmdSetSampleMaskEXT
must be greater or equal to thePipelineMultisampleStateCreateInfo
::rasterizationSamples
parameter used to create the bound graphics pipeline - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXT
state andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
states enabled, then thesamples
parameter in the last call tocmdSetSampleMaskEXT
must be greater or equal to therasterizationSamples
parameter in the last call tocmdSetRasterizationSamplesEXT
- If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, and neither theVK_AMD_mixed_attachment_samples
nor theVK_NV_framebuffer_mixed_samples
extensions are enabled, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must 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_EXT
state enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXT
structure withmultisampledRenderToSingleSampledEnable
equal toTRUE
, then therasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
must be the same as therasterizationSamples
member of that structure - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic state enabled thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEnableEXT
calls must specify an enable for all active color attachments in the current subpass - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEnableEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEnableEXT
calls 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_EXT
dynamic state enabled thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEquationEXT
calls 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorBlendEquationEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendEquationEXT
calls 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_EXT
dynamic state enabled thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorWriteMaskEXT
calls 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_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetColorWriteMaskEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorWriteMaskEXT
calls 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_EXT
dynamic state enabled thencmdSetColorBlendAdvancedEXT
must have been called in the current command buffer prior to this drawing command, and the attachments specified by thefirstAttachment
andattachmentCount
parameters ofcmdSetColorBlendAdvancedEXT
calls 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_EXT
andDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXT
dynamic states enabled and the last calls tocmdSetColorBlendEnableEXT
andcmdSetColorBlendAdvancedEXT
have 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_EXT
query is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXT
state enabled, the last call tocmdSetRasterizationStreamEXT
must have set therasterizationStream
to zero - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state disabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
member of thePipelineMultisampleStateCreateInfo
structure the bound graphics pipeline has been created with - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, then thesampleLocationsPerPixel
member ofpSampleLocationsInfo
in the last call tocmdSetSampleLocationsEXT
must equal therasterizationSamples
parameter of the last call tocmdSetRasterizationSamplesEXT
- If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, andsampleLocationsEnable
wasTRUE
in 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_EXT
bit set - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in the last call tocmdSetSampleLocationsEnableEXT
, then thesampleLocationsInfo.sampleLocationGridSize.width
in the last call tocmdSetSampleLocationsEXT
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.width
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equalingrasterizationSamples
- If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in the last call tocmdSetSampleLocationsEnableEXT
, then thesampleLocationsInfo.sampleLocationGridSize.height
in the last call tocmdSetSampleLocationsEXT
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.height
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equalingrasterizationSamples
- If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BIT
stage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, and ifsampleLocationsEnable
wasTRUE
in 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_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationGridSize.width
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.width
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equaling the value ofrasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
- If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationGridSize.height
must evenly divideMultisamplePropertiesEXT
::sampleLocationGridSize.height
as returned bygetPhysicalDeviceMultisamplePropertiesEXT
with asamples
parameter equaling the value ofrasterizationSamples
in the last call tocmdSetRasterizationSamplesEXT
- If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
state disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
state enabled, thesampleLocationsEnable
member of aPipelineSampleLocationsStateCreateInfoEXT
::sampleLocationsEnable
in the bound graphics pipeline isTRUE
orDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXT
state enabled, then,sampleLocationsInfo.sampleLocationsPerPixel
must equalrasterizationSamples
in 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_NV
state enabled, and the last call tocmdSetCoverageModulationTableEnableNV
setcoverageModulationTableEnable
toTRUE
, then thecoverageModulationTableCount
parameter in the last call tocmdSetCoverageModulationTableNV
must equal the currentrasterizationSamples
divided by the number of color samples in the current subpass - If the
VK_NV_framebuffer_mixed_samples
extension 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 currentrasterizationSamples
must 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_NV
state enabled and the last call tocmdSetCoverageToColorEnableNV
set thecoverageToColorEnable
toTRUE
, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNV
coverageToColorLocation
, with aFormat
ofFORMAT_R8_UINT
,FORMAT_R8_SINT
,FORMAT_R16_UINT
,FORMAT_R16_SINT
,FORMAT_R32_UINT
, orFORMAT_R32_SINT
- If the
VK_NV_fragment_coverage_to_color
extension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, and the last call tocmdSetCoverageToColorEnableNV
set thecoverageToColorEnable
toTRUE
, then the current subpass must have a color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNV
coverageToColorLocation
, with aFormat
ofFORMAT_R8_UINT
,FORMAT_R8_SINT
,FORMAT_R16_UINT
,FORMAT_R16_SINT
,FORMAT_R32_UINT
, orFORMAT_R32_SINT
- If this
VK_NV_coverage_reduction_mode
extension is enabled, the bound graphics pipeline state was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NV
andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXT
states 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_COUNT
dynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
dynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV
::viewportCount
greater or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT
andDYNAMIC_STATE_VIEWPORT_SWIZZLE_NV
dynamic states enabled then theviewportCount
parameter in the last call tocmdSetViewportSwizzleNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_viewport_swizzle
extension is enabled, and a shader object is bound to any graphics stage, then theviewportCount
parameter in the last call tocmdSetViewportSwizzleNV
must be greater than or equal to theviewportCount
parameter in the last call tocmdSetViewportWithCount
- If the
VK_NV_framebuffer_mixed_samples
extension is enabled, and if the current subpass has any color attachments andrasterizationSamples
of the last call tocmdSetRasterizationSamplesEXT
is greater than the number of color samples, then the pipelinesampleShadingEnable
must beFALSE
- If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state 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_EXT
orDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXT
dynamic states enabled, and if the currentstippledLineEnable
state isTRUE
and the currentlineRasterizationMode
state isLINE_RASTERIZATION_MODE_DEFAULT_EXT
, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits
::strictLines
must beTRUE
-
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXT
dynamic 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 theconservativeRasterizationMode
set by the last call tocmdSetConservativeRasterizationModeEXT
must beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
- If the currently bound
pipeline was created with the
PipelineShaderStageCreateInfo
::stage
member of an element ofGraphicsPipelineCreateInfo
::pStages
set toSHADER_STAGE_VERTEX_BIT
,SHADER_STAGE_TESSELLATION_CONTROL_BIT
,SHADER_STAGE_TESSELLATION_EVALUATION_BIT
orSHADER_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_EXT
dynamic statecmdSetAttachmentFeedbackLoopEnableEXT
must 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,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_VERTEX_BIT
- If there is no bound
graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT
- If there is no bound
graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT
- If there is no bound
graphics pipeline, and the
geometryShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_GEOMETRY_BIT
- If there is no bound
graphics pipeline,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_FRAGMENT_BIT
- If there is no bound
graphics pipeline, and the
taskShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with an element ofSHADER_STAGE_TASK_BIT_EXT
- If there is no bound
graphics pipeline, and the
meshShader
feature is enabled,
cmdBindShadersEXT
must have been called in the current command buffer withpStages
with 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_BIT
orSHADER_STAGE_MESH_BIT_EXT
stages must have a validShaderEXT
bound, and the other must have noShaderEXT
bound - If there is no bound
graphics pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXT
is bound the to theSHADER_STAGE_MESH_BIT_EXT
stage, and thatShaderEXT
was created without theSHADER_CREATE_NO_TASK_SHADER_BIT_EXT
flag, a validShaderEXT
must be bound to theSHADER_STAGE_TASK_BIT_EXT
stage - If there is no bound
graphics pipeline, and both the
taskShader
and
meshShader
features are enabled, and a valid
ShaderEXT
is bound the to theSHADER_STAGE_MESH_BIT_EXT
stage, and thatShaderEXT
was created with theSHADER_CREATE_NO_TASK_SHADER_BIT_EXT
flag, there must be noShaderEXT
bound to theSHADER_STAGE_TASK_BIT_EXT
stage - If there is no bound
graphics pipeline, and a valid
ShaderEXT
is bound to theSHADER_STAGE_VERTEX_BIT
stage, there must be noShaderEXT
bound to either theSHADER_STAGE_TASK_BIT_EXT
stage or theSHADER_STAGE_MESH_BIT_EXT
stage - If any graphics shader is
bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXT
flag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXT
flag in the samecreateShadersEXT
call must also be bound - If any graphics shader is
bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXT
flag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXT
flag as part of the samecreateShadersEXT
call must not have anyShaderEXT
bound - 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
cmdBeginRendering
and aRenderingInfo
::colorAttachmentCount
equal to1
, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, and a fragment shader is bound, it must not declare theDepthReplacing
orStencilRefReplacingEXT
execution modes - If the
attachmentFeedbackLoopDynamicState
feature is enabled on the device, and a shader object is bound to
the
SHADER_STAGE_FRAGMENT_BIT
stage, and the most recent call tocmdSetRasterizerDiscardEnable
in the current command buffer setrasterizerDiscardEnable
toFALSE
, thencmdSetAttachmentFeedbackLoopEnableEXT
must 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_ENABLE
set inPipelineDynamicStateCreateInfo
::pDynamicStates
, and the fragment shader declares theEarlyFragmentTests
execution mode and usesOpDepthAttachmentReadEXT
, thedepthWriteEnable
parameter in the last call tocmdSetDepthWriteEnable
must beFALSE
- If the bound
graphics pipeline state includes a fragment shader stage, was
created with
DYNAMIC_STATE_STENCIL_WRITE_MASK
set inPipelineDynamicStateCreateInfo
::pDynamicStates
, and the fragment shader declares theEarlyFragmentTests
execution mode and usesOpStencilAttachmentReadEXT
, thewriteMask
parameter in the last call tocmdSetStencilWriteMask
must 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 thepColorWriteMasks
parameter ofcmdSetColorWriteMaskEXT
must 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
Location
for any output attachment statically used in theFragment
Execution
Model
executed 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_HANDLE
buffers 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGY
dynamic state enabled thencmdSetPrimitiveTopology
must have 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_TOPOLOGY
dynamic state enabled and the dynamicPrimitiveTopologyUnrestricted isFALSE
, then theprimitiveTopology
parameter ofcmdSetPrimitiveTopology
must be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo
::topology
state - If the bound graphics
pipeline was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXT
andDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT
dynamic states enabled, thencmdSetVertexInputEXT
must 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_EXT
dynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled, thencmdBindVertexBuffers2EXT
must have been called in the current command buffer prior to this draw command, and thepStrides
parameter ofcmdBindVertexBuffers2EXT
must not beNULL
- If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled thencmdSetVertexInputEXT
must 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled then all variables with theInput
storage class decorated withLocation
in theVertex
Execution
Model
OpEntryPoint
must contain a location inVertexInputAttributeDescription2EXT
::location
- If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled then the numeric type associated with allInput
variables of the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must be the same asVertexInputAttributeDescription2EXT
::format
- If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled andVertexInputAttributeDescription2EXT
::format
has a 64-bit component, then the scalar width associated with allInput
variables of the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must be 64-bit - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled and the scalar width associated with aLocation
decoratedInput
variable in theVertex
Execution
Model
OpEntryPoint
is 64-bit, then the correspondingVertexInputAttributeDescription2EXT
::format
must have a 64-bit component - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXT
dynamic state enabled andVertexInputAttributeDescription2EXT
::format
has a 64-bit component, then allInput
variables at the correspondingLocation
in theVertex
Execution
Model
OpEntryPoint
must not use components that are not present in the format - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BIT
stage and the most recent call tocmdSetPrimitiveTopology
in the current command buffer setprimitiveTopology
toPRIMITIVE_TOPOLOGY_PATCH_LIST
, or the bound graphics pipeline state was created with theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT
dynamic state enabled thencmdSetPatchControlPointsEXT
must 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_BIT
stage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE
dynamic state enabled thencmdSetPrimitiveRestartEnable
must 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
::stage
member of an element ofGraphicsPipelineCreateInfo
::pStages
set toSHADER_STAGE_TASK_BIT_EXT
orSHADER_STAGE_MESH_BIT_EXT
- There must be no shader
object bound to either of the
SHADER_STAGE_TASK_BIT_EXT
orSHADER_STAGE_MESH_BIT_EXT
stages - If
buffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
buffer
must have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BIT
bit set -
offset
must be a multiple of4
-
commandBuffer
must not be a protected command buffer - If the
multiDrawIndirect
feature is not enabled,
drawCount
must be0
or1
-
drawCount
must 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, withindexSize
being based on the type specified byindexType
, where the index buffer,indexType
, andoffset
are specified viacmdBindIndexBuffer
- If
drawCount
is greater than1
,stride
must be a multiple of4
and must be greater than or equal tosizeof
(DrawIndexedIndirectCommand
) - If
drawCount
is equal to1
, (offset
+sizeof
(DrawIndexedIndirectCommand
)) must be less than or equal to the size ofbuffer
- If
drawCount
is greater than1
, (stride
× (drawCount
- 1) +offset
+sizeof
(DrawIndexedIndirectCommand
)) must be less than or equal to the size ofbuffer
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
buffer
must be a validBuffer
handle -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
, andcommandBuffer
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
Sampler
created withmagFilter
orminFilter
equal toFILTER_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Sampler
created withmipmapMode
equal toSAMPLER_MIPMAP_MODE_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageView
is sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
- If a
ImageView
is 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_BUFFER
descriptor 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
ImageView
is sampled withFILTER_CUBIC_EXT
as 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
ImageView
is sampled withFILTER_CUBIC_EXT
as a result of this command, it must not have aImageViewType
ofIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
, orIMAGE_VIEW_TYPE_CUBE_ARRAY
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must have aImageViewType
and format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubic
returned bygetPhysicalDeviceImageFormatProperties2
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
with a reduction mode of eitherSAMPLER_REDUCTION_MODE_MIN
orSAMPLER_REDUCTION_MODE_MAX
as a result of this command must have aImageViewType
and format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubicMinmax
returned bygetPhysicalDeviceImageFormatProperties2
- If the
cubicRangeClamp
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must not have aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
- Any
ImageView
being sampled with aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
as a result of this command must sample withFILTER_CUBIC_EXT
- If the
selectableCubicWeights
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must haveSamplerCubicWeightsCreateInfoQCOM
::cubicWeights
equal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
- Any
Image
created with aImageCreateInfo
::flags
containingIMAGE_CREATE_CORNER_SAMPLED_BIT_NV
sampled as a result of this command must only be sampled using aSamplerAddressMode
ofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
- For any
ImageView
being written as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- For any
ImageView
being read as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
- For any
BufferView
being written as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- Any
BufferView
being read as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
then 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
PipelineLayout
that is compatible for set n, with thePipelineLayout
orDescriptorSetLayout
array that was used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, as described in ??? - Descriptors in each bound descriptor
set, specified via
cmdBindDescriptorSets
, must be valid if they are statically used by thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If the descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdBindDescriptorSets
, the boundPipeline
must 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 thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- Descriptors in bound descriptor
buffers, specified via
cmdSetDescriptorBufferOffsetsEXT
, must be valid if they are dynamically used by anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used by the
Pipeline
bound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT
, the boundPipeline
must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If a descriptor is dynamically used
with a
Pipeline
created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, the descriptor memory must be resident - If a descriptor is dynamically used
with a
ShaderEXT
created with aDescriptorSetLayout
that 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_HANDLE
shader 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
Pipeline
object bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used to sample from anyImage
with aImageView
of the typeIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
,IMAGE_VIEW_TYPE_1D_ARRAY
,IMAGE_VIEW_TYPE_2D_ARRAY
orIMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
foruniformBuffers
, 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
ShaderEXT
bound 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
forstorageBuffers
, 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
ShaderEXT
bound 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
commandBuffer
is 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
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*
orOpImageSparseSample*
instructions - If
a bound shader
accesses a
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must not use theConstOffset
andOffset
operands - If a
ImageView
is accessed as a result of this command, then the image view’sviewType
must match theDim
operand of theOpTypeImage
as described in ??? - If a
ImageView
is accessed as a result of this command, then the numeric type of the image view’sformat
and theSampled
Type
operand of theOpTypeImage
must match - If a
ImageView
created with a format other thanFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the image view’s format - If a
ImageView
created with the formatFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have four components - If a
BufferView
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the buffer view’s format - If a
ImageView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
ImageView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If a
BufferView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
BufferView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If the
sparseImageInt64Atomics
feature is not enabled,
Image
objects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If the
sparseImageInt64Atomics
feature is not enabled,
Buffer
objects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If
OpImageWeightedSampleQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
- If
OpImageWeightedSampleQCOM
uses aImageView
as 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
OpImageBoxFilterQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
- If
OpImageBlockMatchSSDQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
or 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format must be a single-component format. - If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
read 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
commandBuffer
is a protected command buffer and protectedNoFault is not supported, any resource written to by thePipeline
object bound to the pipeline bind point used by this command must not be an unprotected resource - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported, pipeline stages other than the framebuffer-space and compute stages in thePipeline
object bound to the pipeline bind point used by this command must not write to any resource - If any of the shader stages
of the
Pipeline
bound to the pipeline bind point used by this command uses the RayQueryKHR capability, thencommandBuffer
must not be a protected command buffer -
groupCountX
must be less than or equal toPhysicalDeviceLimits
::maxComputeWorkGroupCount
[0] -
groupCountY
must be less than or equal toPhysicalDeviceLimits
::maxComputeWorkGroupCount
[1] -
groupCountZ
must be less than or equal toPhysicalDeviceLimits
::maxComputeWorkGroupCount
[2]
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
Sampler
created withmagFilter
orminFilter
equal toFILTER_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Sampler
created withmipmapMode
equal toSAMPLER_MIPMAP_MODE_LINEAR
andcompareEnable
equal toFALSE
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
ImageView
is sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
- If a
ImageView
is 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_BUFFER
descriptor 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
ImageView
is sampled withFILTER_CUBIC_EXT
as 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
ImageView
is sampled withFILTER_CUBIC_EXT
as a result of this command, it must not have aImageViewType
ofIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
, orIMAGE_VIEW_TYPE_CUBE_ARRAY
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must have aImageViewType
and format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubic
returned bygetPhysicalDeviceImageFormatProperties2
- Any
ImageView
being sampled withFILTER_CUBIC_EXT
with a reduction mode of eitherSAMPLER_REDUCTION_MODE_MIN
orSAMPLER_REDUCTION_MODE_MAX
as a result of this command must have aImageViewType
and format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT
::filterCubicMinmax
returned bygetPhysicalDeviceImageFormatProperties2
- If the
cubicRangeClamp
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must not have aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
- Any
ImageView
being sampled with aSamplerReductionModeCreateInfo
::reductionMode
equal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
as a result of this command must sample withFILTER_CUBIC_EXT
- If the
selectableCubicWeights
feature is not enabled, then any
ImageView
being sampled withFILTER_CUBIC_EXT
as a result of this command must haveSamplerCubicWeightsCreateInfoQCOM
::cubicWeights
equal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
- Any
Image
created with aImageCreateInfo
::flags
containingIMAGE_CREATE_CORNER_SAMPLED_BIT_NV
sampled as a result of this command must only be sampled using aSamplerAddressMode
ofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
- For any
ImageView
being written as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- For any
ImageView
being read as a storage image where the image format field of theOpTypeImage
isUnknown
, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
- For any
BufferView
being written as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
- Any
BufferView
being read as a storage texel buffer where the image format field of theOpTypeImage
isUnknown
then 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
PipelineLayout
that is compatible for set n, with thePipelineLayout
orDescriptorSetLayout
array that was used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, 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
PipelineLayout
that is compatible for push constants, with thePipelineLayout
orDescriptorSetLayout
andPushConstantRange
arrays used to create the currentPipeline
orShaderEXT
, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets
, must be valid if they are statically used by thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If the descriptors used by
the
Pipeline
bound to the pipeline bind point were specified viacmdBindDescriptorSets
, the boundPipeline
must 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 thePipeline
bound to the pipeline bind point used by this command and the boundPipeline
was created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT
, must be valid if they are dynamically used by anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used by
the
Pipeline
bound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT
, the boundPipeline
must have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
- If a descriptor is
dynamically used with a
Pipeline
created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
, the descriptor memory must be resident - If a descriptor is
dynamically used with a
ShaderEXT
created with aDescriptorSetLayout
that 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_HANDLE
shader 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
Pipeline
object bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used to sample from anyImage
with aImageView
of the typeIMAGE_VIEW_TYPE_3D
,IMAGE_VIEW_TYPE_CUBE
,IMAGE_VIEW_TYPE_1D_ARRAY
,IMAGE_VIEW_TYPE_2D_ARRAY
orIMAGE_VIEW_TYPE_CUBE_ARRAY
, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*
orOpImageSparseSample*
instructions withImplicitLod
,Dref
orProj
in their name, in any shader stage - If the
Pipeline
object bound to the pipeline bind point used by this command or anyShaderEXT
bound to a stage corresponding to the pipeline bind point used by this command accesses aSampler
object 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
foruniformBuffers
, 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
ShaderEXT
bound 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
Pipeline
object 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_EXT
orPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
forstorageBuffers
, 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
ShaderEXT
bound 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
commandBuffer
is 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
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must only be used withOpImageSample*
orOpImageSparseSample*
instructions - If
a bound shader
accesses a
Sampler
orImageView
object that enables sampler Y′CBCR conversion, that object must not use theConstOffset
andOffset
operands - If a
ImageView
is accessed as a result of this command, then the image view’sviewType
must match theDim
operand of theOpTypeImage
as described in ??? - If a
ImageView
is accessed as a result of this command, then the numeric type of the image view’sformat
and theSampled
Type
operand of theOpTypeImage
must match - If a
ImageView
created with a format other thanFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the image view’s format - If a
ImageView
created with the formatFORMAT_A8_UNORM_KHR
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have four components - If a
BufferView
is accessed usingOpImageWrite
as a result of this command, then theType
of theTexel
operand of that instruction must have at least as many components as the buffer view’s format - If a
ImageView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
ImageView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If a
BufferView
with aFormat
that has a 64-bit component width is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 64 - If a
BufferView
with aFormat
that has a component width less than 64-bit is accessed as a result of this command, theSampledType
of theOpTypeImage
operand of that instruction must have aWidth
of 32 - If the
sparseImageInt64Atomics
feature is not enabled,
Image
objects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If the
sparseImageInt64Atomics
feature is not enabled,
Buffer
objects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BIT
flag must not be accessed by atomic instructions through anOpTypeImage
with aSampledType
with aWidth
of 64 by this command - If
OpImageWeightedSampleQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
- If
OpImageWeightedSampleQCOM
uses aImageView
as 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
OpImageBoxFilterQCOM
is used to sample aImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
- If
OpImageBlockMatchSSDQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If
OpImageBlockMatchSADQCOM
or 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as 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
, orOpImageBlockMatchSADQCOM
uses aSampler
as a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
- If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
instruction is used to read from anImageView
as a result of this command, then the image view’s format must be a single-component format. - If a
OpImageBlockMatchWindow*QCOM
orOpImageBlockMatchGather*QCOM
read 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
buffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
buffer
must have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BIT
bit set -
offset
must be a multiple of4
-
commandBuffer
must not be a protected command buffer - The sum of
offset
and the size ofDispatchIndirectCommand
must be less than or equal to the size ofbuffer
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
buffer
must be a validBuffer
handle -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
, andcommandBuffer
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,srcBuffer
must not be a protected buffer
- If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,dstBuffer
must not be a protected buffer - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported,dstBuffer
must not be an unprotected buffer - The
srcOffset
member of each element ofpRegions
must be less than the size ofsrcBuffer
- The
dstOffset
member of each element ofpRegions
must be less than the size ofdstBuffer
- The
size
member of each element ofpRegions
must be less than or equal to the size ofsrcBuffer
minussrcOffset
- The
size
member of each element ofpRegions
must be less than or equal to the size ofdstBuffer
minusdstOffset
- The union of the source
regions, and the union of the destination regions, specified by the
elements of
pRegions
, must not overlap in memory -
srcBuffer
must have been created withBUFFER_USAGE_TRANSFER_SRC_BIT
usage flag - If
srcBuffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
dstBuffer
must have been created withBUFFER_USAGE_TRANSFER_DST_BIT
usage flag - If
dstBuffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
srcBuffer
must be a validBuffer
handle -
dstBuffer
must be a validBuffer
handle -
pRegions
must be a valid pointer to an array ofregionCount
validBufferCopy
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
regionCount
must be greater than0
- Each of
commandBuffer
,dstBuffer
, andsrcBuffer
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,srcImage
must not be a protected image
- If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,dstImage
must not be a protected image - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported,dstImage
must 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
srcImage
must containFORMAT_FEATURE_TRANSFER_SRC_BIT
-
srcImageLayout
must specify the layout of the image subresources ofsrcImage
specified inpRegions
at the time this command is executed on aDevice
-
srcImageLayout
must beIMAGE_LAYOUT_SHARED_PRESENT_KHR
,IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
, orIMAGE_LAYOUT_GENERAL
- The
format features
of
dstImage
must containFORMAT_FEATURE_TRANSFER_DST_BIT
-
dstImageLayout
must specify the layout of the image subresources ofdstImage
specified inpRegions
at the time this command is executed on aDevice
-
dstImageLayout
must beIMAGE_LAYOUT_SHARED_PRESENT_KHR
,IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
, orIMAGE_LAYOUT_GENERAL
- If the
Format
of each ofsrcImage
anddstImage
is not a multi-planar format, theFormat
of each ofsrcImage
anddstImage
must be size-compatible - In a copy to or from a plane of a
multi-planar image,
the
Format
of the image and plane must be compatible according to the description of compatible planes for the plane being copied - If the
Format
of each ofsrcImage
anddstImage
is a compressed image format, the formats must have the same texel block extent - The sample count of
srcImage
anddstImage
must match - The
srcOffset
andextent
members of each element ofpRegions
must respect the image transfer granularity requirements ofcommandBuffer
’s command pool’s queue family, as described inQueueFamilyProperties
- The
dstOffset
andextent
members of each element ofpRegions
must respect the image transfer granularity requirements ofcommandBuffer
’s command pool’s queue family, as described inQueueFamilyProperties
- If neither
srcImage
nordstImage
has a multi-planar image format then for each element ofpRegions
,srcSubresource.aspectMask
anddstSubresource.aspectMask
must match - If
srcImage
has a multi-planar image format, then for each element ofpRegions
,srcSubresource.aspectMask
must be a single valid multi-planar aspect mask bit - If
dstImage
has a multi-planar image format, then for each element ofpRegions
,dstSubresource.aspectMask
must be a single valid multi-planar aspect mask bit - If
srcImage
has a multi-planar image format and thedstImage
does not have a multi-planar image format, then for each element ofpRegions
,dstSubresource.aspectMask
must beIMAGE_ASPECT_COLOR_BIT
- If
dstImage
has a multi-planar image format and thesrcImage
does not have a multi-planar image format, then for each element ofpRegions
,srcSubresource.aspectMask
must beIMAGE_ASPECT_COLOR_BIT
- If the
VK_KHR_maintenance1
extension is not enabled, or
PhysicalDeviceProperties
::apiVersion
is less than Vulkan 1.1, and eithersrcImage
ordstImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,srcSubresource.baseArrayLayer
anddstSubresource.baseArrayLayer
must both be0
, andsrcSubresource.layerCount
anddstSubresource.layerCount
must both be1
- If
srcImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,srcSubresource.baseArrayLayer
must be0
andsrcSubresource.layerCount
must be1
- If
dstImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,dstSubresource.baseArrayLayer
must be0
anddstSubresource.layerCount
must be1
- For each element of
pRegions
,srcSubresource.aspectMask
must specify aspects present insrcImage
- For each element of
pRegions
,dstSubresource.aspectMask
must specify aspects present indstImage
- For each element of
pRegions
,srcOffset.x
and (extent.width
+srcOffset.x
) must both be greater than or equal to0
and less than or equal to the width of the specifiedsrcSubresource
ofsrcImage
- For each element of
pRegions
,srcOffset.y
and (extent.height
+srcOffset.y
) must both be greater than or equal to0
and less than or equal to the height of the specifiedsrcSubresource
ofsrcImage
- If
srcImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,srcOffset.y
must be0
andextent.height
must be1
- If
srcImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,srcOffset.z
and (extent.depth
+srcOffset.z
) must both be greater than or equal to0
and less than or equal to the depth of the specifiedsrcSubresource
ofsrcImage
- If
srcImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,srcOffset.z
must be0
andextent.depth
must be1
- If
dstImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,dstOffset.z
must be0
andextent.depth
must be1
- If
srcImage
is of typeIMAGE_TYPE_2D
, then for each element ofpRegions
,srcOffset.z
must be0
- If
dstImage
is of typeIMAGE_TYPE_2D
, then for each element ofpRegions
,dstOffset.z
must be0
- If the
VK_KHR_maintenance1
extension is not enabled, and
PhysicalDeviceProperties
::apiVersion
is less than Vulkan 1.1,srcImage
anddstImage
must have the sameImageType
- If the
VK_KHR_maintenance1
extension is not enabled, and
PhysicalDeviceProperties
::apiVersion
is less than Vulkan 1.1,srcImage
ordstImage
is of typeIMAGE_TYPE_2D
, then for each element ofpRegions
,extent.depth
must be1
- If
srcImage
anddstImage
have a differentImageType
, and maintenance5 is not enabled, one must beIMAGE_TYPE_3D
and the other must beIMAGE_TYPE_2D
- If
srcImage
anddstImage
have the sameImageType
, for each element ofpRegions
, if neither of thelayerCount
members ofsrcSubresource
ordstSubresource
areREMAINING_ARRAY_LAYERS
, thelayerCount
members ofsrcSubresource
ordstSubresource
must match - If the
maintenance5
feature is not enabled, the
layerCount
member ofsrcSubresource
ordstSubresource
must not beREMAINING_ARRAY_LAYERS
- If
srcImage
anddstImage
have the sameImageType
, and one of thelayerCount
members ofsrcSubresource
ordstSubresource
isREMAINING_ARRAY_LAYERS
, the other member must be eitherREMAINING_ARRAY_LAYERS
or equal to thearrayLayers
member of theImageCreateInfo
used to create the image minusbaseArrayLayer
- If
srcImage
anddstImage
are both of typeIMAGE_TYPE_2D
, then for each element ofpRegions
,extent.depth
must be1
- If
srcImage
is of typeIMAGE_TYPE_2D
, anddstImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,extent.depth
must equalsrcSubresource.layerCount
- If
dstImage
is of typeIMAGE_TYPE_2D
, andsrcImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,extent.depth
must equaldstSubresource.layerCount
- For each element of
pRegions
,dstOffset.x
and (extent.width
+dstOffset.x
) must both be greater than or equal to0
and less than or equal to the width of the specifieddstSubresource
ofdstImage
- For each element of
pRegions
,dstOffset.y
and (extent.height
+dstOffset.y
) must both be greater than or equal to0
and less than or equal to the height of the specifieddstSubresource
ofdstImage
- If
dstImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,dstOffset.y
must be0
andextent.height
must be1
- If
dstImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,dstOffset.z
and (extent.depth
+dstOffset.z
) must both be greater than or equal to0
and less than or equal to the depth of the specifieddstSubresource
ofdstImage
- For each element of
pRegions
,srcOffset.x
must be a multiple of the texel block extent width of theFormat
ofsrcImage
- For each element of
pRegions
,srcOffset.y
must be a multiple of the texel block extent height of theFormat
ofsrcImage
- For each element of
pRegions
,srcOffset.z
must be a multiple of the texel block extent depth of theFormat
ofsrcImage
- For each element of
pRegions
,dstOffset.x
must be a multiple of the texel block extent width of theFormat
ofdstImage
- For each element of
pRegions
,dstOffset.y
must be a multiple of the texel block extent height of theFormat
ofdstImage
- For each element of
pRegions
,dstOffset.z
must be a multiple of the texel block extent depth of theFormat
ofdstImage
- For each element of
pRegions
, if the sum ofsrcOffset.x
andextent.width
does not equal the width of the subresource specified bysrcSubresource
,extent.width
must be a multiple of the texel block extent width of theFormat
ofsrcImage
- For each element of
pRegions
, if the sum ofsrcOffset.y
andextent.height
does not equal the height of the subresource specified bysrcSubresource
,extent.height
must be a multiple of the texel block extent height of theFormat
ofsrcImage
- For each element of
pRegions
, if the sum ofsrcOffset.z
andextent.depth
does not equal the depth of the subresource specified bysrcSubresource
,extent.depth
must be a multiple of the texel block extent depth of theFormat
ofsrcImage
- For each element of
pRegions
, if the sum ofdstOffset.x
andextent.width
does not equal the width of the subresource specified bydstSubresource
,extent.width
must be a multiple of the texel block extent width of theFormat
ofdstImage
- For each element of
pRegions
, if the sum ofdstOffset.y
andextent.height
does not equal the height of the subresource specified bydstSubresource
,extent.height
must be a multiple of the texel block extent height of theFormat
ofdstImage
- For each element of
pRegions
, if the sum ofdstOffset.z
andextent.depth
does not equal the depth of the subresource specified bydstSubresource
,extent.depth
must be a multiple of the texel block extent depth of theFormat
ofdstImage
- If the
aspect
member of any element ofpRegions
includes any flag other thanIMAGE_ASPECT_STENCIL_BIT
orsrcImage
was not created with separate stencil usage,IMAGE_USAGE_TRANSFER_SRC_BIT
must have been included in theImageCreateInfo
::usage
used to createsrcImage
- If the
aspect
member of any element ofpRegions
includes any flag other thanIMAGE_ASPECT_STENCIL_BIT
ordstImage
was not created with separate stencil usage,IMAGE_USAGE_TRANSFER_DST_BIT
must have been included in theImageCreateInfo
::usage
used to createdstImage
- If the
aspect
member of any element ofpRegions
includesIMAGE_ASPECT_STENCIL_BIT
, andsrcImage
was created with separate stencil usage,IMAGE_USAGE_TRANSFER_SRC_BIT
must have been included in theImageStencilUsageCreateInfo
::stencilUsage
used to createsrcImage
- If the
aspect
member of any element ofpRegions
includesIMAGE_ASPECT_STENCIL_BIT
, anddstImage
was created with separate stencil usage,IMAGE_USAGE_TRANSFER_DST_BIT
must have been included in theImageStencilUsageCreateInfo
::stencilUsage
used to createdstImage
- If
srcImage
is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a singleDeviceMemory
object - The
srcSubresource.mipLevel
member of each element ofpRegions
must be less than themipLevels
specified inImageCreateInfo
whensrcImage
was created - If
srcSubresource.layerCount
is notREMAINING_ARRAY_LAYERS
,srcSubresource.baseArrayLayer
+srcSubresource.layerCount
of each element ofpRegions
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whensrcImage
was created -
srcImage
must not have been created withflags
containingIMAGE_CREATE_SUBSAMPLED_BIT_EXT
- If
dstImage
is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a singleDeviceMemory
object - The
dstSubresource.mipLevel
member of each element ofpRegions
must be less than themipLevels
specified inImageCreateInfo
whendstImage
was created - If
dstSubresource.layerCount
is notREMAINING_ARRAY_LAYERS
,dstSubresource.baseArrayLayer
+dstSubresource.layerCount
of each element ofpRegions
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whendstImage
was created -
dstImage
must not have been created withflags
containingIMAGE_CREATE_SUBSAMPLED_BIT_EXT
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
srcImage
must be a validImage
handle -
srcImageLayout
must be a validImageLayout
value -
dstImage
must be a validImage
handle -
dstImageLayout
must be a validImageLayout
value -
pRegions
must be a valid pointer to an array ofregionCount
validImageCopy
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
regionCount
must be greater than0
- Each of
commandBuffer
,dstImage
, andsrcImage
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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 -
baseArrayCount
dst
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 +
baseArrayCount
src
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
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,srcImage
must not be a protected image
- If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,dstImage
must not be a protected image - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported,dstImage
must not be an unprotected image - The source region specified by
each element of
pRegions
must be a region that is contained withinsrcImage
- The destination region
specified by each element of
pRegions
must 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
srcImage
must containFORMAT_FEATURE_BLIT_SRC_BIT
-
srcImage
must not use a format that requires a sampler Y′CBCR conversion -
srcImage
must have been created withIMAGE_USAGE_TRANSFER_SRC_BIT
usage flag - If
srcImage
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
srcImageLayout
must specify the layout of the image subresources ofsrcImage
specified inpRegions
at the time this command is executed on aDevice
-
srcImageLayout
must beIMAGE_LAYOUT_SHARED_PRESENT_KHR
,IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
orIMAGE_LAYOUT_GENERAL
- The
format features
of
dstImage
must containFORMAT_FEATURE_BLIT_DST_BIT
-
dstImage
must not use a format that requires a sampler Y′CBCR conversion -
dstImage
must have been created withIMAGE_USAGE_TRANSFER_DST_BIT
usage flag - If
dstImage
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
dstImageLayout
must specify the layout of the image subresources ofdstImage
specified inpRegions
at the time this command is executed on aDevice
-
dstImageLayout
must beIMAGE_LAYOUT_SHARED_PRESENT_KHR
,IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
orIMAGE_LAYOUT_GENERAL
- If either of
srcImage
ordstImage
was created with a signed integerFormat
, the other must also have been created with a signed integerFormat
- If either of
srcImage
ordstImage
was created with an unsigned integerFormat
, the other must also have been created with an unsigned integerFormat
- If either of
srcImage
ordstImage
was created with a depth/stencil format, the other must have exactly the same format - If
srcImage
was created with a depth/stencil format,filter
must beFILTER_NEAREST
-
srcImage
must have been created with asamples
value ofSAMPLE_COUNT_1_BIT
-
dstImage
must have been created with asamples
value ofSAMPLE_COUNT_1_BIT
- If
filter
isFILTER_LINEAR
, then the format features ofsrcImage
must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If
filter
isFILTER_CUBIC_EXT
, then the format features ofsrcImage
must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
- If
filter
isFILTER_CUBIC_EXT
,srcImage
must be of typeIMAGE_TYPE_2D
- The
srcSubresource.mipLevel
member of each element ofpRegions
must be less than themipLevels
specified inImageCreateInfo
whensrcImage
was created - The
dstSubresource.mipLevel
member of each element ofpRegions
must be less than themipLevels
specified inImageCreateInfo
whendstImage
was created - If
srcSubresource.layerCount
is notREMAINING_ARRAY_LAYERS
,srcSubresource.baseArrayLayer
+srcSubresource.layerCount
of each element ofpRegions
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whensrcImage
was created - If
srcSubresource.layerCount
is notREMAINING_ARRAY_LAYERS
,dstSubresource.baseArrayLayer
+dstSubresource.layerCount
of each element ofpRegions
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whendstImage
was created -
dstImage
andsrcImage
must not have been created withflags
containingIMAGE_CREATE_SUBSAMPLED_BIT_EXT
- If either
srcImage
ordstImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,srcSubresource.baseArrayLayer
anddstSubresource.baseArrayLayer
must each be0
, andsrcSubresource.layerCount
anddstSubresource.layerCount
must each be1
- For each element of
pRegions
,srcSubresource.aspectMask
must specify aspects present insrcImage
- For each element of
pRegions
,dstSubresource.aspectMask
must specify aspects present indstImage
- For each element of
pRegions
,srcOffsets
[0].x andsrcOffsets
[1].x must both be greater than or equal to0
and less than or equal to the width of the specifiedsrcSubresource
ofsrcImage
- For each element of
pRegions
,srcOffsets
[0].y andsrcOffsets
[1].y must both be greater than or equal to0
and less than or equal to the height of the specifiedsrcSubresource
ofsrcImage
- If
srcImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,srcOffsets
[0].y must be0
andsrcOffsets
[1].y must be1
- For each element of
pRegions
,srcOffsets
[0].z andsrcOffsets
[1].z must both be greater than or equal to0
and less than or equal to the depth of the specifiedsrcSubresource
ofsrcImage
- If
srcImage
is of typeIMAGE_TYPE_1D
orIMAGE_TYPE_2D
, then for each element ofpRegions
,srcOffsets
[0].z must be0
andsrcOffsets
[1].z must be1
- For each element of
pRegions
,dstOffsets
[0].x anddstOffsets
[1].x must both be greater than or equal to0
and less than or equal to the width of the specifieddstSubresource
ofdstImage
- For each element of
pRegions
,dstOffsets
[0].y anddstOffsets
[1].y must both be greater than or equal to0
and less than or equal to the height of the specifieddstSubresource
ofdstImage
- If
dstImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,dstOffsets
[0].y must be0
anddstOffsets
[1].y must be1
- For each element of
pRegions
,dstOffsets
[0].z anddstOffsets
[1].z must both be greater than or equal to0
and less than or equal to the depth of the specifieddstSubresource
ofdstImage
- If
dstImage
is of typeIMAGE_TYPE_1D
orIMAGE_TYPE_2D
, then for each element ofpRegions
,dstOffsets
[0].z must be0
anddstOffsets
[1].z must be1
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
srcImage
must be a validImage
handle -
srcImageLayout
must be a validImageLayout
value -
dstImage
must be a validImage
handle -
dstImageLayout
must be a validImageLayout
value -
pRegions
must be a valid pointer to an array ofregionCount
validImageBlit
structures -
filter
must be a validFilter
value -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
regionCount
must be greater than0
- Each of
commandBuffer
,dstImage
, andsrcImage
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
dstImage
is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a singleDeviceMemory
object
- The
imageSubresource.mipLevel
member of each element ofpRegions
must be less than themipLevels
specified inImageCreateInfo
whendstImage
was created - If
imageSubresource.layerCount
is notREMAINING_ARRAY_LAYERS
,imageSubresource.baseArrayLayer
+imageSubresource.layerCount
of each element ofpRegions
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whendstImage
was created -
dstImage
must not have been created withflags
containingIMAGE_CREATE_SUBSAMPLED_BIT_EXT
- The image
region specified by each element of
pRegions
must be contained within the specifiedimageSubresource
ofdstImage
- For each
element of
pRegions
,imageOffset.x
and (imageExtent.width
+imageOffset.x
) must both be greater than or equal to0
and less than or equal to the width of the specifiedimageSubresource
ofdstImage
- For each
element of
pRegions
,imageOffset.y
and (imageExtent.height
+imageOffset.y
) must both be greater than or equal to0
and less than or equal to the height of the specifiedimageSubresource
ofdstImage
-
dstImage
must have a sample count equal toSAMPLE_COUNT_1_BIT
- If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,srcBuffer
must not be a protected buffer - If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,dstImage
must not be a protected image - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported,dstImage
must not be an unprotected image - If the queue
family used to create the
CommandPool
whichcommandBuffer
was allocated from does not supportQUEUE_GRAPHICS_BIT
orQUEUE_COMPUTE_BIT
, thebufferOffset
member of any element ofpRegions
must be a multiple of4
- The
imageOffset
andimageExtent
members of each element ofpRegions
must respect the image transfer granularity requirements ofcommandBuffer
’s command pool’s queue family, as described inQueueFamilyProperties
- If the queue
family used to create the
CommandPool
whichcommandBuffer
was allocated from does not supportQUEUE_GRAPHICS_BIT
, for each element ofpRegions
, theaspectMask
member ofimageSubresource
must not beIMAGE_ASPECT_DEPTH_BIT
orIMAGE_ASPECT_STENCIL_BIT
-
srcBuffer
must 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 -
srcBuffer
must have been created withBUFFER_USAGE_TRANSFER_SRC_BIT
usage flag - The
format features
of
dstImage
must containFORMAT_FEATURE_TRANSFER_DST_BIT
- If
srcBuffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
dstImage
must have been created withIMAGE_USAGE_TRANSFER_DST_BIT
usage flag -
dstImageLayout
must specify the layout of the image subresources ofdstImage
specified inpRegions
at the time this command is executed on aDevice
-
dstImageLayout
must 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
pRegions
whoseimageSubresource
contains a depth aspect, the data insrcBuffer
must be in the range [0,1] - If
dstImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,imageOffset.y
must be0
andimageExtent.height
must be1
- For each element of
pRegions
,imageOffset.z
and (imageExtent.depth
+imageOffset.z
) must both be greater than or equal to0
and less than or equal to the depth of the specifiedimageSubresource
ofdstImage
- If
dstImage
is of typeIMAGE_TYPE_1D
orIMAGE_TYPE_2D
, then for each element ofpRegions
,imageOffset.z
must be0
andimageExtent.depth
must be1
- For each element of
pRegions
,imageOffset.x
must be a multiple of the texel block extent width of theFormat
ofdstImage
- For each element of
pRegions
,imageOffset.y
must be a multiple of the texel block extent height of theFormat
ofdstImage
- For each element of
pRegions
,imageOffset.z
must be a multiple of the texel block extent depth of theFormat
ofdstImage
- For each element of
pRegions
, if the sum ofimageOffset.x
andextent.width
does not equal the width of the subresource specified bysrcSubresource
,extent.width
must be a multiple of the texel block extent width of theFormat
ofdstImage
- For each element of
pRegions
, if the sum ofimageOffset.y
andextent.height
does not equal the height of the subresource specified bysrcSubresource
,extent.height
must be a multiple of the texel block extent height of theFormat
ofdstImage
- For each element of
pRegions
, if the sum ofimageOffset.z
andextent.depth
does not equal the depth of the subresource specified bysrcSubresource
,extent.depth
must be a multiple of the texel block extent depth of theFormat
ofdstImage
- For each
element of
pRegions
,imageSubresource.aspectMask
must specify aspects present indstImage
- If
dstImage
has a multi-planar image format, then for each element ofpRegions
,imageSubresource.aspectMask
must be a single valid multi-planar aspect mask bit - If
dstImage
is of typeIMAGE_TYPE_3D
, for each element ofpRegions
,imageSubresource.baseArrayLayer
must be0
andimageSubresource.layerCount
must be1
- For each element
of
pRegions
,bufferRowLength
must be a multiple of the texel block extent width of theFormat
ofdstImage
- For each
element of
pRegions
,bufferImageHeight
must be a multiple of the texel block extent height of theFormat
ofdstImage
- For each element
of
pRegions
,bufferRowLength
divided by the texel block extent width and then multiplied by the texel block size ofdstImage
must be less than or equal to 231-1 - If
dstImage
does not have either a depth/stencil format or a multi-planar format, then for each element ofpRegions
,bufferOffset
must be a multiple of the texel block size - If
dstImage
has a multi-planar format, then for each element ofpRegions
,bufferOffset
must be a multiple of the element size of the compatible format for the format and theaspectMask
of theimageSubresource
as defined in ??? - If
dstImage
has a depth/stencil format, thebufferOffset
member of any element ofpRegions
must be a multiple of4
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
srcBuffer
must be a validBuffer
handle -
dstImage
must be a validImage
handle -
dstImageLayout
must be a validImageLayout
value -
pRegions
must be a valid pointer to an array ofregionCount
validBufferImageCopy
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
regionCount
must be greater than0
- Each of
commandBuffer
,dstImage
, andsrcBuffer
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
srcImage
is non-sparse then the image or the specified disjoint plane must be bound completely and contiguously to a singleDeviceMemory
object
- The
imageSubresource.mipLevel
member of each element ofpRegions
must be less than themipLevels
specified inImageCreateInfo
whensrcImage
was created - If
imageSubresource.layerCount
is notREMAINING_ARRAY_LAYERS
,imageSubresource.baseArrayLayer
+imageSubresource.layerCount
of each element ofpRegions
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whensrcImage
was created -
srcImage
must not have been created withflags
containingIMAGE_CREATE_SUBSAMPLED_BIT_EXT
- The image
region specified by each element of
pRegions
must be contained within the specifiedimageSubresource
ofsrcImage
- For each
element of
pRegions
,imageOffset.x
and (imageExtent.width
+imageOffset.x
) must both be greater than or equal to0
and less than or equal to the width of the specifiedimageSubresource
ofsrcImage
- For each
element of
pRegions
,imageOffset.y
and (imageExtent.height
+imageOffset.y
) must both be greater than or equal to0
and less than or equal to the height of the specifiedimageSubresource
ofsrcImage
-
srcImage
must have a sample count equal toSAMPLE_COUNT_1_BIT
- If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,srcImage
must not be a protected image - If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,dstBuffer
must not be a protected buffer - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported,dstBuffer
must not be an unprotected buffer - If the queue
family used to create the
CommandPool
whichcommandBuffer
was allocated from does not supportQUEUE_GRAPHICS_BIT
orQUEUE_COMPUTE_BIT
, thebufferOffset
member of any element ofpRegions
must be a multiple of4
- The
imageOffset
andimageExtent
members of each element ofpRegions
must respect the image transfer granularity requirements ofcommandBuffer
’s command pool’s queue family, as described inQueueFamilyProperties
-
dstBuffer
must 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 -
srcImage
must have been created withIMAGE_USAGE_TRANSFER_SRC_BIT
usage flag - The
format features
of
srcImage
must containFORMAT_FEATURE_TRANSFER_SRC_BIT
-
dstBuffer
must have been created withBUFFER_USAGE_TRANSFER_DST_BIT
usage flag - If
dstBuffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
srcImageLayout
must specify the layout of the image subresources ofsrcImage
specified inpRegions
at the time this command is executed on aDevice
-
srcImageLayout
must beIMAGE_LAYOUT_SHARED_PRESENT_KHR
,IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
, orIMAGE_LAYOUT_GENERAL
- If
srcImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,imageOffset.y
must be0
andimageExtent.height
must be1
- For each element of
pRegions
,imageOffset.z
and (imageExtent.depth
+imageOffset.z
) must both be greater than or equal to0
and less than or equal to the depth of the specifiedimageSubresource
ofsrcImage
- If
srcImage
is of typeIMAGE_TYPE_1D
orIMAGE_TYPE_2D
, then for each element ofpRegions
,imageOffset.z
must be0
andimageExtent.depth
must be1
- For each element of
pRegions
,imageOffset.x
must be a multiple of the texel block extent width of theFormat
ofsrcImage
- For each element of
pRegions
,imageOffset.y
must be a multiple of the texel block extent height of theFormat
ofsrcImage
- For each element of
pRegions
,imageOffset.z
must be a multiple of the texel block extent depth of theFormat
ofsrcImage
- For each element of
pRegions
, if the sum ofimageOffset.x
andextent.width
does not equal the width of the subresource specified bysrcSubresource
,extent.width
must be a multiple of the texel block extent width of theFormat
ofsrcImage
- For each element of
pRegions
, if the sum ofimageOffset.y
andextent.height
does not equal the height of the subresource specified bysrcSubresource
,extent.height
must be a multiple of the texel block extent height of theFormat
ofsrcImage
- For each element of
pRegions
, if the sum ofimageOffset.z
andextent.depth
does not equal the depth of the subresource specified bysrcSubresource
,extent.depth
must be a multiple of the texel block extent depth of theFormat
ofsrcImage
- For each
element of
pRegions
,imageSubresource.aspectMask
must specify aspects present insrcImage
- If
srcImage
has a multi-planar image format, then for each element ofpRegions
,imageSubresource.aspectMask
must be a single valid multi-planar aspect mask bit - If
srcImage
is of typeIMAGE_TYPE_3D
, for each element ofpRegions
,imageSubresource.baseArrayLayer
must be0
andimageSubresource.layerCount
must be1
- For each element
of
pRegions
,bufferRowLength
must be a multiple of the texel block extent width of theFormat
ofsrcImage
- For each
element of
pRegions
,bufferImageHeight
must be a multiple of the texel block extent height of theFormat
ofsrcImage
- For each element
of
pRegions
,bufferRowLength
divided by the texel block extent width and then multiplied by the texel block size ofsrcImage
must be less than or equal to 231-1 - If
srcImage
does not have either a depth/stencil format or a multi-planar format, then for each element ofpRegions
,bufferOffset
must be a multiple of the texel block size - If
srcImage
has a multi-planar format, then for each element ofpRegions
,bufferOffset
must be a multiple of the element size of the compatible format for the format and theaspectMask
of theimageSubresource
as defined in ??? - If
srcImage
has a depth/stencil format, thebufferOffset
member of any element ofpRegions
must be a multiple of4
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
srcImage
must be a validImage
handle -
srcImageLayout
must be a validImageLayout
value -
dstBuffer
must be a validBuffer
handle -
pRegions
must be a valid pointer to an array ofregionCount
validBufferImageCopy
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
regionCount
must be greater than0
- Each of
commandBuffer
,dstBuffer
, andsrcImage
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
-
dataSize
must be less than or equal to the size ofdstBuffer
minusdstOffset
-
dstBuffer
must have been created withBUFFER_USAGE_TRANSFER_DST_BIT
usage flag - If
dstBuffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
dstOffset
must be a multiple of4
-
dataSize
must be less than or equal to65536
-
dataSize
must be a multiple of4
- If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,dstBuffer
must not be a protected buffer - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported,dstBuffer
must not be an unprotected buffer
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
dstBuffer
must be a validBuffer
handle -
pData
must be a valid pointer to an array ofdataSize
bytes -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
dataSize
must be greater than0
- Both of
commandBuffer
, anddstBuffer
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
-
dstOffset
must be a multiple of4
- If
size
is not equal toWHOLE_SIZE
,size
must be greater than0
- If
size
is not equal toWHOLE_SIZE
,size
must be less than or equal to the size ofdstBuffer
minusdstOffset
- If
size
is not equal toWHOLE_SIZE
,size
must be a multiple of4
-
dstBuffer
must have been created withBUFFER_USAGE_TRANSFER_DST_BIT
usage flag - If the
VK_KHR_maintenance1
extension is not enabled and
PhysicalDeviceProperties
::apiVersion
is less than Vulkan 1.1, theCommandPool
thatcommandBuffer
was allocated from must support graphics or compute operations - If
dstBuffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object - If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,dstBuffer
must not be a protected buffer - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported,dstBuffer
must not be an unprotected buffer
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
dstBuffer
must be a validBuffer
handle -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
, anddstBuffer
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
image
must containFORMAT_FEATURE_TRANSFER_DST_BIT
-
image
must have been created withIMAGE_USAGE_TRANSFER_DST_BIT
usage flag -
image
must not use any of the formats that require a sampler Y′CBCR conversion - If
image
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
imageLayout
must specify the layout of the image subresource ranges ofimage
specified inpRanges
at the time this command is executed on aDevice
-
imageLayout
must beIMAGE_LAYOUT_SHARED_PRESENT_KHR
,IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
orIMAGE_LAYOUT_GENERAL
- The
ImageSubresourceRange
::aspectMask
members of the elements of thepRanges
array must each only includeIMAGE_ASPECT_COLOR_BIT
- The
ImageSubresourceRange
::baseMipLevel
members of the elements of thepRanges
array must each be less than themipLevels
specified inImageCreateInfo
whenimage
was created - For each
ImageSubresourceRange
element ofpRanges
, if thelevelCount
member is notREMAINING_MIP_LEVELS
, thenbaseMipLevel
+levelCount
must be less than or equal to themipLevels
specified inImageCreateInfo
whenimage
was created - The
ImageSubresourceRange
::baseArrayLayer
members of the elements of thepRanges
array must each be less than thearrayLayers
specified inImageCreateInfo
whenimage
was created - For each
ImageSubresourceRange
element ofpRanges
, if thelayerCount
member is notREMAINING_ARRAY_LAYERS
, thenbaseArrayLayer
+layerCount
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whenimage
was created -
image
must not have a compressed or depth/stencil format -
pColor
must be a valid pointer to aClearColorValue
union - If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,image
must not be a protected image - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported, must not be an unprotected image
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
image
must be a validImage
handle -
imageLayout
must be a validImageLayout
value -
pRanges
must be a valid pointer to an array ofrangeCount
validImageSubresourceRange
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
rangeCount
must be greater than0
- Both of
commandBuffer
, andimage
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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
image
must containFORMAT_FEATURE_TRANSFER_DST_BIT
- If the
aspect
member of any element ofpRanges
includesIMAGE_ASPECT_STENCIL_BIT
, andimage
was created with separate stencil usage,IMAGE_USAGE_TRANSFER_DST_BIT
must have been included in theImageStencilUsageCreateInfo
::stencilUsage
used to createimage
- If the
aspect
member of any element ofpRanges
includesIMAGE_ASPECT_STENCIL_BIT
, andimage
was not created with separate stencil usage,IMAGE_USAGE_TRANSFER_DST_BIT
must have been included in theImageCreateInfo
::usage
used to createimage
- If the
aspect
member of any element ofpRanges
includesIMAGE_ASPECT_DEPTH_BIT
,IMAGE_USAGE_TRANSFER_DST_BIT
must have been included in theImageCreateInfo
::usage
used to createimage
- If
image
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
imageLayout
must specify the layout of the image subresource ranges ofimage
specified inpRanges
at the time this command is executed on aDevice
-
imageLayout
must be either ofIMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
orIMAGE_LAYOUT_GENERAL
- The
ImageSubresourceRange
::aspectMask
member of each element of thepRanges
array must not include bits other thanIMAGE_ASPECT_DEPTH_BIT
orIMAGE_ASPECT_STENCIL_BIT
- If the
image
’s format does not have a stencil component, then theImageSubresourceRange
::aspectMask
member of each element of thepRanges
array must not include theIMAGE_ASPECT_STENCIL_BIT
bit - If the
image
’s format does not have a depth component, then theImageSubresourceRange
::aspectMask
member of each element of thepRanges
array must not include theIMAGE_ASPECT_DEPTH_BIT
bit - The
ImageSubresourceRange
::baseMipLevel
members of the elements of thepRanges
array must each be less than themipLevels
specified inImageCreateInfo
whenimage
was created - For each
ImageSubresourceRange
element ofpRanges
, if thelevelCount
member is notREMAINING_MIP_LEVELS
, thenbaseMipLevel
+levelCount
must be less than or equal to themipLevels
specified inImageCreateInfo
whenimage
was created - The
ImageSubresourceRange
::baseArrayLayer
members of the elements of thepRanges
array must each be less than thearrayLayers
specified inImageCreateInfo
whenimage
was created - For each
ImageSubresourceRange
element ofpRanges
, if thelayerCount
member is notREMAINING_ARRAY_LAYERS
, thenbaseArrayLayer
+layerCount
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whenimage
was created -
image
must have a depth/stencil format - If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,image
must not be a protected image - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported,image
must not be an unprotected image
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
image
must be a validImage
handle -
imageLayout
must be a validImageLayout
value -
pDepthStencil
must be a valid pointer to a validClearDepthStencilValue
structure -
pRanges
must be a valid pointer to an array ofrangeCount
validImageSubresourceRange
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
rangeCount
must be greater than0
- Both of
commandBuffer
, andimage
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
aspectMask
member of any element ofpAttachments
containsIMAGE_ASPECT_DEPTH_BIT
, the current subpass instance’s depth-stencil attachment must be eitherATTACHMENT_UNUSED
or the attachmentformat
must contain a depth component
- If the current render
pass instance does not use dynamic rendering, and the
aspectMask
member of any element ofpAttachments
containsIMAGE_ASPECT_STENCIL_BIT
, the current subpass instance’s depth-stencil attachment must be eitherATTACHMENT_UNUSED
or the attachmentformat
must contain a stencil component - If the
aspectMask
member of any element ofpAttachments
containsIMAGE_ASPECT_COLOR_BIT
, thecolorAttachment
must be a valid color attachment index in the current render pass instance - The
rect
member of each element ofpRects
must have anextent.width
greater than0
- The
rect
member of each element ofpRects
must have anextent.height
greater than0
- The rectangular region
specified by each element of
pRects
must be contained within the render area of the current render pass instance - The layers specified by
each element of
pRects
must be contained within every attachment thatpAttachments
refers to, i.e. for each element ofpRects
,ClearRect
::baseArrayLayer
+ClearRect
::layerCount
must be less than or equal to the number of layers rendered to in the current render pass instance - The
layerCount
member of each element ofpRects
must not be0
- If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported, each attachment to be cleared must not be a protected image - If
commandBuffer
is 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
baseArrayLayer
must be zero andlayerCount
must be one - If the subpass this is
recorded in performs an external format resolve, the
aspectMask
member of any element ofpAttachments
must not includeVK_IMAGE_ASPECT_PLANE_i_BIT
for any index i
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pAttachments
must be a valid pointer to an array ofattachmentCount
validClearAttachment
structures -
pRects
must be a valid pointer to an array ofrectCount
ClearRect
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
attachmentCount
must be greater than0
-
rectCount
must be greater than0
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,srcImage
must not be a protected image
- If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported,dstImage
must not be a protected image - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported,dstImage
must 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
srcImage
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
srcImage
must have a sample count equal to any valid sample count value other thanSAMPLE_COUNT_1_BIT
- If
dstImage
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object -
dstImage
must have a sample count equal toSAMPLE_COUNT_1_BIT
-
srcImageLayout
must specify the layout of the image subresources ofsrcImage
specified inpRegions
at the time this command is executed on aDevice
-
srcImageLayout
must beIMAGE_LAYOUT_SHARED_PRESENT_KHR
,IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
orIMAGE_LAYOUT_GENERAL
-
dstImageLayout
must specify the layout of the image subresources ofdstImage
specified inpRegions
at the time this command is executed on aDevice
-
dstImageLayout
must beIMAGE_LAYOUT_SHARED_PRESENT_KHR
,IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
orIMAGE_LAYOUT_GENERAL
- The
format features
of
dstImage
must containFORMAT_FEATURE_COLOR_ATTACHMENT_BIT
- If the
linearColorAttachment
feature is enabled and the image is created with
IMAGE_TILING_LINEAR
, the format features ofdstImage
must containFORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV
-
srcImage
anddstImage
must have been created with the same image format - The
srcSubresource.mipLevel
member of each element ofpRegions
must be less than themipLevels
specified inImageCreateInfo
whensrcImage
was created - The
dstSubresource.mipLevel
member of each element ofpRegions
must be less than themipLevels
specified inImageCreateInfo
whendstImage
was created - If
srcSubresource.layerCount
is notREMAINING_ARRAY_LAYERS
,srcSubresource.baseArrayLayer
+srcSubresource.layerCount
of each element ofpRegions
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whensrcImage
was created - If
dstSubresource.layerCount
is notREMAINING_ARRAY_LAYERS
,dstSubresource.baseArrayLayer
+dstSubresource.layerCount
of each element ofpRegions
must be less than or equal to thearrayLayers
specified inImageCreateInfo
whendstImage
was created -
dstImage
andsrcImage
must not have been created withflags
containingIMAGE_CREATE_SUBSAMPLED_BIT_EXT
- If
dstImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,srcSubresource.layerCount
must be1
- If
dstImage
is of typeIMAGE_TYPE_3D
, then for each element ofpRegions
,dstSubresource.baseArrayLayer
must be0
anddstSubresource.layerCount
must be1
- For each element of
pRegions
,srcOffset.x
and (extent.width
+srcOffset.x
) must both be greater than or equal to0
and less than or equal to the width of the specifiedsrcSubresource
ofsrcImage
- For each element of
pRegions
,srcOffset.y
and (extent.height
+srcOffset.y
) must both be greater than or equal to0
and less than or equal to the height of the specifiedsrcSubresource
ofsrcImage
- If
srcImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,srcOffset.y
must be0
andextent.height
must be1
- For each element of
pRegions
,srcOffset.z
and (extent.depth
+srcOffset.z
) must both be greater than or equal to0
and less than or equal to the depth of the specifiedsrcSubresource
ofsrcImage
- If
srcImage
is of typeIMAGE_TYPE_1D
orIMAGE_TYPE_2D
, then for each element ofpRegions
,srcOffset.z
must be0
andextent.depth
must be1
- For each element of
pRegions
,dstOffset.x
and (extent.width
+dstOffset.x
) must both be greater than or equal to0
and less than or equal to the width of the specifieddstSubresource
ofdstImage
- For each element of
pRegions
,dstOffset.y
and (extent.height
+dstOffset.y
) must both be greater than or equal to0
and less than or equal to the height of the specifieddstSubresource
ofdstImage
- If
dstImage
is of typeIMAGE_TYPE_1D
, then for each element ofpRegions
,dstOffset.y
must be0
andextent.height
must be1
- For each element of
pRegions
,dstOffset.z
and (extent.depth
+dstOffset.z
) must both be greater than or equal to0
and less than or equal to the depth of the specifieddstSubresource
ofdstImage
- If
dstImage
is of typeIMAGE_TYPE_1D
orIMAGE_TYPE_2D
, then for each element ofpRegions
,dstOffset.z
must be0
andextent.depth
must be1
-
srcImage
must have been created withIMAGE_USAGE_TRANSFER_SRC_BIT
usage flag - The
format features
of
srcImage
must containFORMAT_FEATURE_TRANSFER_SRC_BIT
-
dstImage
must have been created withIMAGE_USAGE_TRANSFER_DST_BIT
usage flag - The
format features
of
dstImage
must containFORMAT_FEATURE_TRANSFER_DST_BIT
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
srcImage
must be a validImage
handle -
srcImageLayout
must be a validImageLayout
value -
dstImage
must be a validImage
handle -
dstImageLayout
must be a validImageLayout
value -
pRegions
must be a valid pointer to an array ofregionCount
validImageResolve
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
regionCount
must be greater than0
- Each of
commandBuffer
,dstImage
, andsrcImage
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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,
stageMask
must not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
orPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
- If the
conditionalRendering
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
- If the
fragmentDensityMap
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
- If the
transformFeedback
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
- If the
meshShader
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT
- If the
taskShader
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT
- If neither the
shadingRateImage
or
attachmentFragmentShadingRate
are enabled,
stageMask
must not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
- If the
synchronization2
feature is not enabled,
stageMask
must not be0
- If neither the
VK_NV_ray_tracing
extension or
rayTracingPipeline feature
are enabled,
stageMask
must not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- Any pipeline stage included in
stageMask
must be supported by the capabilities of the queue family specified by thequeueFamilyIndex
member of theCommandPoolCreateInfo
structure that was used to create theCommandPool
thatcommandBuffer
was allocated from, as specified in the table of supported pipeline stages -
stageMask
must not includePIPELINE_STAGE_HOST_BIT
- The current device mask of
commandBuffer
must include exactly one physical device
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
event
must be a validEvent
handle -
stageMask
must be a valid combination ofPipelineStageFlagBits
values -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
, andevent
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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,
stageMask
must not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
orPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
- If the
conditionalRendering
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
- If the
fragmentDensityMap
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
- If the
transformFeedback
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
- If the
meshShader
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT
- If the
taskShader
feature is not enabled,
stageMask
must not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT
- If neither the
shadingRateImage
or
attachmentFragmentShadingRate
are enabled,
stageMask
must not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
- If the
synchronization2
feature is not enabled,
stageMask
must not be0
- If neither the
VK_NV_ray_tracing
extension or
rayTracingPipeline feature
are enabled,
stageMask
must not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- Any pipeline stage included
in
stageMask
must be supported by the capabilities of the queue family specified by thequeueFamilyIndex
member of theCommandPoolCreateInfo
structure that was used to create theCommandPool
thatcommandBuffer
was allocated from, as specified in the table of supported pipeline stages -
stageMask
must not includePIPELINE_STAGE_HOST_BIT
- There must be an execution
dependency between
cmdResetEvent
and the execution of anycmdWaitEvents
that includesevent
in itspEvents
parameter - There must be an execution
dependency between
cmdResetEvent
and the execution of anycmdWaitEvents2
that includesevent
in itspEvents
parameter -
commandBuffer
’s current device mask must include exactly one physical device
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
event
must be a validEvent
handle -
stageMask
must be a valid combination ofPipelineStageFlagBits
values -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
, andevent
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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,
srcStageMask
must not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
orPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
- If the
conditionalRendering
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
- If the
fragmentDensityMap
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
- If the
transformFeedback
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
- If the
meshShader
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT
- If the
taskShader
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT
- If neither the
shadingRateImage
or
attachmentFragmentShadingRate
are enabled,
srcStageMask
must not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
- If the
synchronization2
feature is not enabled,
srcStageMask
must not be0
- If neither the
VK_NV_ray_tracing
extension or
rayTracingPipeline feature
are enabled,
srcStageMask
must not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- If the
rayQuery
feature is not enabled and a memory barrier
srcAccessMask
includesACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
,srcStageMask
must not include any of theVK_PIPELINE_STAGE_*_SHADER_BIT
stages exceptPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- If the
geometryShader
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
orPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
- If the
conditionalRendering
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
- If the
fragmentDensityMap
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
- If the
transformFeedback
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
- If the
meshShader
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT
- If the
taskShader
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT
- If neither the
shadingRateImage
or
attachmentFragmentShadingRate
are enabled,
dstStageMask
must not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
- If the
synchronization2
feature is not enabled,
dstStageMask
must not be0
- If neither the
VK_NV_ray_tracing
extension or
rayTracingPipeline feature
are enabled,
dstStageMask
must not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- If the
rayQuery
feature is not enabled and a memory barrier
dstAccessMask
includesACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
,dstStageMask
must not include any of theVK_PIPELINE_STAGE_*_SHADER_BIT
stages exceptPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- The
srcAccessMask
member of each element ofpMemoryBarriers
must 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
dstAccessMask
member of each element ofpMemoryBarriers
must 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 itssrcQueueFamilyIndex
anddstQueueFamilyIndex
members are equal, or if itssrcQueueFamilyIndex
is the queue family index that was used to create the command pool thatcommandBuffer
was allocated from, then itssrcAccessMask
member 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 itssrcQueueFamilyIndex
anddstQueueFamilyIndex
members are equal, or if itsdstQueueFamilyIndex
is the queue family index that was used to create the command pool thatcommandBuffer
was allocated from, then itsdstAccessMask
member 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 itssrcQueueFamilyIndex
anddstQueueFamilyIndex
members are equal, or if itssrcQueueFamilyIndex
is the queue family index that was used to create the command pool thatcommandBuffer
was allocated from, then itssrcAccessMask
member 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 itssrcQueueFamilyIndex
anddstQueueFamilyIndex
members are equal, or if itsdstQueueFamilyIndex
is the queue family index that was used to create the command pool thatcommandBuffer
was allocated from, then itsdstAccessMask
member 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
srcStageMask
must be supported by the capabilities of the queue family specified by thequeueFamilyIndex
member of theCommandPoolCreateInfo
structure that was used to create theCommandPool
thatcommandBuffer
was allocated from, as specified in the table of supported pipeline stages - Any pipeline stage
included in
dstStageMask
must be supported by the capabilities of the queue family specified by thequeueFamilyIndex
member of theCommandPoolCreateInfo
structure that was used to create theCommandPool
thatcommandBuffer
was allocated from, as specified in the table of supported pipeline stages -
srcStageMask
must be the bitwise OR of thestageMask
parameter used in previous calls tocmdSetEvent
with any of the elements ofpEvents
andPIPELINE_STAGE_HOST_BIT
if any of the elements ofpEvents
was set usingsetEvent
- If
cmdWaitEvents
is being called inside a render pass instance,srcStageMask
must not includePIPELINE_STAGE_HOST_BIT
- The
srcQueueFamilyIndex
anddstQueueFamilyIndex
members of any element ofpBufferMemoryBarriers
orpImageMemoryBarriers
must be equal -
commandBuffer
’s current device mask must include exactly one physical device - Elements of
pEvents
must not have been signaled bycmdSetEvent2
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pEvents
must be a valid pointer to an array ofeventCount
validEvent
handles -
srcStageMask
must be a valid combination ofPipelineStageFlagBits
values -
dstStageMask
must be a valid combination ofPipelineStageFlagBits
values - If
memoryBarrierCount
is not0
,pMemoryBarriers
must be a valid pointer to an array ofmemoryBarrierCount
validMemoryBarrier
structures - If
bufferMemoryBarrierCount
is not0
,pBufferMemoryBarriers
must be a valid pointer to an array ofbufferMemoryBarrierCount
validBufferMemoryBarrier
structures - If
imageMemoryBarrierCount
is not0
,pImageMemoryBarriers
must be a valid pointer to an array ofimageMemoryBarrierCount
validImageMemoryBarrier
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics, compute, decode, or encode operations -
eventCount
must be greater than0
- Both of
commandBuffer
, and the elements ofpEvents
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
:: 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,
srcStageMask
must not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
orPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
- If the
conditionalRendering
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
- If the
fragmentDensityMap
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
- If the
transformFeedback
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
- If the
meshShader
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT
- If the
taskShader
feature is not enabled,
srcStageMask
must not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT
- If neither the
shadingRateImage
or
attachmentFragmentShadingRate
are enabled,
srcStageMask
must not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
- If the
synchronization2
feature is not enabled,
srcStageMask
must not be0
- If neither the
VK_NV_ray_tracing
extension or
rayTracingPipeline feature
are enabled,
srcStageMask
must not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- If the
rayQuery
feature is not enabled and a memory barrier
srcAccessMask
includesACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
,srcStageMask
must not include any of theVK_PIPELINE_STAGE_*_SHADER_BIT
stages exceptPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- If the
geometryShader
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
orPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
- If the
conditionalRendering
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
- If the
fragmentDensityMap
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
- If the
transformFeedback
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
- If the
meshShader
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_MESH_SHADER_BIT_EXT
- If the
taskShader
feature is not enabled,
dstStageMask
must not containPIPELINE_STAGE_TASK_SHADER_BIT_EXT
- If neither the
shadingRateImage
or
attachmentFragmentShadingRate
are enabled,
dstStageMask
must not containPIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
- If the
synchronization2
feature is not enabled,
dstStageMask
must not be0
- If neither the
VK_NV_ray_tracing
extension or
rayTracingPipeline feature
are enabled,
dstStageMask
must not containPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- If the
rayQuery
feature is not enabled and a memory barrier
dstAccessMask
includesACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR
,dstStageMask
must not include any of theVK_PIPELINE_STAGE_*_SHADER_BIT
stages exceptPIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
- The
srcAccessMask
member of each element ofpMemoryBarriers
must 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
dstAccessMask
member of each element ofpMemoryBarriers
must 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 itssrcQueueFamilyIndex
anddstQueueFamilyIndex
members are equal, or if itssrcQueueFamilyIndex
is the queue family index that was used to create the command pool thatcommandBuffer
was allocated from, then itssrcAccessMask
member 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 itssrcQueueFamilyIndex
anddstQueueFamilyIndex
members are equal, or if itsdstQueueFamilyIndex
is the queue family index that was used to create the command pool thatcommandBuffer
was allocated from, then itsdstAccessMask
member 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 itssrcQueueFamilyIndex
anddstQueueFamilyIndex
members are equal, or if itssrcQueueFamilyIndex
is the queue family index that was used to create the command pool thatcommandBuffer
was allocated from, then itssrcAccessMask
member 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 itssrcQueueFamilyIndex
anddstQueueFamilyIndex
members are equal, or if itsdstQueueFamilyIndex
is the queue family index that was used to create the command pool thatcommandBuffer
was allocated from, then itsdstAccessMask
member 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
cmdPipelineBarrier
is called within a render pass instance using aRenderPass
object, 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_BIT
if this command does not, does not includeDEPENDENCY_VIEW_LOCAL_BIT
if this command does not, and has synchronization scopes and access scopes that are all supersets of the scopes defined in this command - If
cmdPipelineBarrier
is called within a render pass instance using aRenderPass
object, it must not include any buffer memory barriers - If
cmdPipelineBarrier
is called within a render pass instance using aRenderPass
object, theimage
member 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
cmdPipelineBarrier
is called within a render pass instance using aRenderPass
object, and theimage
member of any image memory barrier is a color resolve attachment, the corresponding color attachment must beATTACHMENT_UNUSED
- If
cmdPipelineBarrier
is called within a render pass instance using aRenderPass
object, and theimage
member of any image memory barrier is a color resolve attachment, it must have been created with a non-zeroExternalFormatANDROID
::externalFormat
value - If
cmdPipelineBarrier
is called within a render pass instance, theoldLayout
andnewLayout
members of any image memory barrier included in this command must be equal - If
cmdPipelineBarrier
is called within a render pass instance, thesrcQueueFamilyIndex
anddstQueueFamilyIndex
members of any memory barrier included in this command must be equal - If
cmdPipelineBarrier
is 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
cmdPipelineBarrier
is called within a render pass instance, and and the source stage masks of any memory barriers include framebuffer-space stages, thendependencyFlags
must includeDEPENDENCY_BY_REGION_BIT
- If
cmdPipelineBarrier
is called within a render pass instance, the source and destination stage masks of any memory barriers must only include graphics pipeline stages - If
cmdPipelineBarrier
is called outside of a render pass instance, the dependency flags must not includeDEPENDENCY_VIEW_LOCAL_BIT
- If
cmdPipelineBarrier
is 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
cmdPipelineBarrier
is 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
cmdPipelineBarrier
is 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
srcStageMask
must be supported by the capabilities of the queue family specified by thequeueFamilyIndex
member of theCommandPoolCreateInfo
structure that was used to create theCommandPool
thatcommandBuffer
was allocated from, as specified in the table of supported pipeline stages - Any pipeline stage
included in
dstStageMask
must be supported by the capabilities of the queue family specified by thequeueFamilyIndex
member of theCommandPoolCreateInfo
structure that was used to create theCommandPool
thatcommandBuffer
was allocated from, as specified in the table of supported pipeline stages
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
srcStageMask
must be a valid combination ofPipelineStageFlagBits
values -
dstStageMask
must be a valid combination ofPipelineStageFlagBits
values -
dependencyFlags
must be a valid combination ofDependencyFlagBits
values - If
memoryBarrierCount
is not0
,pMemoryBarriers
must be a valid pointer to an array ofmemoryBarrierCount
validMemoryBarrier
structures - If
bufferMemoryBarrierCount
is not0
,pBufferMemoryBarriers
must be a valid pointer to an array ofbufferMemoryBarrierCount
validBufferMemoryBarrier
structures - If
imageMemoryBarrierCount
is not0
,pImageMemoryBarriers
must be a valid pointer to an array ofimageMemoryBarrierCount
validImageMemoryBarrier
structures -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support transfer, graphics, compute, decode, or encode operations
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
queryType
used to createqueryPool
must not beQUERY_TYPE_TIMESTAMP
- The
queryType
used to createqueryPool
must not beQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR
orQUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR
- The
queryType
used to createqueryPool
must not beQUERY_TYPE_ACCELERATION_STRUCTURE_SIZE_KHR
orQUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_BOTTOM_LEVEL_POINTERS_KHR
- The
queryType
used to createqueryPool
must not beQUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV
- If the
occlusionQueryPrecise
feature is not enabled, or the
queryType
used to createqueryPool
was notQUERY_TYPE_OCCLUSION
,flags
must not containQUERY_CONTROL_PRECISE_BIT
-
query
must be less than the number of queries inqueryPool
- If the
queryType
used to createqueryPool
wasQUERY_TYPE_OCCLUSION
, theCommandPool
thatcommandBuffer
was allocated from must support graphics operations - If the
queryType
used to createqueryPool
wasQUERY_TYPE_PIPELINE_STATISTICS
and any of thepipelineStatistics
indicate graphics operations, theCommandPool
thatcommandBuffer
was allocated from must support graphics operations - If the
queryType
used to createqueryPool
wasQUERY_TYPE_PIPELINE_STATISTICS
and any of thepipelineStatistics
indicate compute operations, theCommandPool
thatcommandBuffer
was allocated from must support compute operations -
commandBuffer
must not be a protected command buffer - If called within a render pass
instance, the sum of
query
and the number of bits set in the current subpass’s view mask must be less than or equal to the number of queries inqueryPool
- If the
queryType
used to createqueryPool
wasVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR
, then theCommandPool
thatcommandBuffer
was 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
queryType
used to createqueryPool
wasVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR
and there is a bound video session, thenqueryPool
must have been created with a VkVideoProfileInfoKHR structure included in thepNext
chain ofQueryPoolCreateInfo
identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile
the bound video session was created with - If the
queryType
used to createqueryPool
wasVK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR
, then theCommandPool
thatcommandBuffer
was allocated from must support video encode operations - If the
queryType
used to createqueryPool
wasVK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR
, then there must be a bound video session - If the
queryType
used to createqueryPool
wasVK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR
and there is a bound video session, thenqueryPool
must have been created with a VkVideoProfileInfoKHR structure included in thepNext
chain ofQueryPoolCreateInfo
identical to the one specified in VkVideoSessionCreateInfoKHR::pVideoProfile
the bound video session was created with - If the
queryType
used to createqueryPool
was notVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR
orVK_QUERY_TYPE_VIDEO_ENCODE_FEEDBACK_KHR
, then there must be no bound video session -
queryPool
must have been created with aqueryType
that differs from that of any queries that are active withincommandBuffer
- If the
queryType
used to createqueryPool
wasQUERY_TYPE_MESH_PRIMITIVES_GENERATED_EXT
theCommandPool
thatcommandBuffer
was allocated from must support graphics operations - If the
queryType
used to createqueryPool
wasQUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
theCommandPool
thatcommandBuffer
was allocated from must support graphics operations - If the
queryType
used to createqueryPool
wasQUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT
thenPhysicalDeviceTransformFeedbackPropertiesEXT
::transformFeedbackQueries
must be supported - If the
queryType
used to createqueryPool
wasQUERY_TYPE_PRIMITIVES_GENERATED_EXT
theCommandPool
thatcommandBuffer
was allocated from must support graphics operations - If the
queryType
used to createqueryPool
wasQUERY_TYPE_PRIMITIVES_GENERATED_EXT
then primitivesGeneratedQuery must be enabled - If
queryPool
was created with aqueryType
ofQUERY_TYPE_PERFORMANCE_QUERY_KHR
, then theQueryPoolPerformanceCreateInfoKHR
::queueFamilyIndex
queryPool
was created with must equal the queue family index of theCommandPool
thatcommandBuffer
was allocated from - If
queryPool
was created with aqueryType
ofQUERY_TYPE_PERFORMANCE_QUERY_KHR
, the profiling lock must have been held beforebeginCommandBuffer
was called oncommandBuffer
- If
queryPool
was created with aqueryType
ofQUERY_TYPE_PERFORMANCE_QUERY_KHR
and one of the counters used to createqueryPool
wasPERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR
, the query begin must be the first recorded command incommandBuffer
- If
queryPool
was created with aqueryType
ofQUERY_TYPE_PERFORMANCE_QUERY_KHR
and one of the counters used to createqueryPool
wasPERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR
, the begin command must not be recorded within a render pass instance - If
queryPool
was created with aqueryType
ofQUERY_TYPE_PERFORMANCE_QUERY_KHR
and another query pool with aqueryType
QUERY_TYPE_PERFORMANCE_QUERY_KHR
has 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
queryPool
was created with aqueryType
ofQUERY_TYPE_PERFORMANCE_QUERY_KHR
, this command must not be recorded in a command buffer that, either directly or through secondary command buffers, also contains acmdResetQueryPool
command affecting the same query
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
queryPool
must be a validQueryPool
handle -
flags
must be a valid combination ofQueryControlFlagBits
values -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics, compute, decode, or encode operations - Both of
commandBuffer
, andqueryPool
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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.
:: 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
-
query
must be less than the number of queries inqueryPool
-
commandBuffer
must not be a protected command buffer - If
cmdEndQuery
is called within a render pass instance, the sum ofquery
and 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
queryPool
was created with aqueryType
ofQUERY_TYPE_PERFORMANCE_QUERY_KHR
and one or more of the counters used to createqueryPool
wasPERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR
, thecmdEndQuery
must be the last recorded command incommandBuffer
- If
queryPool
was created with aqueryType
ofQUERY_TYPE_PERFORMANCE_QUERY_KHR
and one or more of the counters used to createqueryPool
wasPERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR
, thecmdEndQuery
must 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)
-
commandBuffer
must be a validCommandBuffer
handle
-
queryPool
must be a validQueryPool
handle -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics, compute, decode, or encode operations - Both of
commandBuffer
, andqueryPool
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
firstQuery
andqueryCount
must be less than or equal to the number of queries inqueryPool
- All queries used by the command must not be active
- If
queryPool
was 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)
-
commandBuffer
must be a validCommandBuffer
handle
-
queryPool
must be a validQueryPool
handle -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
, andqueryPool
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
-
pipelineStage
must be a valid stage for the queue family that was used to create the command pool thatcommandBuffer
was allocated from
- If the
geometryShader
feature is not enabled,
pipelineStage
must not bePIPELINE_STAGE_GEOMETRY_SHADER_BIT
- If the
tessellationShader
feature is not enabled,
pipelineStage
must not bePIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
orPIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
- If the
conditionalRendering
feature is not enabled,
pipelineStage
must not bePIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT
- If the
fragmentDensityMap
feature is not enabled,
pipelineStage
must not bePIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT
- If the
transformFeedback
feature is not enabled,
pipelineStage
must not bePIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT
- If the
meshShader
feature is not enabled,
pipelineStage
must not bePIPELINE_STAGE_MESH_SHADER_BIT_EXT
- If the
taskShader
feature is not enabled,
pipelineStage
must not bePIPELINE_STAGE_TASK_SHADER_BIT_EXT
- If neither the
shadingRateImage
or
attachmentFragmentShadingRate
are enabled,
pipelineStage
must not bePIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
- If the
synchronization2
feature is not enabled,
pipelineStage
must not bePIPELINE_STAGE_NONE
- If neither the
VK_NV_ray_tracing
extension or
rayTracingPipeline feature
are enabled,
pipelineStage
must not bePIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR
-
queryPool
must have been created with aqueryType
ofQUERY_TYPE_TIMESTAMP
- The command
pool’s queue family must support a non-zero
timestampValidBits
-
query
must be less than the number of queries inqueryPool
- All queries used by the command must be unavailable
- If
cmdWriteTimestamp
is called within a render pass instance, the sum ofquery
and 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)
-
commandBuffer
must be a validCommandBuffer
handle
-
pipelineStage
must be a validPipelineStageFlagBits
value -
queryPool
must be a validQueryPool
handle -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support transfer, graphics, compute, decode, encode, or optical flow operations - Both of
commandBuffer
, andqueryPool
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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 #
:: 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
-
dstOffset
must be less than the size ofdstBuffer
-
firstQuery
must be less than the number of queries inqueryPool
- The sum of
firstQuery
andqueryCount
must be less than or equal to the number of queries inqueryPool
- If
QUERY_RESULT_64_BIT
is not set inflags
thendstOffset
andstride
must be multiples of4
- If
QUERY_RESULT_64_BIT
is set inflags
thendstOffset
andstride
must be multiples of8
-
dstBuffer
must have enough storage, fromdstOffset
, to contain the result of each query, as described here -
dstBuffer
must have been created withBUFFER_USAGE_TRANSFER_DST_BIT
usage flag - If
dstBuffer
is non-sparse then it must be bound completely and contiguously to a singleDeviceMemory
object - If the
queryType
used to createqueryPool
wasQUERY_TYPE_TIMESTAMP
,flags
must not containQUERY_RESULT_PARTIAL_BIT
- If the
queryType
used to createqueryPool
wasQUERY_TYPE_PERFORMANCE_QUERY_KHR
,PhysicalDevicePerformanceQueryPropertiesKHR
::allowCommandBufferQueryCopies
must beTRUE
- If the
queryType
used to createqueryPool
wasQUERY_TYPE_PERFORMANCE_QUERY_KHR
,flags
must not containQUERY_RESULT_WITH_AVAILABILITY_BIT
,VK_QUERY_RESULT_WITH_STATUS_BIT_KHR
,QUERY_RESULT_PARTIAL_BIT
, orQUERY_RESULT_64_BIT
- If the
queryType
used to createqueryPool
wasQUERY_TYPE_PERFORMANCE_QUERY_KHR
, thequeryPool
must have been submitted once for each pass as retrieved via a call togetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR
-
cmdCopyQueryPoolResults
must not be called if thequeryType
used to createqueryPool
wasQUERY_TYPE_PERFORMANCE_QUERY_INTEL
- If the
queryType
used to createqueryPool
wasVK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR
, thenflags
must includeVK_QUERY_RESULT_WITH_STATUS_BIT_KHR
- If
flags
includesVK_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)
-
commandBuffer
must be a validCommandBuffer
handle
-
queryPool
must be a validQueryPool
handle -
dstBuffer
must be a validBuffer
handle -
flags
must be a valid combination ofQueryResultFlagBits
values -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
, andqueryPool
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
offset
andsize
and for each shader stage instageFlags
, there must be a push constant range inlayout
that includes that byte and that stage
- For each byte in the range
specified by
offset
andsize
and for each push constant range that overlaps that byte,stageFlags
must include all stages in that push constant range’sPushConstantRange
::stageFlags
-
offset
must be a multiple of4
-
size
must be a multiple of4
-
offset
must be less thanPhysicalDeviceLimits
::maxPushConstantsSize
-
size
must be less than or equal toPhysicalDeviceLimits
::maxPushConstantsSize
minusoffset
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
layout
must be a validPipelineLayout
handle -
stageFlags
must be a valid combination ofShaderStageFlagBits
values -
stageFlags
must not be0
-
pValues
must be a valid pointer to an array ofsize
bytes -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support graphics, or compute operations - This command must only be called outside of a video coding scope
-
size
must be greater than0
- Both of
commandBuffer
, andlayout
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
initialLayout
orfinalLayout
member of theAttachmentDescription
structures or thelayout
member of theAttachmentReference
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
isIMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
then the corresponding attachment image view of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
must have been created with ausage
value includingIMAGE_USAGE_COLOR_ATTACHMENT_BIT
- If any of the
initialLayout
orfinalLayout
member of theAttachmentDescription
structures or thelayout
member of theAttachmentReference
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
isIMAGE_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_OPTIMAL
then the corresponding attachment image view of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
must have been created with ausage
value includingIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
- If any of the
initialLayout
orfinalLayout
member of theAttachmentDescription
structures or thelayout
member of theAttachmentReference
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
isIMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL
, orIMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL
,IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
, orIMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
then the corresponding attachment image view of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
must have been created with ausage
value includingIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
- If any of the
stencilInitialLayout
orstencilFinalLayout
member of theAttachmentDescriptionStencilLayout
structures or thestencilLayout
member of theAttachmentReferenceStencilLayout
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
isIMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL
, orIMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL
then the corresponding attachment image view of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
must have been created with ausage
value includingIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
- If any of the
initialLayout
orfinalLayout
member of theAttachmentDescription
structures or thelayout
member of theAttachmentReference
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
isIMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
then the corresponding attachment image view of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
must have been created with ausage
value includingIMAGE_USAGE_SAMPLED_BIT
orIMAGE_USAGE_INPUT_ATTACHMENT_BIT
- If any of the
initialLayout
orfinalLayout
member of theAttachmentDescription
structures or thelayout
member of theAttachmentReference
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
isIMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
then the corresponding attachment image view of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
must have been created with ausage
value includingIMAGE_USAGE_TRANSFER_SRC_BIT
- If any of the
initialLayout
orfinalLayout
member of theAttachmentDescription
structures or thelayout
member of theAttachmentReference
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
isIMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
then the corresponding attachment image view of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
must have been created with ausage
value includingIMAGE_USAGE_TRANSFER_DST_BIT
- If the
initialLayout
member of any of theAttachmentDescription
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
is notIMAGE_LAYOUT_UNDEFINED
, then each suchinitialLayout
must be equal to the current layout of the corresponding attachment image subresource of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
- The
srcStageMask
members of any element of thepDependencies
member ofRenderPassCreateInfo
used to createrenderPass
must be supported by the capabilities of the queue family identified by thequeueFamilyIndex
member of theCommandPoolCreateInfo
used to create the command pool whichcommandBuffer
was allocated from - The
dstStageMask
members of any element of thepDependencies
member ofRenderPassCreateInfo
used to createrenderPass
must be supported by the capabilities of the queue family identified by thequeueFamilyIndex
member of theCommandPoolCreateInfo
used to create the command pool whichcommandBuffer
was allocated from - For any attachment in
framebuffer
that is used byrenderPass
and 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_BIT
set - If any attachments
specified in
framebuffer
are used byrenderPass
and 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
initialLayout
orfinalLayout
member of theAttachmentDescription
structures or thelayout
member of theAttachmentReference
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
isIMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT
then the corresponding attachment image view of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
must have been created with ausage
value including either theIMAGE_USAGE_COLOR_ATTACHMENT_BIT
orIMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
and either theIMAGE_USAGE_INPUT_ATTACHMENT_BIT
orIMAGE_USAGE_SAMPLED_BIT
usage bits - If any of the
initialLayout
orfinalLayout
member of theAttachmentDescription
structures or thelayout
member of theAttachmentReference
structures specified when creating the render pass specified in therenderPass
member ofpRenderPassBegin
isIMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT
then the corresponding attachment image view of the framebuffer specified in theframebuffer
member ofpRenderPassBegin
must have been created with ausage
value theIMAGE_USAGE_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT
usage bit
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pRenderPassBegin
must be a valid pointer to a validRenderPassBeginInfo
structure -
contents
must be a validSubpassContents
value -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
commandBuffer
must be a primaryCommandBuffer
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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.
:: 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)
-
commandBuffer
must be a validCommandBuffer
handle
-
contents
must be a validSubpassContents
value -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
commandBuffer
must be a primaryCommandBuffer
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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)
-
commandBuffer
must be a validCommandBuffer
handle
-
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was 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
-
commandBuffer
must be a primaryCommandBuffer
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
:: 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
pCommandBuffers
must have been allocated with alevel
ofCOMMAND_BUFFER_LEVEL_SECONDARY
- Each element of
pCommandBuffers
must be in the pending or executable state - If any element of
pCommandBuffers
was not recorded with theCOMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
flag, it must not be in the pending state - If any element of
pCommandBuffers
was not recorded with theCOMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
flag, it must not have already been recorded tocommandBuffer
- If any element of
pCommandBuffers
was not recorded with theCOMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
flag, it must not appear more than once inpCommandBuffers
- Each element of
pCommandBuffers
must have been allocated from aCommandPool
that was created for the same queue family as theCommandPool
from whichcommandBuffer
was allocated - If
cmdExecuteCommands
is being called within a render pass instance, each element ofpCommandBuffers
must have been recorded with theCOMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
- If
cmdExecuteCommands
is being called within a render pass instance, and any element ofpCommandBuffers
was recorded withCommandBufferInheritanceInfo
::framebuffer
not equal toNULL_HANDLE
, thatFramebuffer
must match theFramebuffer
used in the current render pass instance - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRenderPass
, itscontents
parameter must have been set toSUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
, orSUBPASS_CONTENTS_INLINE_AND_SECONDARY_COMMAND_BUFFERS_EXT
- If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRenderPass
, each element ofpCommandBuffers
must have been recorded withCommandBufferInheritanceInfo
::subpass
set to the index of the subpass which the given command buffer will be executed in - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRenderPass
, the render passes specified in thepBeginInfo->pInheritanceInfo->renderPass
members of thebeginCommandBuffer
commands used to begin recording each element ofpCommandBuffers
must be compatible with the current render pass - If
cmdExecuteCommands
is being called within a render pass instance that includedRenderPassTransformBeginInfoQCOM
in thepNext
chain ofRenderPassBeginInfo
, then each element ofpCommandBuffers
must have been recorded withCommandBufferInheritanceRenderPassTransformInfoQCOM
in thepNext
chain ofCommandBufferBeginInfo
- If
cmdExecuteCommands
is being called within a render pass instance that includedRenderPassTransformBeginInfoQCOM
in thepNext
chain ofRenderPassBeginInfo
, then each element ofpCommandBuffers
must have been recorded withCommandBufferInheritanceRenderPassTransformInfoQCOM
::transform
identical toRenderPassTransformBeginInfoQCOM
::transform
- If
cmdExecuteCommands
is being called within a render pass instance that includedRenderPassTransformBeginInfoQCOM
in thepNext
chain ofRenderPassBeginInfo
, then each element ofpCommandBuffers
must have been recorded withCommandBufferInheritanceRenderPassTransformInfoQCOM
::renderArea
identical toRenderPassBeginInfo
::renderArea
- If
cmdExecuteCommands
is not being called within a render pass instance, each element ofpCommandBuffers
must not have been recorded with theCOMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
- If the
inheritedQueries
feature is not enabled,
commandBuffer
must not have any queries active - If
commandBuffer
has aQUERY_TYPE_OCCLUSION
query active, then each element ofpCommandBuffers
must have been recorded withCommandBufferInheritanceInfo
::occlusionQueryEnable
set toTRUE
- If
commandBuffer
has aQUERY_TYPE_OCCLUSION
query active, then each element ofpCommandBuffers
must have been recorded withCommandBufferInheritanceInfo
::queryFlags
having all bits set that are set for the query - If
commandBuffer
has aQUERY_TYPE_PIPELINE_STATISTICS
query active, then each element ofpCommandBuffers
must have been recorded withCommandBufferInheritanceInfo
::pipelineStatistics
having all bits set that are set in theQueryPool
the query uses - Each element of
pCommandBuffers
must not begin any query types that are active incommandBuffer
-
commandBuffer
must not have any queries other thanQUERY_TYPE_OCCLUSION
andQUERY_TYPE_PIPELINE_STATISTICS
active - If
commandBuffer
is a protected command buffer and protectedNoFault is not supported, each element ofpCommandBuffers
must be a protected command buffer - If
commandBuffer
is an unprotected command buffer and protectedNoFault is not supported, each element ofpCommandBuffers
must be an unprotected command buffer - This command must not be recorded when transform feedback is active
- If
cmdExecuteCommands
is being called within a render pass instance and any recorded command incommandBuffer
in the current subpass will write to an image subresource as an attachment, commands recorded in elements ofpCommandBuffers
must not read from the memory backing that image subresource in any other way - If
cmdExecuteCommands
is being called within a render pass instance and any recorded command incommandBuffer
in 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 ofpCommandBuffers
must not write to that image subresource as an attachment - If
cmdExecuteCommands
is being called within a render pass instance and any recorded command in a given element ofpCommandBuffers
will write to an image subresource as an attachment, commands recorded in elements ofpCommandBuffers
at a higher index must not read from the memory backing that image subresource in any other way - If
cmdExecuteCommands
is being called within a render pass instance and any recorded command in a given element ofpCommandBuffers
will read from an image subresource used as an attachment in any way other than as an attachment, commands recorded in elements ofpCommandBuffers
at a higher index must not write to that image subresource as an attachment - If
pCommandBuffers
contains 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
pCommandBuffers
contains 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
pCommandBuffers
contains 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
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, itsRenderingInfo
::flags
parameter must have includedRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT
- If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, the render passes specified in thepBeginInfo->pInheritanceInfo->renderPass
members of thebeginCommandBuffer
commands used to begin recording each element ofpCommandBuffers
must beNULL_HANDLE
- If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, theflags
member of theCommandBufferInheritanceRenderingInfo
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must be equal to theRenderingInfo
::flags
parameter tocmdBeginRendering
, excludingRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT
- If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, thecolorAttachmentCount
member of theCommandBufferInheritanceRenderingInfo
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must be equal to theRenderingInfo
::colorAttachmentCount
parameter tocmdBeginRendering
- If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, if theimageView
member of an element of theRenderingInfo
::pColorAttachments
parameter tocmdBeginRendering
is notNULL_HANDLE
, the corresponding element of thepColorAttachmentFormats
member of theCommandBufferInheritanceRenderingInfo
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must be equal to the format used to create that image view - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, if theimageView
member of an element of theRenderingInfo
::pColorAttachments
parameter tocmdBeginRendering
isNULL_HANDLE
, the corresponding element of thepColorAttachmentFormats
member of theCommandBufferInheritanceRenderingInfo
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must beFORMAT_UNDEFINED
- If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, if theRenderingInfo
::pDepthAttachment->imageView
parameter tocmdBeginRendering
is notNULL_HANDLE
, the value of thedepthAttachmentFormat
member of theCommandBufferInheritanceRenderingInfo
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must be equal to the format used to create that image view - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, if theRenderingInfo
::pStencilAttachment->imageView
parameter tocmdBeginRendering
is notNULL_HANDLE
, the value of thestencilAttachmentFormat
member of theCommandBufferInheritanceRenderingInfo
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must be equal to the format used to create that image view - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
and theRenderingInfo
::pDepthAttachment->imageView
parameter tocmdBeginRendering
wasNULL_HANDLE
, the value of thedepthAttachmentFormat
member of theCommandBufferInheritanceRenderingInfo
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must beFORMAT_UNDEFINED
- If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
and theRenderingInfo
::pStencilAttachment->imageView
parameter tocmdBeginRendering
wasNULL_HANDLE
, the value of thestencilAttachmentFormat
member of theCommandBufferInheritanceRenderingInfo
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must beFORMAT_UNDEFINED
- If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, theviewMask
member of theCommandBufferInheritanceRenderingInfo
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must be equal to theRenderingInfo
::viewMask
parameter tocmdBeginRendering
- If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
and thepNext
chain ofCommandBufferInheritanceInfo
includes aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, if theimageView
member of an element of theRenderingInfo
::pColorAttachments
parameter tocmdBeginRendering
is notNULL_HANDLE
, the corresponding element of thepColorAttachmentSamples
member of theAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must be equal to the sample count used to create that image view - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
and thepNext
chain ofCommandBufferInheritanceInfo
includes aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, if theRenderingInfo
::pDepthAttachment->imageView
parameter tocmdBeginRendering
is notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member of theAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must be equal to the sample count used to create that image view - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
and thepNext
chain ofCommandBufferInheritanceInfo
includes aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, if theRenderingInfo
::pStencilAttachment->imageView
parameter tocmdBeginRendering
is notNULL_HANDLE
, the value of thedepthStencilAttachmentSamples
member of theAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure included in thepNext
chain ofCommandBufferBeginInfo
::pInheritanceInfo
used to begin recording each element ofpCommandBuffers
must be equal to the sample count used to create that image view - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
and thepNext
chain ofCommandBufferInheritanceInfo
does not include aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, if theimageView
member of an element of theRenderingInfo
::pColorAttachments
parameter tocmdBeginRendering
is notNULL_HANDLE
, the value ofCommandBufferInheritanceRenderingInfo
::rasterizationSamples
must be equal to the sample count used to create that image view - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
and thepNext
chain ofCommandBufferInheritanceInfo
does not include aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, if theRenderingInfo
::pDepthAttachment->imageView
parameter tocmdBeginRendering
is notNULL_HANDLE
, the value ofCommandBufferInheritanceRenderingInfo
::rasterizationSamples
must be equal to the sample count used to create that image view - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
and thepNext
chain ofCommandBufferInheritanceInfo
does not include aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, if theRenderingInfo
::pStencilAttachment->imageView
parameter tocmdBeginRendering
is notNULL_HANDLE
, the value ofCommandBufferInheritanceRenderingInfo
::rasterizationSamples
must be equal to the sample count used to create that image view - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
, with any color attachment using a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, thepNext
chain ofCommandBufferInheritanceInfo
used to create each element ofpCommandBuffers
must include aExternalFormatANDROID
structure with aexternalFormat
matching that used to create the resolve attachment in the render pass - If
cmdExecuteCommands
is being called within a render pass instance begun withcmdBeginRendering
with any color attachment using a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID
, and thepNext
chain ofCommandBufferInheritanceInfo
does not include aAttachmentSampleCountInfoAMD
orAttachmentSampleCountInfoNV
structure, the value ofCommandBufferInheritanceRenderingInfo
::rasterizationSamples
must beSAMPLE_COUNT_1_BIT
-
commandBuffer
must 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
pCommandBuffers
must be less than maxCommandBufferNestingLevel - If
the
nestedCommandBufferRendering
feature is not enabled, and
commandBuffer
is a secondary command buffer,commandBuffer
must not have been recorded withCOMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
-
If the
nestedCommandBufferSimultaneousUse
feature is not enabled, and
commandBuffer
is a secondary command buffer, each element ofpCommandBuffers
must not have been recorded withCOMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
Valid Usage (Implicit)
-
commandBuffer
must be a validCommandBuffer
handle
-
pCommandBuffers
must be a valid pointer to an array ofcommandBufferCount
validCommandBuffer
handles -
commandBuffer
must be in the recording state - The
CommandPool
thatcommandBuffer
was allocated from must support transfer, graphics, or compute operations - This command must only be called outside of a video coding scope
-
commandBufferCount
must be greater than0
- Both of
commandBuffer
, and the elements ofpCommandBuffers
must have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffer
must be externally synchronized
- Host access to the
CommandPool
thatcommandBuffer
was 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
ClearRect | |
|
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
aspectMask
containsIMAGE_ASPECT_COLOR_BIT
, it must not contain either ofIMAGE_ASPECT_DEPTH_BIT
orIMAGE_ASPECT_STENCIL_BIT
-
aspectMask
must not containIMAGE_ASPECT_METADATA_BIT
-
aspectMask
must not includeVK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT
for any index i - If the
maintenance5
feature is not enabled,
layerCount
must not beREMAINING_ARRAY_LAYERS
- If
layerCount
is notREMAINING_ARRAY_LAYERS
, it must be greater than 0
Valid Usage (Implicit)
-
aspectMask
must be a valid combination ofImageAspectFlagBits
values
See Also
VK_VERSION_1_0,
BufferImageCopy
,
BufferImageCopy2
,
CopyMemoryToImageIndirectCommandNV
,
ImageAspectFlags
, ImageBlit
,
ImageBlit2
,
ImageCopy
,
ImageCopy2
,
ImageResolve
,
ImageResolve2
,
ImageToMemoryCopyEXT
,
MemoryToImageCopyEXT
,
cmdCopyMemoryToImageIndirectNV
ImageSubresourceLayers | |
|
Instances
data BufferCopy Source #
VkBufferCopy - Structure specifying a buffer copy operation
Valid Usage
See Also
BufferCopy | |
|
Instances
VkImageCopy - Structure specifying an image copy operation
Valid Usage
- If the
VK_KHR_sampler_ycbcr_conversion
extension is not enabled, and
PhysicalDeviceProperties
::apiVersion
is less than Vulkan 1.1, theaspectMask
member ofsrcSubresource
anddstSubresource
must match
- If the
VK_KHR_maintenance1
extension is not enabled, and
PhysicalDeviceProperties
::apiVersion
is less than Vulkan 1.1, thelayerCount
member ofsrcSubresource
anddstSubresource
must match -
extent.width
must not be 0 -
extent.height
must not be 0 -
extent.depth
must not be 0
Valid Usage (Implicit)
-
srcSubresource
must be a validImageSubresourceLayers
structure
-
dstSubresource
must be a validImageSubresourceLayers
structure
See Also
VK_VERSION_1_0,
Extent3D
, ImageSubresourceLayers
,
Offset3D
, cmdCopyImage
ImageCopy | |
|
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
layerCount
members ofsrcSubresource
ordstSubresource
areREMAINING_ARRAY_LAYERS
, thelayerCount
members ofsrcSubresource
ordstSubresource
must match - If the
maintenance5
feature is not enabled, the
layerCount
member ofsrcSubresource
ordstSubresource
must not beREMAINING_ARRAY_LAYERS
- If one of the
layerCount
members ofsrcSubresource
ordstSubresource
isREMAINING_ARRAY_LAYERS
, the other member must be eitherREMAINING_ARRAY_LAYERS
or equal to thearrayLayers
member of theImageCreateInfo
used to create the image minusbaseArrayLayer
Valid Usage (Implicit)
-
srcSubresource
must be a validImageSubresourceLayers
structure
-
dstSubresource
must be a validImageSubresourceLayers
structure
See Also
VK_VERSION_1_0,
ImageSubresourceLayers
, Offset3D
,
cmdBlitImage
ImageBlit | |
|
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
-
bufferImageHeight
must be0
, or greater than or equal to theheight
member ofimageExtent
- The
aspectMask
member ofimageSubresource
must only have a single bit set -
imageExtent.width
must not be 0 -
imageExtent.height
must not be 0 -
imageExtent.depth
must not be 0
Valid Usage (Implicit)
-
imageSubresource
must be a validImageSubresourceLayers
structure
See Also
VK_VERSION_1_0,
DeviceSize
,
Extent3D
, ImageSubresourceLayers
,
Offset3D
, cmdCopyBufferToImage
,
cmdCopyImageToBuffer
BufferImageCopy | |
|
Instances
data ImageResolve Source #
VkImageResolve - Structure specifying an image resolve operation
Valid Usage
- The
aspectMask
member ofsrcSubresource
anddstSubresource
must only containIMAGE_ASPECT_COLOR_BIT
- If neither of the
layerCount
members ofsrcSubresource
ordstSubresource
areREMAINING_ARRAY_LAYERS
, thelayerCount
member ofsrcSubresource
anddstSubresource
must match - If the
maintenance5
feature is not enabled, the
layerCount
member ofsrcSubresource
ordstSubresource
must not beREMAINING_ARRAY_LAYERS
- If one of the
layerCount
members ofsrcSubresource
ordstSubresource
isREMAINING_ARRAY_LAYERS
, the other member must be eitherREMAINING_ARRAY_LAYERS
or equal to thearrayLayers
member of theImageCreateInfo
used to create the image minusbaseArrayLayer
Valid Usage (Implicit)
-
srcSubresource
must be a validImageSubresourceLayers
structure
-
dstSubresource
must be a validImageSubresourceLayers
structure
See Also
VK_VERSION_1_0,
Extent3D
, ImageSubresourceLayers
,
Offset3D
, cmdResolveImage
ImageResolve | |
|
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
-
clearValueCount
must be greater than the largest attachment index inrenderPass
specifying aloadOp
(orstencilLoadOp
, if the attachment has a depth/stencil format) ofATTACHMENT_LOAD_OP_CLEAR
- If
clearValueCount
is not0
,pClearValues
must be a valid pointer to an array ofclearValueCount
ClearValue
unions -
renderPass
must be compatible with therenderPass
member of theFramebufferCreateInfo
structure specified when creatingframebuffer
- If
DeviceGroupRenderPassBeginInfo
::deviceRenderAreaCount
is 0,renderArea.extent.width
must be greater than 0 - If
DeviceGroupRenderPassBeginInfo
::deviceRenderAreaCount
is 0,renderArea.extent.height
must be greater than 0 - If the
pNext
chain does not containDeviceGroupRenderPassBeginInfo
or itsdeviceRenderAreaCount
member is equal to 0,renderArea.offset.x
must be greater than or equal to 0 - If the
pNext
chain does not containDeviceGroupRenderPassBeginInfo
or itsdeviceRenderAreaCount
member is equal to 0,renderArea.offset.y
must be greater than or equal to 0 - If the
pNext
chain does not containDeviceGroupRenderPassBeginInfo
or itsdeviceRenderAreaCount
member is equal to 0,renderArea.offset.x
+renderArea.extent.width
must be less than or equal toFramebufferCreateInfo
::width
theframebuffer
was created with - If the
pNext
chain does not containDeviceGroupRenderPassBeginInfo
or itsdeviceRenderAreaCount
member is equal to 0,renderArea.offset.y
+renderArea.extent.height
must be less than or equal toFramebufferCreateInfo
::height
theframebuffer
was created with - If the
pNext
chain containsDeviceGroupRenderPassBeginInfo
,offset.x
+extent.width
of each element ofpDeviceRenderAreas
must be less than or equal toFramebufferCreateInfo
::width
theframebuffer
was created with - If the
pNext
chain containsDeviceGroupRenderPassBeginInfo
,offset.y
+extent.height
of each element ofpDeviceRenderAreas
must be less than or equal toFramebufferCreateInfo
::height
theframebuffer
was created with - If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that did not includeFRAMEBUFFER_CREATE_IMAGELESS_BIT
, and thepNext
chain includes aRenderPassAttachmentBeginInfo
structure, itsattachmentCount
must be zero - If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, theattachmentCount
of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be equal to the value ofFramebufferAttachmentsCreateInfo
::attachmentImageInfoCount
used to createframebuffer
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must have been created on the sameDevice
asframebuffer
andrenderPass
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
of an image created with a value ofImageCreateInfo
::flags
equal to theflags
member of the corresponding element ofFramebufferAttachmentsCreateInfo
::pAttachmentImageInfos
used to createframebuffer
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
with an inherited usage equal to theusage
member of the corresponding element ofFramebufferAttachmentsCreateInfo
::pAttachmentImageInfos
used to createframebuffer
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
with a width equal to thewidth
member of the corresponding element ofFramebufferAttachmentsCreateInfo
::pAttachmentImageInfos
used to createframebuffer
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
with a height equal to theheight
member of the corresponding element ofFramebufferAttachmentsCreateInfo
::pAttachmentImageInfos
used to createframebuffer
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
of an image created with a value ofImageViewCreateInfo
::subresourceRange.layerCount
equal to thelayerCount
member of the corresponding element ofFramebufferAttachmentsCreateInfo
::pAttachmentImageInfos
used to createframebuffer
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
of an image created with a value ofImageFormatListCreateInfo
::viewFormatCount
equal to theviewFormatCount
member of the corresponding element ofFramebufferAttachmentsCreateInfo
::pAttachmentImageInfos
used to createframebuffer
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
of an image created with a set of elements inImageFormatListCreateInfo
::pViewFormats
equal to the set of elements in thepViewFormats
member of the corresponding element ofFramebufferAttachmentsCreateInfo
::pAttachmentImageInfos
used to createframebuffer
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
of an image created with a value ofImageViewCreateInfo
::format
equal to the corresponding value ofAttachmentDescription
::format
inrenderPass
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value 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
::colorAttachmentFormat
as returned by a call togetAndroidHardwareBufferPropertiesANDROID
for the Android hardware buffer that was used to create the image view use as its resolve attachment - If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
of an image created with a value ofExternalFormatANDROID
::externalFormat
equal toExternalFormatANDROID
::externalFormat
in thepNext
chain of the correspondingAttachmentDescription2
structure used to createrenderPass
- If
framebuffer
was created with aFramebufferCreateInfo
::flags
value that includedFRAMEBUFFER_CREATE_IMAGELESS_BIT
, each element of thepAttachments
member of aRenderPassAttachmentBeginInfo
structure included in thepNext
chain must be aImageView
of an image created with a value ofImageCreateInfo
::samples
equal to the corresponding value ofAttachmentDescription
::samples
inrenderPass
, orSAMPLE_COUNT_1_BIT
ifrenderPass
was created withMultisampledRenderToSingleSampledInfoEXT
structure in thepNext
chain withmultisampledRenderToSingleSampledEnable
equal toTRUE
- If the
pNext
chain includesRenderPassTransformBeginInfoQCOM
,renderArea.offset
must equal (0,0) - If the
pNext
chain includesRenderPassTransformBeginInfoQCOM
,renderArea.extent
transformed byRenderPassTransformBeginInfoQCOM
::transform
must equal theframebuffer
dimensions - If the
perViewRenderAreaCount
member of aMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM
structure included in thepNext
chain is not0
, then the multiviewPerViewRenderAreas feature must be enabled. - If the
perViewRenderAreaCount
member of aMultiviewPerViewRenderAreasRenderPassBeginInfoQCOM
structure included in thepNext
chain is not0
, thenrenderArea
must specify a render area that includes the union of all per view render areas.
Valid Usage (Implicit)
-
sType
must beSTRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
- Each
pNext
member of any structure (including this one) in thepNext
chain must be eitherNULL
or a pointer to a valid instance ofDeviceGroupRenderPassBeginInfo
,MultiviewPerViewRenderAreasRenderPassBeginInfoQCOM
,RenderPassAttachmentBeginInfo
,RenderPassSampleLocationsBeginInfoEXT
, orRenderPassTransformBeginInfoQCOM
- The
sType
value of each struct in thepNext
chain must be unique -
renderPass
must be a validRenderPass
handle -
framebuffer
must be a validFramebuffer
handle - Both of
framebuffer
, andrenderPass
must have been created, allocated, or retrieved from the sameDevice
See Also
VK_VERSION_1_0,
ClearValue
, Framebuffer
,
Rect2D
,
RenderPass
,
StructureType
, cmdBeginRenderPass
,
cmdBeginRenderPass2
,
cmdBeginRenderPass2KHR
RenderPassBeginInfo | |
|
Instances
data ClearDepthStencilValue Source #
VkClearDepthStencilValue - Structure specifying a clear depth stencil value
Valid Usage
- Unless the
VK_EXT_depth_range_unrestricted
extension is enableddepth
must be between0.0
and1.0
, inclusive
See Also
ClearDepthStencilValue | |
|
Instances
data ClearAttachment Source #
VkClearAttachment - Structure specifying a clear attachment
Valid Usage
- If
aspectMask
includesIMAGE_ASPECT_COLOR_BIT
, it must not includeIMAGE_ASPECT_DEPTH_BIT
orIMAGE_ASPECT_STENCIL_BIT
-
aspectMask
must not includeIMAGE_ASPECT_METADATA_BIT
-
aspectMask
must not includeVK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT
for any index i
Valid Usage (Implicit)
-
aspectMask
must be a valid combination ofImageAspectFlagBits
values
See Also
VK_VERSION_1_0,
ClearValue
,
ImageAspectFlags
,
cmdClearAttachments
ClearAttachment | |
|
Instances
Show ClearAttachment Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding showsPrec :: Int -> ClearAttachment -> ShowS # show :: ClearAttachment -> String # showList :: [ClearAttachment] -> ShowS # | |
ToCStruct ClearAttachment Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding 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 |
data ClearColorValue Source #
Instances
Show ClearColorValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding showsPrec :: Int -> ClearColorValue -> ShowS # show :: ClearColorValue -> String # showList :: [ClearColorValue] -> ShowS # | |
ToCStruct ClearColorValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding 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 |
data ClearValue Source #
Instances
Show ClearValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding showsPrec :: Int -> ClearValue -> ShowS # show :: ClearValue -> String # showList :: [ClearValue] -> ShowS # | |
ToCStruct ClearValue Source # | |
Defined in Vulkan.Core10.CommandBufferBuilding 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 zero :: ClearValue Source # |
VkIndexType - Type of index buffer indices
See Also
VK_VERSION_1_0,
AccelerationStructureGeometryTrianglesDataKHR
,
AccelerationStructureTrianglesDisplacementMicromapNV
,
AccelerationStructureTrianglesOpacityMicromapEXT
,
BindIndexBufferIndirectCommandNV
,
GeometryTrianglesNV
,
IndirectCommandsLayoutTokenNV
,
cmdBindIndexBuffer
,
cmdBindIndexBuffer2KHR
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 # | |
Defined in Vulkan.Core10.Enums.IndexType | |
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
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
pattern STENCIL_FACE_FRONT_BIT :: StencilFaceFlagBits |
|
pattern STENCIL_FACE_BACK_BIT :: StencilFaceFlagBits |
|
pattern STENCIL_FACE_FRONT_AND_BACK :: StencilFaceFlagBits |
|