| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count
Synopsis
- cmdDrawIndirectCount :: forall io. MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
- cmdDrawIndexedIndirectCount :: forall io. MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
Documentation
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> Buffer |
|
| -> ("offset" ::: DeviceSize) |
|
| -> ("countBuffer" ::: Buffer) |
|
| -> ("countBufferOffset" ::: DeviceSize) |
|
| -> ("maxDrawCount" ::: Word32) |
|
| -> ("stride" ::: Word32) |
|
| -> io () |
vkCmdDrawIndirectCount - Draw primitives with indirect parameters and draw count
Description
cmdDrawIndirectCount behaves similarly to
cmdDrawIndirect except that the
draw count is read by the device from a buffer during execution. The
command will read an unsigned 32-bit integer from countBuffer located
at countBufferOffset and use this as the draw count.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For each set n that is
statically used by the
Pipelinebound to the pipeline bind point used by this command, a descriptor set must have been bound to n at the same pipeline bind point, with aPipelineLayoutthat is compatible for set n, with thePipelineLayoutused to create the currentPipeline, as described in ??? - For each push constant that
is statically used by the
Pipelinebound to the pipeline bind point used by this command, a push constant value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants, with thePipelineLayoutused to create the currentPipeline, as described in ??? - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command - A valid pipeline must be bound to the pipeline bind point used by this command
- If the
Pipelineobject bound to the pipeline bind point used by this command requires any dynamic state, that state must have been set or inherited forcommandBuffer, and done so after any previously bound pipeline with the corresponding state not specified as dynamic - There must not have been
any calls to dynamic state setting commands for any state not
specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If the
robust buffer access
feature is not enabled, and if the
Pipelineobject bound 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 the
robust buffer access
feature is not enabled, and if the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If
commandBufferis an unprotected command buffer, any resource accessed by thePipelineobject bound to the pipeline bind point used by this command must not be a protected resource - If a
ImageViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format. - If a
BufferViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s format. - If a
ImageViewwith aFormatthat has a 64-bit channel width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64. - If a
ImageViewwith aFormatthat has a channel width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32. - If a
BufferViewwith aFormatthat has a 64-bit channel width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64. - If a
BufferViewwith aFormatthat has a channel width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32. - If the
sparseImageInt64Atomics
feature is not enabled,
Imageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command. - If the
sparseImageInt64Atomics
feature is not enabled,
Bufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command. - The current render
pass must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index of the
current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - Every input attachment used by the current subpass must be bound to the pipeline via a descriptor set
- Image subresources used as attachments in the current render pass must not be accessed in any way other than as an attachment by this command, except for cases involving read-only access to depth/stencil attachments as described in the Render Pass chapter
- If the
draw is recorded in a render pass instance with multiview enabled,
the maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If the
bound graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNT_EXTdynamic state enabled, thencmdSetViewportWithCountEXTmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountEXTmust match thePipelineViewportStateCreateInfo::scissorCountof the pipeline - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, thencmdSetScissorWithCountEXTmust have been called in the current command buffer prior to this drawing command, and thescissorCountparameter ofcmdSetScissorWithCountEXTmust match thePipelineViewportStateCreateInfo::viewportCountof the pipeline - If the bound
graphics pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXTandDYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic states enabled then bothcmdSetViewportWithCountEXTandcmdSetScissorWithCountEXTmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountEXTmust match thescissorCountparameter ofcmdSetScissorWithCountEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled and an instance ofPipelineViewportSwizzleStateCreateInfoNVchained fromVkPipelineVieportCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled and an instance ofPipelineViewportExclusiveScissorStateCreateInfoNVchained fromVkPipelineVieportCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXTdynamic state enabled thencmdSetPrimitiveTopologyEXTmust have been called in the current command buffer prior to this drawing command, and theprimitiveTopologyparameter ofcmdSetPrimitiveTopologyEXTmust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled thencmdSetPatchControlPointsEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXTdynamic state enabled thencmdSetRasterizerDiscardEnableEXTmust have 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_EXTdynamic state enabled thencmdSetDepthBiasEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXTdynamic state enabled thencmdSetPrimitiveRestartEnableEXTmust have been called in the current command buffer prior to this drawing command -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountEXTmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountEXTmust be1 - If rasterization is
not disabled in the bound graphics pipeline, then for each color
attachment in the subpass, if the corresponding image view’s
format features
do not contain
FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then theblendEnablemember of the corresponding element of thepAttachmentsmember ofpColorBlendStatemust beFALSE - If
rasterization is not disabled in the bound graphics pipeline, and
neither the @
nor theextensions are enabled, thenrasterizationSamples@ must be the same as the current subpass color and/or depth/stencil attachmentsPipelineMultisampleStateCreateInfo:: - If the bound graphics
pipeline was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXTandDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic states enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound graphics
pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2EXTmust have been called in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2EXTmust not beNULL - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - All vertex input bindings
accessed via vertex input variables declared in the vertex shader
entry point’s interface must have either valid or
NULL_HANDLEbuffers bound - If the
nullDescriptor
feature is not enabled, all vertex input bindings accessed via
vertex input variables declared in the vertex shader entry point’s
interface must not be
NULL_HANDLE - For a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ???
- If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITbit set -
offsetmust be a multiple of4 -
commandBuffermust not be a protected command buffer - If
countBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
countBuffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITbit set -
countBufferOffsetmust be a multiple of4 - The count stored in
countBuffermust be less than or equal toPhysicalDeviceLimits::maxDrawIndirectCount -
(
countBufferOffset+sizeof(uint32_t)) must be less than or equal to the size ofcountBuffer - If drawIndirectCount is not enabled this function must not be used
-
stridemust be a multiple of4and must be greater than or equal to sizeof(DrawIndirectCommand) - If
maxDrawCountis greater than or equal to1, (stride× (maxDrawCount- 1) +offset+ sizeof(DrawIndirectCommand)) must be less than or equal to the size ofbuffer - If the count stored
in
countBufferis equal to1, (offset+ sizeof(DrawIndirectCommand)) must be less than or equal to the size ofbuffer - If the count stored
in
countBufferis greater than1, (stride× (drawCount- 1) +offset+ sizeof(DrawIndirectCommand)) must be less than or equal to the size ofbuffer
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
buffermust be a validBufferhandle -
countBuffermust be a validBufferhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called inside of a render pass instance
- Each of
buffer,commandBuffer, andcountBuffermust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Supported Queue Types |
|---|---|---|
| Primary Secondary | Inside | Graphics |
See Also
cmdDrawIndexedIndirectCount Source #
Arguments
| :: forall io. MonadIO io | |
| => CommandBuffer |
|
| -> Buffer |
|
| -> ("offset" ::: DeviceSize) |
|
| -> ("countBuffer" ::: Buffer) |
|
| -> ("countBufferOffset" ::: DeviceSize) |
|
| -> ("maxDrawCount" ::: Word32) |
|
| -> ("stride" ::: Word32) |
|
| -> io () |
vkCmdDrawIndexedIndirectCount - Draw parameters with indirect parameters, indexed vertices, and draw count
Description
cmdDrawIndexedIndirectCount behaves similarly to
cmdDrawIndexedIndirect except that
the draw count is read by the device from a buffer during execution. The
command will read an unsigned 32-bit integer from countBuffer located
at countBufferOffset and use this as the draw count.
Valid Usage
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For each set n
that is statically used by the
Pipelinebound to the pipeline bind point used by this command, a descriptor set must have been bound to n at the same pipeline bind point, with aPipelineLayoutthat is compatible for set n, with thePipelineLayoutused to create the currentPipeline, as described in ??? - For each push
constant that is statically used by the
Pipelinebound to the pipeline bind point used by this command, a push constant value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants, with thePipelineLayoutused to create the currentPipeline, as described in ??? - Descriptors in each
bound descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are statically used by thePipelinebound to the pipeline bind point used by this command - A valid pipeline must be bound to the pipeline bind point used by this command
- If the
Pipelineobject bound to the pipeline bind point used by this command requires any dynamic state, that state must have been set or inherited forcommandBuffer, and done so after any previously bound pipeline with the corresponding state not specified as dynamic - There must not
have been any calls to dynamic state setting commands for any state
not specified as dynamic in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used to sample from anyImagewith aImageViewof the typeIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE,IMAGE_VIEW_TYPE_1D_ARRAY,IMAGE_VIEW_TYPE_2D_ARRAYorIMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name, in any shader stage - If the
Pipelineobject bound to the pipeline bind point used by this command accesses aSamplerobject that uses unnormalized coordinates, that sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values, in any shader stage - If the
robust buffer access
feature is not enabled, and if the
Pipelineobject bound 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 the
robust buffer access
feature is not enabled, and if the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If
commandBufferis an unprotected command buffer, any resource accessed by thePipelineobject bound to the pipeline bind point used by this command must not be a protected resource - If a
ImageViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format. - If a
BufferViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s format. - If a
ImageViewwith aFormatthat has a 64-bit channel width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64. - If a
ImageViewwith aFormatthat has a channel width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32. - If a
BufferViewwith aFormatthat has a 64-bit channel width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64. - If a
BufferViewwith aFormatthat has a channel width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32. -
If the
sparseImageInt64Atomics
feature is not enabled,
Imageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command. -
If the
sparseImageInt64Atomics
feature is not enabled,
Bufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command. - The current
render pass must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index
of the current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - Every input attachment used by the current subpass must be bound to the pipeline via a descriptor set
- Image subresources used as attachments in the current render pass must not be accessed in any way other than as an attachment by this command, except for cases involving read-only access to depth/stencil attachments as described in the Render Pass chapter
-
If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If
the bound graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUEand the current subpass has a depth/stencil attachment, then that attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_SCISSOR_WITH_COUNT_EXTdynamic state enabled, thencmdSetViewportWithCountEXTmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountEXTmust match thePipelineViewportStateCreateInfo::scissorCountof the pipeline - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, thencmdSetScissorWithCountEXTmust have been called in the current command buffer prior to this drawing command, and thescissorCountparameter ofcmdSetScissorWithCountEXTmust match thePipelineViewportStateCreateInfo::viewportCountof the pipeline - If the
bound graphics pipeline state was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXTandDYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic states enabled then bothcmdSetViewportWithCountEXTandcmdSetScissorWithCountEXTmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountEXTmust match thescissorCountparameter ofcmdSetScissorWithCountEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled and an instance ofPipelineViewportSwizzleStateCreateInfoNVchained fromVkPipelineVieportCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled and an instance ofPipelineViewportExclusiveScissorStateCreateInfoNVchained fromVkPipelineVieportCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCountEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXTdynamic state enabled thencmdSetPrimitiveTopologyEXTmust have been called in the current command buffer prior to this drawing command, and theprimitiveTopologyparameter ofcmdSetPrimitiveTopologyEXTmust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled thencmdSetPatchControlPointsEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXTdynamic state enabled thencmdSetRasterizerDiscardEnableEXTmust have 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_EXTdynamic state enabled thencmdSetDepthBiasEnableEXTmust have been called in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled thencmdSetLogicOpEXTmust have been called in the current command buffer prior to this drawing command and thelogicOpmust be a validLogicOpvalue - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXTdynamic state enabled thencmdSetPrimitiveRestartEnableEXTmust have been called in the current command buffer prior to this drawing command -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountEXTmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountEXTmust be1 - If
rasterization is not disabled in the bound graphics pipeline, then
for each color attachment in the subpass, if the corresponding image
view’s
format features
do not contain
FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then theblendEnablemember of the corresponding element of thepAttachmentsmember ofpColorBlendStatemust beFALSE - If
rasterization is not disabled in the bound graphics pipeline, and
neither the @
nor theextensions are enabled, thenrasterizationSamples@ must be the same as the current subpass color and/or depth/stencil attachmentsPipelineMultisampleStateCreateInfo:: - If the bound
graphics pipeline was created with both the
DYNAMIC_STATE_VERTEX_INPUT_EXTandDYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic states enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - If the bound
graphics pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXTdynamic state enabled, but not theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2EXTmust have been called in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2EXTmust not beNULL - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdSetVertexInputEXTmust have been called in the current command buffer prior to this draw command - All vertex input
bindings accessed via vertex input variables declared in the vertex
shader entry point’s interface must have either valid or
NULL_HANDLEbuffers bound - If the
nullDescriptor
feature is not enabled, all vertex input bindings accessed via
vertex input variables declared in the vertex shader entry point’s
interface must not be
NULL_HANDLE - For a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ???
- If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITbit set -
offsetmust be a multiple of4 -
commandBuffermust not be a protected command buffer - If
countBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
countBuffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITbit set -
countBufferOffsetmust be a multiple of4 - The count
stored in
countBuffermust be less than or equal toPhysicalDeviceLimits::maxDrawIndirectCount -
(
countBufferOffset+sizeof(uint32_t)) must be less than or equal to the size ofcountBuffer - If drawIndirectCount is not enabled this function must not be used
-
stridemust be a multiple of4and must be greater than or equal to sizeof(DrawIndexedIndirectCommand) - If
maxDrawCountis greater than or equal to1, (stride× (maxDrawCount- 1) +offset+ sizeof(DrawIndexedIndirectCommand)) must be less than or equal to the size ofbuffer - If count
stored in
countBufferis equal to1, (offset+ sizeof(DrawIndexedIndirectCommand)) must be less than or equal to the size ofbuffer - If count
stored in
countBufferis greater than1, (stride× (drawCount- 1) +offset+ sizeof(DrawIndexedIndirectCommand)) must be less than or equal to the size ofbuffer
Valid Usage (Implicit)
-
commandBuffermust be a validCommandBufferhandle
-
buffermust be a validBufferhandle -
countBuffermust be a validBufferhandle -
commandBuffermust be in the recording state - The
CommandPoolthatcommandBufferwas allocated from must support graphics operations - This command must only be called inside of a render pass instance
- Each of
buffer,commandBuffer, andcountBuffermust have been created, allocated, or retrieved from the sameDevice
Host Synchronization
- Host access to
commandBuffermust be externally synchronized
- Host access to the
CommandPoolthatcommandBufferwas allocated from must be externally synchronized
Command Properties
'
| Command Buffer Levels | Render Pass Scope | Supported Queue Types |
|---|---|---|
| Primary Secondary | Inside | Graphics |