| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Vulkan.Core12.Promoted_From_VK_KHR_draw_indirect_count
Synopsis
- cmdDrawIndirectCount :: MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
- cmdDrawIndexedIndirectCount :: MonadIO io => CommandBuffer -> Buffer -> ("offset" ::: DeviceSize) -> ("countBuffer" ::: Buffer) -> ("countBufferOffset" ::: DeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> io ()
Documentation
Arguments
| :: 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_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’slevelCountandlayerCountmust be 1 - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’sviewTypemust beIMAGE_VIEW_TYPE_1DorIMAGE_VIEW_TYPE_2D - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For any
ImageViewbeing written as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - For any
ImageViewbeing read as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For any
BufferViewbeing written as a storage texel buffer where the image format field of theOpTypeImageisUnknown, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - Any
BufferViewbeing read as a storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a set n, a descriptor set must have been bound to n at the same pipeline bind point, with aPipelineLayoutthat is compatible for set n, with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT - For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command
- If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT - Descriptors in each bound
descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If an image
descriptor is accessed by a shader, the
ImageLayoutmust match the subresource accessible from theImageViewas defined by the image layout matching rules - If the descriptors used by
the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - If the descriptors used by
the
Pipelinebound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT, the boundPipelinemust have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If a descriptor is
dynamically used with a
Pipelinecreated withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If a descriptor is
dynamically used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If a pipeline is bound to
the pipeline bind point used by this command, there must not have
been any calls to dynamic state setting commands for any state
specified statically in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If any stage of
the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If any stage of
the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageVieworBufferViewis accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format - If a
ImageViewcreated with the formatFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - If a
BufferViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s format - If a
ImageViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
ImageViewwith aFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 - If a
BufferViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
BufferViewwith aFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 - If the
sparseImageInt64Atomics
feature is not enabled,
Imageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - If the
sparseImageInt64Atomics
feature is not enabled,
Bufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command - If
OpImageSampleWeightedQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM - If
OpImageSampleWeightedQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM - If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - If
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If any
command other than
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format - If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
- If a descriptor with type
equal to any of
DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,DESCRIPTOR_TYPE_SAMPLED_IMAGE,DESCRIPTOR_TYPE_STORAGE_IMAGE, orDESCRIPTOR_TYPE_INPUT_ATTACHMENTis accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written - The
DeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object incommandBuffer - If this command is recorded
inside a
tile shading render pass
instance, the stages corresponding to the pipeline bind point used
by this command must only include
SHADER_STAGE_VERTEX_BIT,SHADER_STAGE_FRAGMENT_BIT, and/orSHADER_STAGE_COMPUTE_BIT - If this command is recorded
where
per-tile execution model
is enabled, there must be no access to any image while the image
was be transitioned to the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTlayout - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the underlyingTensorARMobject must have been created with theTENSOR_USAGE_SHADER_BIT_ARMusage flag set - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided viaTensorCreateInfoARM::pDescriptionwhen creating the underlyingTensorARMobject - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with theFormatof theTensorViewARMused for the access - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddress - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validDeviceAddress - For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound
- If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified viaDeviceAddressRangeEXTwhen the descriptor was written - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified byDeviceAddressRangeEXTwhen the descriptor was written - If the
robustBufferAccess2
feature is not enabled, the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified byDeviceAddressRangeEXTwhen the descriptor was written - If any
bound shader
uses an embedded sampler via a
descriptor mapping,
the value of
pBindInfo->reservedRangeSizeset forcmdBindSamplerHeapEXTmust be greater than or equal to minSamplerHeapReservedRangeWithEmbedded - If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set bycmdPushDataEXT - If a
bound shader
was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned to minUniformBufferOffsetAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_STORAGE_BUFFER_BITusage flag set - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned to minStorageBufferOffsetAlignment - If a pipeline is bound to
the pipeline bind point used by this command, or shader is bound to
a shader stage used by this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from aAccelerationStructureKHRobject viagetAccelerationStructureDeviceAddressKHRor handle retrieved from aAccelerationStructureNVobject viagetAccelerationStructureHandleNV - If a shader uses a sampler
descriptor to sample an image as a result of this command, and that
sampler descriptor uses a custom border color with an index defined
by
SamplerCustomBorderColorIndexCreateInfoEXT, the value ofSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - The current render
pass must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index of the
current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - If any shader
executed by this pipeline accesses an
OpTypeImagevariable with aDimoperand ofSubpassData, it must be decorated with anInputAttachmentIndexthat corresponds to a valid input attachment in the current subpass - Input attachment views
accessed in a subpass must be created with the same
Formatas the corresponding subpass definition, and be created with aImageViewthat is compatible with the attachment referenced by the subpass'pInputAttachments[InputAttachmentIndex] in the boundFramebufferas specified by Fragment Input Attachment Compatibility - Input
attachment views accessed in a dynamic render pass with a
InputAttachmentIndexreferenced byRenderingInputAttachmentIndexInfo, or noInputAttachmentIndexifRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexorRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexareNULL, must be created with aImageViewthat is compatible with the corresponding color, depth, or stencil attachment inRenderingInfo - Input
attachment views accessed in a dynamic render pass via a shader
object must have an
InputAttachmentIndexif bothRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexandRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexare non-NULL - If an input
attachment view accessed in a dynamic render pass via a shader
object has an
InputAttachmentIndex, theInputAttachmentIndexmust match an index inRenderingInputAttachmentIndexInfo - Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command
- If a color attachment is
written by any prior command in this subpass or by the load, store,
or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a depth attachment is
written by any prior command in this subpass or by the load, store,
or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a stencil attachment is
written by any prior command in this subpass or by the load, store,
or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a color attachment is
read in this command in any way other than as an attachment, or has
been read by any prior command in this subpass as a non-attachment,
and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, the color attachment must not be written to by this command - If a depth attachment is
read in this command in any way other than as an attachment, or has
been read by any prior command in this subpass as a non-attachment,
and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, the depth attachment must not be written to by this command - If a stencil attachment is
read in this command in any way other than as an attachment, or has
been read by any prior command in this subpass as a non-attachment,
and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, the stencil attachment must not be written to by this command - If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command
- If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled
- If the current render pass
instance uses a depth/stencil attachment with a read-only layout
for the stencil aspect, both front and back
writeMaskare not zero, and stencil test is enabled, all stencil ops must beSTENCIL_OP_KEEP - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_VIEWPORTdynamic state enabled thencmdSetViewportmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SCISSORdynamic state enabled thencmdSetScissormust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBiasEnableisTRUE, thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUEwith a blend equations where anyBlendFactormember isBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, thencmdSetBlendConstantsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBoundsTestEnableisTRUE, thencmdSetDepthBoundsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilCompareMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilWriteMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, the current value of andrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilReferencemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
draw is recorded in a render pass instance with multiview enabled,
the maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If the
bound graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUE, then the active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleLocationsEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofsampleLocationsEnableisTRUE, thencmdSetSampleLocationsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_CULL_MODEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCullModemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFrontFacemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE,cmdSetDepthTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthWriteEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthCompareOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthBounds
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBoundsTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetStencilTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetViewportWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetScissorWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled, and the state is not inherited, then theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, thencmdSetViewportWScalingNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NVand the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoarseSampleOrderNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled, thencmdSetExclusiveScissorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled, and the most recent call tocmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled, thencmdSetRasterizerDiscardEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBiasEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is
bound to the
SHADER_STAGE_FRAGMENT_BITor a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value oflogicOpEnableisTRUE, thencmdSetLogicOpEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 - If a shader object
is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, then for each color attachment, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value ofblendEnablemust beFALSE If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of
rasterizerDiscardEnableisFALSE, and none of the following is enabled:- the
VK_AMD_mixed_attachment_samplesextension - the
VK_NV_framebuffer_mixed_samplesextension - the multisampledRenderToSingleSampled feature
then the current value of
rasterizationSamplesmust be the same as the current color and/or depth/stencil attachments- the
- If a shader object is bound
to any graphics stage, the current render pass instance must have
been begun with
cmdBeginRendering - If the current render
pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the current render
pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current render
pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment - If the current render
pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current render
pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the current render
pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current render
pass instance was begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount -
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline -
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED -
If the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering, with aRenderingInfo::colorAttachmentCountequal to1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If there is no shader
object bound to any graphics stage, the current render pass instance
was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, thencmdSetColorBlendEnableEXTmust have set the blend enable toFALSEprior to this drawing command - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If there is a shader object
bound to any graphics stage, and the current render pass includes a
color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetColorBlendEnableEXTmust have set blend enable toFALSEprior to this drawing command - If there is
a shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If the current render pass
instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If there is a
shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If there is a
shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorWriteEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of active color attachments - If the
VK_EXT_discard_rectanglesextension is enabled, a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfoincluded aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created withDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfodid not include aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED -
If current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView, the value of the format must beFORMAT_UNDEFINED -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED -
If current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If the current render
pass instance was begun with
cmdBeginRenderingandRenderingFragmentShadingRateAttachmentInfoKHR::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR - If the
current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingLocalRead feature is enabled, theRENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHRflag is specified, and an attachment is being used as a feedback loop as specified by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#rendering-attachment-input-attachment-feedback,RenderingAttachmentFlagsInfoKHR::flagsfor that attachment must includeRENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR - If the current render
pass instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the current render
pass instance was created with
RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVEorRENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created withPIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have alayersvalue less than or equal toPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers - If the
bound pipeline was created with a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the corresponding element of thepColorAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline - If the current
render pass instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If the
current render pass instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the value ofrasterizationSamplesfor the bound graphics pipeline -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command is called
inside a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current render
pass instance was begun with
cmdBeginRendering, the bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->imageViewwas notNULL_HANDLE, then the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->resolveImageViewwas notNULL_HANDLE, then the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current render pass
instance was begun with a
cmdBeginRenderingcall incommandBuffer, itsRenderingInfo::flagsparameter must not haveRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BITset unlessRENDERING_CONTENTS_INLINE_BIT_KHRis also set -
If the
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, the bound graphics pipeline must not have been created with a non-zero value inPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream - If the
depthClamp
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthClampEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetPolygonModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRasterizationSamplesEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, andalphaToCoverageEnablewasTRUEin the last call tocmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a
shader object is bound to any graphics stage, and the most recent
call to
cmdSetAlphaToCoverageEnableEXTin the current command buffer setalphaToCoverageEnabletoTRUE, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToOneEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetLogicOpEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorBlendEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorWriteMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_GEOMETRY_BITstage and theDYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled, thencmdSetRasterizationStreamEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofconservativeRasterizationModeisCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
VK_EXT_conservative_rasterizationextension is enabled, conservativePointAndLineRasterization is not supported, a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line or point topology class, then the current value ofconservativeRasterizationModemust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state, thencmdSetDepthClipEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, a shader object is bound to theSHADER_STAGE_VERTEX_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetProvokingVertexModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled and a shader object is bound to any graphics
stage, or a bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLEdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstippledLineEnableisTRUE, thencmdSetLineStipplemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object is bound
to any graphics stage or a graphics pipeline is bound which was
created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, the effective rasterization input topology is in line topology class, and the currentlineRasterizationModeisLINE_RASTERIZATION_MODE_BRESENHAMorLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the currentalphaToCoverageEnable,alphaToOneEnableandsampleShadingEnablestates must all beFALSE - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled, thencmdSetDepthClipNegativeOneToOneEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClampControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXTdynamic state enabled, and the current value ofdepthClampEnableisTRUE, thencmdSetDepthClampRangeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled, thencmdSetViewportWScalingEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, thencmdSetViewportSwizzleNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageToColorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageToColorEnableisTRUE, thencmdSetCoverageToColorLocationNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageModulationModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationModeis any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationTableEnableisTRUE, thencmdSetCoverageModulationTableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetShadingRateImageEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If
the
pipelineFragmentShadingRate
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFragmentShadingRateKHRmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageReductionModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust follow the rules for a zero-attachment subpass - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to thePipelineMultisampleStateCreateInfo::rasterizationSamplesparameter used to create the bound graphics pipeline - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to therasterizationSamplesparameter in the last call tocmdSetRasterizationSamplesEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither theVK_AMD_mixed_attachment_samplesnor theVK_NV_framebuffer_mixed_samplesextensions are enabled, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as the current subpass color and/or depth/stencil attachments - If the bound graphics
pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as therasterizationSamplesmember of that structure - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorBlendEnableEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorWriteMaskEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUE, then the number of active color attachments must not exceed advancedBlendMaxColorAttachments - If a graphics pipeline is
bound was created with
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a
graphics pipeline is bound was created with
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendAdvancedEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a shader object is bound
to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created withDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then eithercmdSetColorBlendAdvancedEXTorcmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXTstate enabled, the last call tocmdSetRasterizationStreamEXTmust have set therasterizationStreamto zero - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesmember of thePipelineMultisampleStateCreateInfostructure the bound graphics pipeline has been created with - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, andsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXTthen the current active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instructionInterpolateAtSample - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationsPerPixelmust equalrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If
a shader object is bound to any graphics stage or the bound graphics
pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVstate enabled, and the last call tocmdSetCoverageModulationTableEnableNVsetcoverageModulationTableEnabletoTRUE, then thecoverageModulationTableCountparameter in the last call tocmdSetCoverageModulationTableNVmust equal the currentrasterizationSamplesdivided by the number of color samples in the current active color attachment - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the currentrasterizationSamplesmust be the same as the sample count of the depth/stencil attachment - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVstate enabled and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then there must be an active color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If the
VK_NV_fragment_coverage_to_colorextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then there must be an active color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVorDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic states enabled, then the current values ofcoverageReductionMode,rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned bygetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, and the coverageReductionMode feature is not enabled, or the current value ofcoverageReductionModeis notCOVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value ofrasterizationSamplesis greater than sample count of the color attachment, then sample shading must be disabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE - If the bound pipeline was
created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_VERTEX_BIT,SHADER_STAGE_TESSELLATION_CONTROL_BIT,SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active - If a shader object is bound
to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If dynamic state was
inherited from
CommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command - For each shader object
bound to a graphics stage, except for shader object bound to the
last graphics stage in the logical pipeline, it must have been
created with a
nextStageincluding the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline - If there is no bound
graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_VERTEX_BIT - If there is no bound
graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT - If there is no bound
graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT - If there is no bound
graphics pipeline, and the
geometryShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_GEOMETRY_BIT - If there is no bound
graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_FRAGMENT_BIT - If there is no bound
graphics pipeline, and the
taskShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TASK_BIT_EXT - If there is no bound
graphics pipeline, and the
meshShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_MESH_BIT_EXT - If there is no bound
graphics pipeline, and at least one of the
taskShader
and
meshShader
features is enabled, one of the
SHADER_STAGE_VERTEX_BITorSHADER_STAGE_MESH_BIT_EXTstages must have a validShaderEXTbound, and the other must have noShaderEXTbound - If there is no bound
graphics pipeline, and a valid
ShaderEXTis bound to theSHADER_STAGE_VERTEX_BITstage, there must be noShaderEXTbound to either theSHADER_STAGE_TASK_BIT_EXTstage or theSHADER_STAGE_MESH_BIT_EXTstage - If any graphics shader is
bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag in the samecreateShadersEXTcall must also be bound - If any graphics shader is
bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag as part of the samecreateShadersEXTcall must not have anyShaderEXTbound - All bound graphics shader objects must have been created with identical or identically defined push constant ranges
- All bound graphics shader
objects must have either been created with the
SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag set, or with identical or identically defined arrays of descriptor set layouts - If the
current render pass instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the bound
graphics pipeline state includes a fragment shader stage, was
created with
DYNAMIC_STATE_DEPTH_WRITE_ENABLEset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpDepthAttachmentReadEXT, thedepthWriteEnableparameter in the last call tocmdSetDepthWriteEnablemust beFALSE - If the bound
graphics pipeline state includes a fragment shader stage, was
created with
DYNAMIC_STATE_STENCIL_WRITE_MASKset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpStencilAttachmentReadEXT, thewriteMaskparameter in the last call tocmdSetStencilWriteMaskmust be0 - If a shader object is bound
to any graphics stage or the bound graphics pipeline was created
with
DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment isFORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of thepColorWriteMasksparameter ofcmdSetColorWriteMaskEXTmust either include all ofCOLOR_COMPONENT_R_BIT,COLOR_COMPONENT_G_BIT, andCOLOR_COMPONENT_B_BIT, or none of them - If
blending
is enabled for any attachment where either the source or destination
blend factors for that attachment
use the secondary color input,
the maximum value of
Locationfor any output attachment statically used in theFragmentExecutionModelexecuted by this command must be less than maxFragmentDualSrcAttachments - If the current render pass
was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, the value of each element ofRenderingAttachmentLocationInfo::pColorAttachmentLocationsin the bound pipeline must match the value for the corresponding locations set currently in the current render pass instance - If the current render pass
was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element ofRenderingInputAttachmentIndexInfo::pColorAttachmentInputIndicesin the bound pipeline must match the value for the corresponding index set currently in the current render pass instance - If the current render pass
was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render pass
was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current render pass
was begun with
cmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag, the bound graphics pipeline must have been created withPIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT - If the bound graphics
pipeline was created with
PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun withcmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag - If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled
- If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass
- If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofviewportCount - If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofscissorCount - If current render pass
instance was begun with
cmdBeginRenderingwithRenderingInfo::flagswhich includesRENDERING_FRAGMENT_REGION_BIT_EXT, and if sample shading is enabled (explicitly or implicitly), then the minimum fraction for sample shading must equal 0.0 - If the current render pass
instance was begun with
cmdBeginRenderingand contains a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must have been created with aCustomResolveCreateInfoEXT - If the current render pass
instance was begun with
cmdBeginRenderingand does not contain a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must not have been created with aCustomResolveCreateInfoEXT - If the current
render pass instance was begun with
cmdBeginRenderingandcmdBeginCustomResolveEXThas been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If the current
render pass instance was begun with
cmdBeginRenderingand contains a custom resolve, andcmdBeginCustomResolveEXThas not been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, the bound graphics pipeline must have been created with aCustomResolveCreateInfoEXT::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewequal toNULL_HANDLEmust have the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED -
If the
dynamicRenderingUnusedAttachments
feature is enabled, the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView -
If the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render pass
instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView -
If the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0andcmdBeginCustomResolveEXThas been recorded in the render pass instance, then for each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLE, theresolveImageViewmust have been created with a sample count equal to the value ofrasterizationSamplesfor the bound graphics pipeline - If the current
render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->resolveImageView - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->resolveImageView - If a shader object
is bound to the fragment stage, the current render pass instance was
begun with
cmdBeginRendering, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If a shader object
is bound to the fragment stage, the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas not yet been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - All vertex input bindings
accessed via vertex input variables declared in the vertex shader
entry point’s interface must have either valid or
NULL_HANDLEbuffers bound - If the
nullDescriptor
feature is not enabled, all vertex input bindings accessed via
vertex input variables declared in the vertex shader entry point’s
interface must not be
NULL_HANDLE - If the
robustBufferAccess
feature is not enabled, and that pipeline was created without
enabling
PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSforvertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ??? - For each vertex attribute
accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis a packed format, and the legacyVertexAttributes feature is not enabled, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format - For each vertex attribute
accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis not a packed format, and either the legacyVertexAttributes feature is not enabled orformathas 64-bit components, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGYdynamic state enabled thencmdSetPrimitiveTopologymust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_TOPOLOGYdynamic state enabled and the dynamicPrimitiveTopologyUnrestricted isFALSE, then theprimitiveTopologyparameter ofcmdSetPrimitiveTopologymust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - If a
SHADER_STAGE_TESSELLATION_CONTROL_BITstage is bound, then the current value ofprimitiveTopologymust bePRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command, then aSHADER_STAGE_TESSELLATION_CONTROL_BITstage must be bound - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_POINT_LISTprior to this drawing command, the maintenance5 feature is not enabled, both aSHADER_STAGE_TESSELLATION_EVALUATION_BITandSHADER_STAGE_GEOMETRY_BITstage are not bound, then theVertexExecutionModelmust have aPointSizedecorated variable that is statically written to - If the bound graphics
pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDEdynamic state enabled, but without theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2must not beNULL - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled thencmdSetVertexInputEXTmust have been called and not subsequently invalidated in the current command buffer prior to this draw command - If the
vertexAttributeRobustness
feature is not enabled, and the
maintenance9
feature is not enabled, and there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled then all variables with theInputstorage class decorated withLocationin theVertexExecutionModelOpEntryPointmust contain a location inVertexInputAttributeDescription2EXT::location - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a givenInputvariable of the correspondingLocationin theVertexExecutionModelOpEntryPointis 64-bit, then the numeric type associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be the same asVertexInputAttributeDescription2EXT::format - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then the scalar width associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be 64-bit - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and the scalar width associated with aLocationdecoratedInputvariable in theVertexExecutionModelOpEntryPointis 64-bit, then the correspondingVertexInputAttributeDescription2EXT::formatmust have a 64-bit component - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then allInputvariables at the correspondingLocationin theVertexExecutionModelOpEntryPointmust not use components that are not present in the format - If there is a shader object
bound to the
SHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with both aSHADER_STAGE_TESSELLATION_CONTROL_BITstage and theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled, and the current value ofprimitiveTopologyisPRIMITIVE_TOPOLOGY_PATCH_LIST, thencmdSetPatchControlPointsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If there is a shader object
bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
primitiveTopologyListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_POINT_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST,PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, orPRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to theSHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled, thencmdSetPrimitiveRestartEnablemust beFALSE - If the
primitiveTopologyPatchListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_PATCH_LIST, there is a shader object bound to theSHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust beFALSE - The bound graphics
pipeline must not have been created with the
PipelineShaderStageCreateInfo::stagemember of any element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no shader
object bound to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages - If a shader object is bound
to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_TESSELLATION_EVALUATION_BITstage and theDYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled, thencmdSetTessellationDomainOriginEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader is
bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the type of subdivision, they must be the same - If a shader is
bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the orientation of triangles, they must be the same - If a shader is
bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the segment spacing, they must be the same - If a shader is
bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the output patch size, they must be the same - If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITusage flag set -
offsetmust be a multiple of4 -
commandBuffermust not be a protected command buffer - If
countBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
countBuffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITusage flag 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 the drawIndirectCount feature 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
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 supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
- 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 | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Inside | Outside | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdDrawIndirectCount is affected by conditional rendering
See Also
VK_AMD_draw_indirect_count,
VK_KHR_draw_indirect_count,
VK_VERSION_1_2,
Buffer, CommandBuffer,
DeviceSize
cmdDrawIndexedIndirectCount Source #
Arguments
| :: 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_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
- If a
Samplercreated withmagFilterorminFilterequal toFILTER_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEAR,reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, andcompareEnableequal toFALSEis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT - If a
Samplercreated withmipmapModeequal toSAMPLER_MIPMAP_MODE_LINEARandreductionModeequal to eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT -
If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’slevelCountandlayerCountmust be 1 - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the image view’sviewTypemust beIMAGE_VIEW_TYPE_1DorIMAGE_VIEW_TYPE_2D - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions withImplicitLod,DreforProjin their name - If a
Samplercreated withunnormalizedCoordinatesequal toTRUEis used to sample aImageViewas a result of this command, then the sampler must not be used with any of the SPIR-VOpImageSample*orOpImageSparseSample*instructions that includes a LOD bias or any offset values - If a
ImageViewis sampled with depth comparison, the image view’s format features must containFORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT - If a
ImageViewis accessed using atomic operations as a result of this command, then the image view’s format features must containFORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT - If a
DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFERdescriptor is accessed using atomic operations as a result of this command, then the storage texel buffer’s format features must containFORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT - If a
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, then the image view’s format features must containFORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT - If the
VK_EXT_filter_cubic
extension is not enabled and any
ImageViewis sampled withFILTER_CUBIC_EXTas a result of this command, it must not have aImageViewTypeofIMAGE_VIEW_TYPE_3D,IMAGE_VIEW_TYPE_CUBE, orIMAGE_VIEW_TYPE_CUBE_ARRAY - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must have aImageViewTypeand format that supports cubic filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicreturned bygetPhysicalDeviceImageFormatProperties2 - Any
ImageViewbeing sampled withFILTER_CUBIC_EXTwith a reduction mode of eitherSAMPLER_REDUCTION_MODE_MINorSAMPLER_REDUCTION_MODE_MAXas a result of this command must have aImageViewTypeand format that supports cubic filtering together with minmax filtering, as specified byFilterCubicImageViewImageFormatPropertiesEXT::filterCubicMinmaxreturned bygetPhysicalDeviceImageFormatProperties2 - If the
cubicRangeClamp
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must not have aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM - Any
ImageViewbeing sampled with aSamplerReductionModeCreateInfo::reductionModeequal toSAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOMas a result of this command must sample withFILTER_CUBIC_EXT - If
the
selectableCubicWeights
feature is not enabled, then any
ImageViewbeing sampled withFILTER_CUBIC_EXTas a result of this command must haveSamplerCubicWeightsCreateInfoQCOM::cubicWeightsequal toCUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM - Any
Imagecreated with aImageCreateInfo::flagscontainingIMAGE_CREATE_CORNER_SAMPLED_BIT_NVsampled as a result of this command must only be sampled using aSamplerAddressModeofSAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE - For any
ImageViewbeing written as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - For any
ImageViewbeing read as a storage image where the image format field of theOpTypeImageisUnknown, the view’s format features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - For any
BufferViewbeing written as a storage texel buffer where the image format field of theOpTypeImageisUnknown, the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT - Any
BufferViewbeing read as a storage texel buffer where the image format field of theOpTypeImageisUnknownthen the view’s buffer features must containFORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a set n, a descriptor set must have been bound to n at the same pipeline bind point, with aPipelineLayoutthat is compatible for set n, with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT, as described in ??? - If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutarray used to create the currentShaderEXT - For each array of resources that is used by a bound shader, the indices used to access members of the array must be less than the descriptor count for the identified binding in the descriptor sets used by this command
- If a
a bound shader
was created as a
ShaderEXTwithout theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline without thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set for the same pipeline bind point, with aPipelineLayoutthat is compatible for push constants with thePipelineLayoutused to create the currentPipelineor theDescriptorSetLayoutandPushConstantRangearrays used to create the currentShaderEXT - Descriptors in each
bound descriptor set, specified via
cmdBindDescriptorSets, must be valid if they are accessed as described by descriptor validity by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas not created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If an image
descriptor is accessed by a shader, the
ImageLayoutmust match the subresource accessible from theImageViewas defined by the image layout matching rules - If the descriptors
used by the
Pipelinebound to the pipeline bind point were specified viacmdBindDescriptorSets, the boundPipelinemust have been created withoutPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by thePipelinebound to the pipeline bind point used by this command and the boundPipelinewas created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - Descriptors in bound
descriptor buffers, specified via
cmdSetDescriptorBufferOffsetsEXT, must be valid if they are dynamically used by anyShaderEXTbound to a stage corresponding to the pipeline bind point used by this command - If the descriptors
used by the
Pipelinebound to the pipeline bind point were specified viacmdSetDescriptorBufferOffsetsEXT, the boundPipelinemust have been created withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT - If a descriptor is
dynamically used with a
Pipelinecreated withPIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If a descriptor is
dynamically used with a
ShaderEXTcreated with aDescriptorSetLayoutthat was created withDESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor memory must be resident - If the shaderObject feature is not enabled, a valid pipeline must be bound to the pipeline bind point used by this command
- If a pipeline is
bound to the pipeline bind point used by this command, there must
not have been any calls to dynamic state setting commands for any
state specified statically in the
Pipelineobject bound to the pipeline bind point used by this command, since that pipeline was bound - If any
stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If any
stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer, and that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a storage buffer, it must not access values outside of the range of the buffer as specified in the descriptor set bound to the same pipeline bind point - If
commandBufferis an unprotected command buffer and protectedNoFault is not supported, any resource accessed by bound shaders must not be a protected resource - If a
ImageViewis accessed as a result of this command, then the image view’sviewTypemust match theDimoperand of theOpTypeImageas described in ??? - If a
ImageVieworBufferViewis accessed as a result of this command, then the numeric type of the view’sformatand theSampledTypeoperand of theOpTypeImagemust match - If a
ImageViewcreated with a format other thanFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the image view’s format - If a
ImageViewcreated with the formatFORMAT_A8_UNORMis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have four components - If a
BufferViewis accessed usingOpImageWriteas a result of this command, then theTypeof theTexeloperand of that instruction must have at least as many components as the buffer view’s format - If a
ImageViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
ImageViewwith aFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 - If a
BufferViewwith aFormatthat has a 64-bit component width is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 64 - If a
BufferViewwith aFormatthat has a component width less than 64-bit is accessed as a result of this command, theSampledTypeof theOpTypeImageoperand of that instruction must have aWidthof 32 -
If the
sparseImageInt64Atomics
feature is not enabled,
Imageobjects created with theIMAGE_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
If the
sparseImageInt64Atomics
feature is not enabled,
Bufferobjects created with theBUFFER_CREATE_SPARSE_RESIDENCY_BITflag must not be accessed by atomic instructions through anOpTypeImagewith aSampledTypewith aWidthof 64 by this command -
If
OpImageSampleWeightedQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM -
If
OpImageSampleWeightedQCOMuses aImageViewas a sample weight image as a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM - If
OpImageBoxFilterQCOMis used to sample aImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM -
If
OpImageBlockMatchSSDQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If
OpImageBlockMatchSADQCOMis used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If
OpImageBlockMatchSADQCOMor OpImageBlockMatchSSDQCOM is used to read from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation -
If
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM -
If any command other than
OpImageSampleWeightedQCOM,OpImageBoxFilterQCOM,OpImageBlockMatchWindowSSDQCOM,OpImageBlockMatchWindowSADQCOM,OpImageBlockMatchGatherSSDQCOM,OpImageBlockMatchGatherSADQCOM,OpImageBlockMatchSSDQCOM, orOpImageBlockMatchSADQCOMuses aSampleras a result of this command, then the sampler must not have been created withSAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM -
If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format features must containFORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM -
If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMinstruction is used to read from anImageViewas a result of this command, then the image view’s format must be a single-component format -
If a
OpImageBlockMatchWindow*QCOMorOpImageBlockMatchGather*QCOMread from a reference image as result of this command, then the specified reference coordinates must not fail integer texel coordinate validation - Any shader invocation executed by this command must terminate
- If a descriptor with
type equal to any of
DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,DESCRIPTOR_TYPE_SAMPLED_IMAGE,DESCRIPTOR_TYPE_STORAGE_IMAGE, orDESCRIPTOR_TYPE_INPUT_ATTACHMENTis accessed as a result of this command, all image subresources identified by that descriptor must be in the image layout identified when the descriptor was written - The
DeviceMemoryobject allocated from aMemoryHeapwith theMEMORY_HEAP_TILE_MEMORY_BIT_QCOMproperty that is bound to a resource accessed as a result of this command must be the active bound bound tile memory object incommandBuffer - If this command is
recorded inside a
tile shading render pass
instance, the stages corresponding to the pipeline bind point used
by this command must only include
SHADER_STAGE_VERTEX_BIT,SHADER_STAGE_FRAGMENT_BIT, and/orSHADER_STAGE_COMPUTE_BIT - If this command is
recorded where
per-tile execution model
is enabled, there must be no access to any image while the image
was be transitioned to the
IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXTlayout - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the underlyingTensorARMobject must have been created with theTENSOR_USAGE_SHADER_BIT_ARMusage flag set - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then theRankof theOpTypeTensorARMof the tensor resource variable must be equal to thedimensionCountprovided viaTensorCreateInfoARM::pDescriptionwhen creating the underlyingTensorARMobject - If a
DESCRIPTOR_TYPE_TENSOR_ARMdescriptor is accessed as a result of this command, then the element type of theOpTypeTensorARMof the tensor resource variable must be compatible with theFormatof theTensorViewARMused for the access - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses aOpTypeStructdecorated withBlockorBufferBlockusing that mapping, the calculated offset for the resource heap must be a multiple of bufferDescriptorAlignment - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeImageorOpTypeSampledImageusing that mapping, the calculated offset for the resource heap must be a multiple of imageDescriptorAlignment - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeSamplerorOpTypeSampledImageusing that mapping, the calculated offset for the sampler heap must be a multiple of samplerDescriptorAlignment - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_PUSH_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_SHADER_RECORD_INDEX_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, orDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses anOpTypeTensorARMusing that mapping, the calculated offset for the resource heap must be a multiple of tensorDescriptorAlignment - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 4 - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddress - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a multiple of 8 - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address at the expected location in push data must be a validDeviceAddressbacked by physical memory at every offset specified by each mapping - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the value of the address pointed to by the address in push data must be a validDeviceAddress - For each descriptor heap that is statically used by a bound shader, either directly or via a descriptor mapping, a valid descriptor heap must be bound
- If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, execution of this command must not result in any descriptor read accessing data outside of the user range of the respective heap bound byvkCmdBind*HeapEXTcommands - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a uniform buffer or uniform texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2foruniformBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified viaDeviceAddressRangeEXTwhen the descriptor was written - If any stage of the
Pipelineobject bound to the pipeline bind point used by this command accesses a storage buffer or storage texel buffer through a descriptor in the bound resource heap, that stage was created without enabling eitherPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSorPIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2forstorageBuffers, the robustBufferAccess2 feature is not enabled, and the robustBufferAccess feature is not enabled, that stage must not access values outside of the range of the descriptor specified byDeviceAddressRangeEXTwhen the descriptor was written - If the
robustBufferAccess2
feature is not enabled, the
robustBufferAccess
feature is not enabled, and any
ShaderEXTbound to a stage corresponding to the pipeline bind point used by this command accesses a uniform buffer, uniform texel buffer, storage buffer, or storage texel buffer, that shader must not access values outside of the range of the buffer as specified byDeviceAddressRangeEXTwhen the descriptor was written - If any
bound shader
uses an embedded sampler via a
descriptor mapping,
the value of
pBindInfo->reservedRangeSizeset forcmdBindSamplerHeapEXTmust be greater than or equal to minSamplerHeapReservedRangeWithEmbedded - If a
bound shader
was created as a
ShaderEXTwith theSHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag or as part of a pipeline with thePIPELINE_CREATE_2_DESCRIPTOR_HEAP_BIT_EXTflag, and that shader statically uses a push constant value, that value must have been set bycmdPushDataEXT - If a
bound shader
was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_DATA_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_RESOURCE_HEAP_DATA_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the access must not be out of bounds - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT,DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a resource using that mapping, the buffer from which the address in push data was queried must have been created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_UNIFORM_BUFFER_BITusage flag set - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a uniform buffer using that mapping, the address that the uniform buffer is mapped to must be aligned to minUniformBufferOffsetAlignment - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must have been queried from a buffer created with theBUFFER_USAGE_STORAGE_BUFFER_BITusage flag set - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses a storage buffer using that mapping, the address that the storage buffer is mapped to must be aligned to minStorageBufferOffsetAlignment - If a pipeline is
bound to the pipeline bind point used by this command, or shader is
bound to a shader stage used by this command, and it was created
with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, and a shader accesses an acceleration structure using that mapping, the address that the acceleration structure is mapped to must be an acceleration structure address retrieved from aAccelerationStructureKHRobject viagetAccelerationStructureDeviceAddressKHRor handle retrieved from aAccelerationStructureNVobject viagetAccelerationStructureHandleNV - If a shader uses a
sampler descriptor to sample an image as a result of this command,
and that sampler descriptor uses a custom border color with an index
defined by
SamplerCustomBorderColorIndexCreateInfoEXT, the value ofSamplerCustomBorderColorIndexCreateInfoEXT::indexmust have been registered before this command was recorded, and still be registered during the sampling operation, with an identically defined color - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_PUSH_ADDRESS_EXT,DESCRIPTOR_MAPPING_SOURCE_SHADER_RECORD_ADDRESS_EXT, orDESCRIPTOR_MAPPING_SOURCE_INDIRECT_ADDRESS_EXT, the address that the resource is mapped to must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - If
protectedNoFault
is not supported, a pipeline is bound to the pipeline bind point
used by this command, or a shader is bound to a shader stage used by
this command, and it was created with a
descriptor mapping
using
DESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_EXTorDESCRIPTOR_MAPPING_SOURCE_HEAP_WITH_INDIRECT_INDEX_ARRAY_EXT, the address of the indirect memory must have been queried from a buffer created without theBUFFER_CREATE_PROTECTED_BITcreate flag set - The current
render pass must be
compatible
with the
renderPassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - The subpass index
of the current render pass must be equal to the
subpassmember of theGraphicsPipelineCreateInfostructure specified when creating thePipelinebound toPIPELINE_BIND_POINT_GRAPHICS - If any shader
executed by this pipeline accesses an
OpTypeImagevariable with aDimoperand ofSubpassData, it must be decorated with anInputAttachmentIndexthat corresponds to a valid input attachment in the current subpass - Input attachment
views accessed in a subpass must be created with the same
Formatas the corresponding subpass definition, and be created with aImageViewthat is compatible with the attachment referenced by the subpass'pInputAttachments[InputAttachmentIndex] in the boundFramebufferas specified by Fragment Input Attachment Compatibility -
Input attachment views accessed in a dynamic render pass with a
InputAttachmentIndexreferenced byRenderingInputAttachmentIndexInfo, or noInputAttachmentIndexifRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexorRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexareNULL, must be created with aImageViewthat is compatible with the corresponding color, depth, or stencil attachment inRenderingInfo -
Input attachment views accessed in a dynamic render pass via a
shader object must have an
InputAttachmentIndexif bothRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexandRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexare non-NULL - If
an input attachment view accessed in a dynamic render pass via a
shader object has an
InputAttachmentIndex, theInputAttachmentIndexmust match an index inRenderingInputAttachmentIndexInfo - Memory backing image subresources used as attachments in the current render pass must not be written in any way other than as an attachment by this command
- If a color
attachment is written by any prior command in this subpass or by the
load, store, or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a depth
attachment is written by any prior command in this subpass or by the
load, store, or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a stencil
attachment is written by any prior command in this subpass or by the
load, store, or resolve operations for this subpass, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, it must not be accessed in any way other than as an attachment by this command - If a color
attachment is read in this command in any way other than as an
attachment, or has been read by any prior command in this subpass as
a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_COLOR_BITon that attachment, the color attachment must not be written to by this command - If a depth
attachment is read in this command in any way other than as an
attachment, or has been read by any prior command in this subpass as
a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_DEPTH_BITon that attachment, the depth attachment must not be written to by this command - If a stencil
attachment is read in this command in any way other than as an
attachment, or has been read by any prior command in this subpass as
a non-attachment, and
feedback loop
is not enabled for
IMAGE_ASPECT_STENCIL_BITon that attachment, the stencil attachment must not be written to by this command - If an attachment is written by any prior command in this subpass or by the load, store, or resolve operations for this subpass, it must not be accessed in any way other than as an attachment, storage image, or sampled image by this command
- If the current render pass instance uses a depth/stencil attachment with a read-only layout for the depth aspect, depth writes must be disabled
- If the current
render pass instance uses a depth/stencil attachment with a
read-only layout for the stencil aspect, both front and back
writeMaskare not zero, and stencil test is enabled, all stencil ops must beSTENCIL_OP_KEEP - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORTdynamic state enabled thencmdSetViewportmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SCISSORdynamic state enabled thencmdSetScissormust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_LINE_WIDTHdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineWidthmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_BIASdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBiasEnableisTRUE, thencmdSetDepthBiasorcmdSetDepthBias2EXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_BLEND_CONSTANTSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUEwith a blend equations where anyBlendFactormember isBLEND_FACTOR_CONSTANT_COLOR,BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR,BLEND_FACTOR_CONSTANT_ALPHA, orBLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA, thencmdSetBlendConstantsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_BOUNDSdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthBoundsTestEnableisTRUE, thencmdSetDepthBoundsmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_COMPARE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilCompareMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_WRITE_MASKdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstencilTestEnableisTRUE, thencmdSetStencilWriteMaskmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_REFERENCEdynamic state enabled, the current value of andrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilReferencemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must be less than or equal to
PhysicalDeviceMultiviewProperties::maxMultiviewInstanceIndex - If
the bound graphics pipeline was created with
PipelineSampleLocationsStateCreateInfoEXT::sampleLocationsEnableset toTRUE, then the active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleLocationsEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_sample_locationsextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofsampleLocationsEnableisTRUE, thencmdSetSampleLocationsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_CULL_MODEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCullModemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_FRONT_FACEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFrontFacemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE,cmdSetDepthTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_WRITE_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthWriteEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_COMPARE_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdepthTestEnableisTRUE, thencmdSetDepthCompareOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthBounds
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBoundsTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_TEST_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetStencilTestEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_STENCIL_OPdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, the current value ofstencilTestEnableisTRUE, thencmdSetStencilOpmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetViewportWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with the
DYNAMIC_STATE_SCISSOR_WITH_COUNTdynamic state enabled, and the state is not inherited, thencmdSetScissorWithCountmust have been called and not subsequently invalidated in the current command buffer prior to this drawing - If a shader
object is bound to any graphics stage or a graphics pipeline is
bound which was created with both the
DYNAMIC_STATE_SCISSOR_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic states enabled, and the state is not inherited, then theviewportCountparameter ofcmdSetViewportWithCountmust match thescissorCountparameter ofcmdSetScissorWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportWScalingStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, thencmdSetViewportWScalingNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_W_SCALING_NVdynamic state enabled, the current value ofviewportWScalingEnableisTRUE, then theviewportCountparameter in the last call tocmdSetViewportWScalingNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportShadingRateImageStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NVand the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoarseSampleOrderNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, thencmdSetViewportShadingRatePaletteNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofshadingRateImageEnableisTRUE, then theviewportCountparameter in the last call tocmdSetViewportShadingRatePaletteNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportSwizzleStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled and aPipelineViewportExclusiveScissorStateCreateInfoNVstructure chained fromPipelineViewportStateCreateInfo, then the bound graphics pipeline must have been created withPipelineViewportExclusiveScissorStateCreateInfoNV::exclusiveScissorCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
exclusiveScissor
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_ENABLE_NVdynamic state enabled, thencmdSetExclusiveScissorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
exclusiveScissor
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NVdynamic state enabled, and the most recent call tocmdSetExclusiveScissorEnableNVin the current command buffer set any element ofpExclusiveScissorEnablestoTRUE, thencmdSetExclusiveScissorNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLEdynamic state enabled, thencmdSetRasterizerDiscardEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_DEPTH_BIAS_ENABLEdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthBiasEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITor a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value oflogicOpEnableisTRUE, thencmdSetLogicOpEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, the bound graphics pipeline was created with
the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, and any of the shader stages of the bound graphics pipeline write to thePrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 -
If the
primitiveFragmentShadingRateWithMultipleViewports
limit is not supported, and any shader object bound to a graphics
stage writes to the
PrimitiveShadingRateKHRbuilt-in, thencmdSetViewportWithCountmust have been called in the current command buffer prior to this drawing command, and theviewportCountparameter ofcmdSetViewportWithCountmust be1 - If a shader
object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, then for each color attachment, if the corresponding image view’s format features do not containFORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, then the corresponding current value ofblendEnablemust beFALSE If a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value of
rasterizerDiscardEnableisFALSE, and none of the following is enabled:- the
VK_AMD_mixed_attachment_samplesextension - the
VK_NV_framebuffer_mixed_samplesextension - the multisampledRenderToSingleSampled feature
then the current value of
rasterizationSamplesmust be the same as the current color and/or depth/stencil attachments- the
- If a shader object
is bound to any graphics stage, the current render pass instance
must have been begun with
cmdBeginRendering - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, this command must not write any values to the depth attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpDepthAttachmentis notNULL_HANDLE, and thelayoutmember ofpDepthAttachmentisIMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, this command must not write any values to the depth attachment - If the current
render pass instance was begun with
cmdBeginRendering, theimageViewmember ofpStencilAttachmentis notNULL_HANDLE, and thelayoutmember ofpStencilAttachmentisIMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, this command must not write any values to the stencil attachment - If the current
render pass instance was begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::viewMaskequal toRenderingInfo::viewMask - If
the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRendering, the bound graphics pipeline must have been created with aPipelineRenderingCreateInfo::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount -
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline -
If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewequal toNULL_HANDLEmust have the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED -
If the
dynamicRenderingUnusedAttachments
feature is enabled, and the current render pass instance was begun
with
cmdBeginRenderingandRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with animageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If
the current render pass instance was begun with
cmdBeginRendering, with aRenderingInfo::colorAttachmentCountequal to1, there is no shader object bound to any graphics stage, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If there is no
shader object bound to any graphics stage, the current render pass
instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, and a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with an image created with aExternalFormatANDROID::externalFormatvalue equal to theExternalFormatANDROID::externalFormatvalue used to create the bound graphics pipeline - If the current
render pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, thencmdSetColorBlendEnableEXTmust have set the blend enable toFALSEprior to this drawing command - If the current
render pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If there is a shader
object bound to any graphics stage, and the current render pass
includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetColorBlendEnableEXTmust have set blend enable toFALSEprior to this drawing command - If
there is a shader object bound to any graphics stage, and the
current render pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetRasterizationSamplesEXTmust have setrasterizationSamplestoSAMPLE_COUNT_1_BITprior to this drawing command - If the current
render pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If the current
render pass instance was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, and the bound graphics pipeline was created with a non-zeroExternalFormatANDROID::externalFormatvalue and with theDYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If there is
a shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->widthto1prior to this drawing command - If there is
a shader object bound to any graphics stage, and the current render
pass includes a color attachment that uses the
RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROIDresolve mode, thencmdSetFragmentShadingRateKHRmust have setpFragmentSize->heightto1prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorWriteEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
colorWriteEnable
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COLOR_WRITE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then theattachmentCountparameter of most recent call tocmdSetColorWriteEnableEXTin the current command buffer must be greater than or equal to the number of active color attachments - If the
VK_EXT_discard_rectanglesextension is enabled, a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfoincluded aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPipelineDiscardRectangleStateCreateInfoEXT::discardRectangleCount -
If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created withDYNAMIC_STATE_DISCARD_RECTANGLE_EXTdynamic state enabled and thepNextchain ofGraphicsPipelineCreateInfodid not include aPipelineDiscardRectangleStateCreateInfoEXTstructure, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for each discard rectangle inPhysicalDeviceDiscardRectanglePropertiesEXT::maxDiscardRectangles - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDiscardRectangleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_discard_rectanglesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_DISCARD_RECTANGLE_MODE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofdiscardRectangleEnableisTRUE, thencmdSetDiscardRectangleModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED -
If current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->imageView, the value of the format must beFORMAT_UNDEFINED -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwasNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED -
If current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, and the value ofPipelineRenderingCreateInfo::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->imageView, the value of the format must beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRenderingandRenderingFragmentShadingRateAttachmentInfoKHR::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR -
If the current render pass instance was begun with
cmdBeginRendering, the dynamicRenderingLocalRead feature is enabled, theRENDERING_LOCAL_READ_CONCURRENT_ACCESS_CONTROL_BIT_KHRflag is specified, and an attachment is being used as a feedback loop as specified by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#rendering-attachment-input-attachment-feedback,RenderingAttachmentFlagsInfoKHR::flagsfor that attachment must includeRENDERING_ATTACHMENT_INPUT_ATTACHMENT_FEEDBACK_BIT_KHR - If the current
render pass instance was begun with
cmdBeginRenderingandRenderingFragmentDensityMapAttachmentInfoEXT::imageViewwas notNULL_HANDLE, the bound graphics pipeline must have been created withPIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT - If the current
render pass instance was created with
RENDERING_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVEorRENDER_PASS_CREATE_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, and the bound graphics pipeline was created withPIPELINE_CREATE_2_PER_LAYER_FRAGMENT_DENSITY_BIT_VALVE, then the current render pass instance must have alayersvalue less than or equal toPipelineFragmentDensityMapLayeredCreateInfoVALVE::maxFragmentDensityMapLayers - If
the bound pipeline was created with a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the corresponding element of thepColorAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline - If the
current render pass instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView - If the
current render pass instance was begun with
cmdBeginRendering, the bound pipeline was created with aAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value of thedepthStencilAttachmentSamplesmember ofAttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVused to create the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, and the current render pass instance was begun withcmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0, then each element of theRenderingInfo::pColorAttachmentsarray with aimageViewnot equal toNULL_HANDLEmust have been created with a sample count equal to the value ofrasterizationSamplesfor the bound graphics pipeline -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->imageView -
If the bound pipeline was created without a
AttachmentSampleCountInfoAMDorAttachmentSampleCountInfoNVstructure, and the multisampledRenderToSingleSampled feature is not enabled, andcmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, andRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->imageView - If this command is
called inside a render pass instance started with
cmdBeginRendering, and thepNextchain ofRenderingInfoincludes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then the value ofrasterizationSamplesfor the bound graphics pipeline must be equal toMultisampledRenderToSingleSampledInfoEXT::rasterizationSamples - If the current
render pass instance was begun with
cmdBeginRendering, the bound pipeline must have been created with aGraphicsPipelineCreateInfo::renderPassequal toNULL_HANDLE - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->imageViewwas notNULL_HANDLE, then the corresponding element ofPipelineRenderingCreateInfo::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound with a fragment shader that statically writes to a color attachment, the color write mask is not zero, color writes are enabled, and the corresponding element of theRenderingInfo::pColorAttachments->resolveImageViewwas notNULL_HANDLE, then the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, depth test is enabled, and theRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas not yet been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->imageViewwas notNULL_HANDLE, then thePipelineRenderingCreateInfo::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, there is a graphics pipeline bound, stencil test is enabled and theRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, then theCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the pipeline must not beFORMAT_UNDEFINED - If the current
render pass instance was begun with a
cmdBeginRenderingcall incommandBuffer, itsRenderingInfo::flagsparameter must not haveRENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BITset unlessRENDERING_CONTENTS_INLINE_BIT_KHRis also set -
If the
primitivesGeneratedQueryWithRasterizerDiscard
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, rasterization discard must not be enabled -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, the bound graphics pipeline must not have been created with a non-zero value inPipelineRasterizationStateStreamCreateInfoEXT::rasterizationStream - If the
depthClamp
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetDepthClampEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_POLYGON_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetPolygonModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRasterizationSamplesEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetSampleMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, andalphaToCoverageEnablewasTRUEin the last call tocmdSetAlphaToCoverageEnableEXT, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If
a shader object is bound to any graphics stage, and the most recent
call to
cmdSetAlphaToCoverageEnableEXTin the current command buffer setalphaToCoverageEnabletoTRUE, then the Fragment Output Interface must contain a variable for the alphaComponentword inLocation0 atIndex0 - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_ALPHA_TO_COVERAGE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToCoverageEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
alphaToOne
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_ALPHA_TO_ONE_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAlphaToOneEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
logicOp
feature is enabled, a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_LOGIC_OP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetLogicOpEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorBlendEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created withDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and there are color attachments bound, thencmdSetColorWriteMaskEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
geometryStreams
feature is enabled, and a shader object is bound to the
SHADER_STAGE_GEOMETRY_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_GEOMETRY_BITstage and theDYNAMIC_STATE_RASTERIZATION_STREAM_EXTdynamic state enabled, thencmdSetRasterizationStreamEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_CONSERVATIVE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetConservativeRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_conservative_rasterizationextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_EXTRA_PRIMITIVE_OVERESTIMATION_SIZE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofconservativeRasterizationModeisCONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT, thencmdSetExtraPrimitiveOverestimationSizeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
VK_EXT_conservative_rasterizationextension is enabled, conservativePointAndLineRasterization is not supported, a shader object is bound to any graphics stage or a graphics pipeline is bound, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line or point topology class, then the current value ofconservativeRasterizationModemust beCONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT - If the
depthClipEnable
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_ENABLE_EXTdynamic state, thencmdSetDepthClipEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_EXT_provoking_vertexextension is enabled, a shader object is bound to theSHADER_STAGE_VERTEX_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_PROVOKING_VERTEX_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetProvokingVertexModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineRasterizationModeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the effective rasterization input topology is in line topology class, thencmdSetLineStippleEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If any of the
stippledRectangularLines,
stippledBresenhamLines
or
stippledSmoothLines
features are enabled and a shader object is bound to any graphics
stage, or a bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLEdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofstippledLineEnableisTRUE, thencmdSetLineStipplemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a shader object
is bound to any graphics stage or a graphics pipeline is bound which
was created with the
DYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic state enabled, the effective rasterization input topology is in line topology class, and the currentlineRasterizationModeisLINE_RASTERIZATION_MODE_BRESENHAMorLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the currentalphaToCoverageEnable,alphaToOneEnableandsampleShadingEnablestates must all beFALSE - If the
depthClipControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLIP_NEGATIVE_ONE_TO_ONE_EXTdynamic state enabled, thencmdSetDepthClipNegativeOneToOneEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
depthClampControl
feature is enabled, and a shader object is bound to any graphics
stage or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXTdynamic state enabled, and the current value ofdepthClampEnableisTRUE, thencmdSetDepthClampRangeEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_clip_space_w_scalingextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_W_SCALING_ENABLE_NVdynamic state enabled, thencmdSetViewportWScalingEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, thencmdSetViewportSwizzleNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageToColorEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_fragment_coverage_to_colorextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_TO_COLOR_LOCATION_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageToColorEnableisTRUE, thencmdSetCoverageToColorLocationNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageModulationModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationModeis any value other thanCOVERAGE_MODULATION_MODE_NONE_NV, thencmdSetCoverageModulationTableEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
VK_NV_framebuffer_mixed_samplesextension is enabled, a shader object is bound to any graphics stage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_COVERAGE_MODULATION_TABLE_NVdynamic state enabled, the current value ofrasterizerDiscardEnableisFALSE, and the current value ofcoverageModulationTableEnableisTRUE, thencmdSetCoverageModulationTableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
shadingRateImage
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_SHADING_RATE_IMAGE_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetShadingRateImageEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the
pipelineFragmentShadingRate
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHRdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetFragmentShadingRateKHRmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
representativeFragmentTest
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetRepresentativeFragmentTestEnableNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetCoverageReductionModeNVmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current subpass does not use any color and/or depth/stencil attachments, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust follow the rules for a zero-attachment subpass - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to thePipelineMultisampleStateCreateInfo::rasterizationSamplesparameter used to create the bound graphics pipeline - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_MASK_EXTstate andDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstates enabled, then thesamplesparameter in the last call tocmdSetSampleMaskEXTmust be greater or equal to therasterizationSamplesparameter in the last call tocmdSetRasterizationSamplesEXT - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the multisampledRenderToSingleSampled feature is not enabled, and neither theVK_AMD_mixed_attachment_samplesnor theVK_NV_framebuffer_mixed_samplesextensions are enabled, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as the current subpass color and/or depth/stencil attachments - If the bound
graphics pipeline state was created with the
DYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, or a shader object is bound to any graphics stage, and the current render pass instance includes aMultisampledRenderToSingleSampledInfoEXTstructure withmultisampledRenderToSingleSampledEnableequal toTRUE, then therasterizationSamplesin the last call tocmdSetRasterizationSamplesEXTmust be the same as therasterizationSamplesmember of that structure - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorBlendEnableEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments - If a
shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_WRITE_MASK_EXTdynamic states enabled, and the current value ofrasterizerDiscardEnableisFALSE, then the last call tocmdSetColorWriteMaskEXTin the current command buffer prior to this drawing command must have set a value for all active color attachments -
If a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created with theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_ENABLE_EXTdynamic states enabled, the current value ofrasterizerDiscardEnableisFALSE, and an active color attachment current value ofblendEnableisTRUE, then the number of active color attachments must not exceed advancedBlendMaxColorAttachments - If a graphics
pipeline is bound was created with
DYNAMIC_STATE_COLOR_BLEND_EQUATION_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE -
If a graphics pipeline is bound was created with
DYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXT, but not theDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetColorBlendAdvancedEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE - If a shader object
is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound was created withDYNAMIC_STATE_COLOR_BLEND_ADVANCED_EXTandDYNAMIC_STATE_COLOR_BLEND_EQUATION_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, then eithercmdSetColorBlendAdvancedEXTorcmdSetColorBlendEquationEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command for all active color attachments with theblendEnablecurrent value ofTRUE -
If the
primitivesGeneratedQueryWithNonZeroStreams
feature is not enabled and the
QUERY_TYPE_PRIMITIVES_GENERATED_EXTquery is active, and the bound graphics pipeline was created withDYNAMIC_STATE_RASTERIZATION_STREAM_EXTstate enabled, the last call tocmdSetRasterizationStreamEXTmust have set therasterizationStreamto zero -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate disabled, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesmember of thePipelineMultisampleStateCreateInfostructure the bound graphics pipeline has been created with -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, then thesampleLocationsPerPixelmember ofpSampleLocationsInfoin the last call tocmdSetSampleLocationsEXTmust equal therasterizationSamplesparameter of the last call tocmdSetRasterizationSamplesEXT - If
a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, andsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXTthen the current active depth attachment must have been created with theIMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXTbit set - If
a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.widthin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If
a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate enabled and theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, then thesampleLocationsInfo.maxSampleLocationGridSize.heightin the last call tocmdSetSampleLocationsEXTmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equalingrasterizationSamples - If
a shader object is bound to the
SHADER_STAGE_FRAGMENT_BITstage, or the bound graphics pipeline state was created with theDYNAMIC_STATE_SAMPLE_LOCATIONS_ENABLE_EXTstate enabled, and ifsampleLocationsEnablewasTRUEin the last call tocmdSetSampleLocationsEnableEXT, the fragment shader code must not statically use the extended instructionInterpolateAtSample - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.widthmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.widthas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationGridSize.heightmust evenly divideMultisamplePropertiesEXT::maxSampleLocationGridSize.heightas returned bygetPhysicalDeviceMultisamplePropertiesEXTwith asamplesparameter equaling the value ofrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_SAMPLE_LOCATIONS_EXTstate disabled and theDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTstate enabled, and the current value ofsampleLocationsEnableisTRUE, thensampleLocationsInfo.sampleLocationsPerPixelmust equalrasterizationSamplesin the last call tocmdSetRasterizationSamplesEXT -
If a shader object is bound to any graphics stage or the bound
graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_MODULATION_TABLE_ENABLE_NVstate enabled, and the last call tocmdSetCoverageModulationTableEnableNVsetcoverageModulationTableEnabletoTRUE, then thecoverageModulationTableCountparameter in the last call tocmdSetCoverageModulationTableNVmust equal the currentrasterizationSamplesdivided by the number of color samples in the current active color attachment - If
the
VK_NV_framebuffer_mixed_samplesextension is enabled, and if current subpass has a depth/stencil attachment and depth test, stencil test, or depth bounds test are enabled in the bound pipeline, then the currentrasterizationSamplesmust be the same as the sample count of the depth/stencil attachment - If
the bound graphics pipeline state was created with the
DYNAMIC_STATE_COVERAGE_TO_COLOR_ENABLE_NVstate enabled and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then there must be an active color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT -
If the
VK_NV_fragment_coverage_to_colorextension is enabled, and a shader object is bound to theSHADER_STAGE_FRAGMENT_BITstage, and the most recent call tocmdSetRasterizerDiscardEnablein the current command buffer setrasterizerDiscardEnabletoFALSE, and the last call tocmdSetCoverageToColorEnableNVset thecoverageToColorEnabletoTRUE, then there must be an active color attachment at the location selected by the last call tocmdSetCoverageToColorLocationNVcoverageToColorLocation, with aFormatofFORMAT_R8_UINT,FORMAT_R8_SINT,FORMAT_R16_UINT,FORMAT_R16_SINT,FORMAT_R32_UINT, orFORMAT_R32_SINT - If
the
coverageReductionMode
feature is enabled, a shader object is bound to any graphics stage
or a graphics pipeline is bound which was created with the
DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NVorDYNAMIC_STATE_RASTERIZATION_SAMPLES_EXTdynamic states enabled, then the current values ofcoverageReductionMode,rasterizationSamples, the sample counts for the color and depth/stencil attachments (if the subpass has them) must be a valid combination returned bygetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTdynamic state enabled, but not theDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic state enabled, then the bound graphics pipeline must have been created withPipelineViewportSwizzleStateCreateInfoNV::viewportCountgreater or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_VIEWPORT_WITH_COUNTandDYNAMIC_STATE_VIEWPORT_SWIZZLE_NVdynamic states enabled then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If the
VK_NV_viewport_swizzleextension is enabled, and a shader object is bound to any graphics stage, then theviewportCountparameter in the last call tocmdSetViewportSwizzleNVmust be greater than or equal to theviewportCountparameter in the last call tocmdSetViewportWithCount - If
the
VK_NV_framebuffer_mixed_samplesextension is enabled, and the coverageReductionMode feature is not enabled, or the current value ofcoverageReductionModeis notCOVERAGE_REDUCTION_MODE_TRUNCATE_NV, and the current value ofrasterizationSamplesis greater than sample count of the color attachment, then sample shading must be disabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR, then the stippledRectangularLines feature must be enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_BRESENHAM, then the stippledBresenhamLines feature must be enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, then the stippledSmoothLines feature must be enabled - If the
bound graphics pipeline state was created with the
DYNAMIC_STATE_LINE_STIPPLE_ENABLE_EXTorDYNAMIC_STATE_LINE_RASTERIZATION_MODE_EXTdynamic states enabled, and if the currentstippledLineEnablestate isTRUEand the currentlineRasterizationModestate isLINE_RASTERIZATION_MODE_DEFAULT, then the stippledRectangularLines feature must be enabled andPhysicalDeviceLimits::strictLinesmust beTRUE - If the bound
pipeline was created with the
PipelineShaderStageCreateInfo::stagemember of an element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_VERTEX_BIT,SHADER_STAGE_TESSELLATION_CONTROL_BIT,SHADER_STAGE_TESSELLATION_EVALUATION_BITorSHADER_STAGE_GEOMETRY_BIT, then Mesh Shader Queries must not be active - If a shader object
is bound to the
SHADER_STAGE_FRAGMENT_BITstage or a graphics pipeline is bound which was created with theDYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXTdynamic state enabled, and the current value ofrasterizerDiscardEnableisFALSE, thencmdSetAttachmentFeedbackLoopEnableEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If dynamic state was
inherited from
CommandBufferInheritanceViewportScissorInfoNV, it must be set in the current command buffer prior to this drawing command - For each shader
object bound to a graphics stage, except for shader object bound to
the last graphics stage in the logical pipeline, it must have been
created with a
nextStageincluding the corresponding bit to the shader object bound to the following graphics stage in the logical pipeline - If there is no bound
graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_VERTEX_BIT - If there is no bound
graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_CONTROL_BIT - If there is no bound
graphics pipeline, and the
tessellationShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TESSELLATION_EVALUATION_BIT - If there is no bound
graphics pipeline, and the
geometryShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_GEOMETRY_BIT - If there is no bound
graphics pipeline,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_FRAGMENT_BIT - If there is no bound
graphics pipeline, and the
taskShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_TASK_BIT_EXT - If there is no bound
graphics pipeline, and the
meshShader
feature is enabled,
cmdBindShadersEXTmust have been called in the current command buffer withpStageswith an element ofSHADER_STAGE_MESH_BIT_EXT - If there is no bound
graphics pipeline, and at least one of the
taskShader
and
meshShader
features is enabled, one of the
SHADER_STAGE_VERTEX_BITorSHADER_STAGE_MESH_BIT_EXTstages must have a validShaderEXTbound, and the other must have noShaderEXTbound - If there is no bound
graphics pipeline, and a valid
ShaderEXTis bound to theSHADER_STAGE_VERTEX_BITstage, there must be noShaderEXTbound to either theSHADER_STAGE_TASK_BIT_EXTstage or theSHADER_STAGE_MESH_BIT_EXTstage - If any graphics
shader is bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, then all shaders created with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag in the samecreateShadersEXTcall must also be bound - If any graphics
shader is bound which was created with the
SHADER_CREATE_LINK_STAGE_BIT_EXTflag, any stages in between stages whose shaders which did not create a shader with theSHADER_CREATE_LINK_STAGE_BIT_EXTflag as part of the samecreateShadersEXTcall must not have anyShaderEXTbound - All bound graphics shader objects must have been created with identical or identically defined push constant ranges
- All bound graphics
shader objects must have either been created with the
SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXTflag set, or with identical or identically defined arrays of descriptor set layouts - If
the current render pass instance was begun with
cmdBeginRenderingand aRenderingInfo::colorAttachmentCountequal to1, a color attachment with a resolve mode ofRESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, and a fragment shader is bound, it must not declare theDepthReplacingorStencilRefReplacingEXTexecution modes - If the
bound graphics pipeline state includes a fragment shader stage, was
created with
DYNAMIC_STATE_DEPTH_WRITE_ENABLEset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpDepthAttachmentReadEXT, thedepthWriteEnableparameter in the last call tocmdSetDepthWriteEnablemust beFALSE - If the
bound graphics pipeline state includes a fragment shader stage, was
created with
DYNAMIC_STATE_STENCIL_WRITE_MASKset inPipelineDynamicStateCreateInfo::pDynamicStates, and the fragment shader declares theEarlyFragmentTestsexecution mode and usesOpStencilAttachmentReadEXT, thewriteMaskparameter in the last call tocmdSetStencilWriteMaskmust be0 - If a shader object
is bound to any graphics stage or the bound graphics pipeline was
created with
DYNAMIC_STATE_COLOR_WRITE_MASK_EXT, and the format of any color attachment isFORMAT_E5B9G9R9_UFLOAT_PACK32, the corresponding element of thepColorWriteMasksparameter ofcmdSetColorWriteMaskEXTmust either include all ofCOLOR_COMPONENT_R_BIT,COLOR_COMPONENT_G_BIT, andCOLOR_COMPONENT_B_BIT, or none of them -
If
blending
is enabled for any attachment where either the source or destination
blend factors for that attachment
use the secondary color input,
the maximum value of
Locationfor any output attachment statically used in theFragmentExecutionModelexecuted by this command must be less than maxFragmentDualSrcAttachments - If the current
render pass was begun with
cmdBeginRendering, there is no shader object bound to any graphics stage, the value of each element ofRenderingAttachmentLocationInfo::pColorAttachmentLocationsin the bound pipeline must match the value for the corresponding locations set currently in the current render pass instance - If the current
render pass was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value of each element ofRenderingInputAttachmentIndexInfo::pColorAttachmentInputIndicesin the bound pipeline must match the value for the corresponding index set currently in the current render pass instance - If the current
render pass was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pDepthInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current
render pass was begun with
cmdBeginRendering, and there is no shader object bound to any graphics stage, the value ofRenderingInputAttachmentIndexInfo::pStencilInputAttachmentIndexin the bound pipeline must match the value set currently in the current render pass instance - If the current
render pass was begun with
cmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag, the bound graphics pipeline must have been created withPIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT - If the bound
graphics pipeline was created with
PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT, the current render pass must have begun withcmdBeginRenderingwith theRENDERING_ENABLE_LEGACY_DITHERING_BIT_EXTflag - If the per-tile execution model is enabled, the tileShadingPerTileDraw feature must be enabled
- If a shader object is bound to any graphics stage, multiview functionality must not be enabled in the current render pass
-
If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofviewportCount -
If the
multiviewPerViewViewports
feature is enabled, then the index of the most significant bit in
current render pass instance
viewMaskmust be less than the current value ofscissorCount - If current render
pass instance was begun with
cmdBeginRenderingwithRenderingInfo::flagswhich includesRENDERING_FRAGMENT_REGION_BIT_EXT, and if sample shading is enabled (explicitly or implicitly), then the minimum fraction for sample shading must equal 0.0 - If the current
render pass instance was begun with
cmdBeginRenderingand contains a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must have been created with aCustomResolveCreateInfoEXT - If the current
render pass instance was begun with
cmdBeginRenderingand does not contain a custom resolve, and the dynamicRenderingUnusedAttachments feature is not enabled, the graphics pipeline bound must not have been created with aCustomResolveCreateInfoEXT - If the
current render pass instance was begun with
cmdBeginRenderingandcmdBeginCustomResolveEXThas been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If the
current render pass instance was begun with
cmdBeginRenderingand contains a custom resolve, andcmdBeginCustomResolveEXThas not been recorded in the render pass instance, the graphics pipeline bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - If the
dynamicRenderingUnusedAttachments
feature is not enabled and the current render pass instance was
begun with
cmdBeginRenderingand contains a custom resolve, the bound graphics pipeline must have been created with aCustomResolveCreateInfoEXT::colorAttachmentCountequal toRenderingInfo::colorAttachmentCount - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline - If the
dynamicRenderingUnusedAttachments
feature is not enabled, and the current render pass instance was
begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewequal toNULL_HANDLEmust have the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound pipeline equal toFORMAT_UNDEFINED -
If the
dynamicRenderingUnusedAttachments
feature is enabled, the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, andRenderingInfo::colorAttachmentCountgreater than0, then each element of theRenderingInfo::pColorAttachmentsarray with anresolveImageViewnot equal toNULL_HANDLEmust have been created with aFormatequal to the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormatsused to create the bound graphics pipeline, or the corresponding element ofCustomResolveCreateInfoEXT::pColorAttachmentFormats, if it exists, must beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render
pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView -
If the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::depthAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pDepthAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If the current
render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwasNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal toFORMAT_UNDEFINED - If current render
pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is not enabled, andRenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline must be equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView -
If the current render pass instance was begun with
cmdBeginRendering, it contains a custom resolve, the dynamicRenderingUnusedAttachments feature is enabled,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, and the value ofCustomResolveCreateInfoEXT::stencilAttachmentFormatused to create the bound graphics pipeline was not equal to theFormatused to createRenderingInfo::pStencilAttachment->resolveImageView, the value of the format must beFORMAT_UNDEFINED - If
the current render pass instance was begun with
cmdBeginRenderingwith aRenderingInfo::colorAttachmentCountparameter greater than0andcmdBeginCustomResolveEXThas been recorded in the render pass instance, then for each element of theRenderingInfo::pColorAttachmentsarray with aresolveImageViewnot equal toNULL_HANDLE, theresolveImageViewmust have been created with a sample count equal to the value ofrasterizationSamplesfor the bound graphics pipeline - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance, andRenderingInfo::pDepthAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pDepthAttachment->resolveImageView - If the
current render pass instance was begun with
cmdBeginRendering,cmdBeginCustomResolveEXThas been recorded in the render pass instance,RenderingInfo::pStencilAttachment->resolveImageViewwas notNULL_HANDLE, the value ofrasterizationSamplesfor the bound graphics pipeline must be equal to the sample count used to createRenderingInfo::pStencilAttachment->resolveImageView - If a shader
object is bound to the fragment stage, the current render pass
instance was begun with
cmdBeginRendering, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasTRUE - If a shader
object is bound to the fragment stage, the current render pass
instance was begun with
cmdBeginRenderingand contains a custom resolve, a fragment density map attachment is active, andcmdBeginCustomResolveEXThas not yet been called, then the fragment shader object bound must have been created withCustomResolveCreateInfoEXT::customResolveasFALSE - All vertex input
bindings accessed via vertex input variables declared in the vertex
shader entry point’s interface must have either valid or
NULL_HANDLEbuffers bound - If the
nullDescriptor
feature is not enabled, all vertex input bindings accessed via
vertex input variables declared in the vertex shader entry point’s
interface must not be
NULL_HANDLE - If the
robustBufferAccess
feature is not enabled, and that pipeline was created without
enabling
PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESSforvertexInputs, then for a given vertex buffer binding, any attribute data fetched must be entirely contained within the corresponding vertex buffer binding, as described in ??? - For each vertex
attribute accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis a packed format, and the legacyVertexAttributes feature is not enabled, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the size of the format - For each vertex
attribute accessed by this command, if its
VertexInputAttributeDescription::formatorVertexInputAttributeDescription2EXT::formatis not a packed format, and either the legacyVertexAttributes feature is not enabled orformathas 64-bit components, the value ofattribAddress, calculated as described in Vertex Input Calculation, must be a multiple of the component size of the format - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_TOPOLOGYdynamic state enabled thencmdSetPrimitiveTopologymust have been called and not subsequently invalidated in the current command buffer prior to this drawing command -
If the bound graphics pipeline state was created with the
DYNAMIC_STATE_PRIMITIVE_TOPOLOGYdynamic state enabled and the dynamicPrimitiveTopologyUnrestricted isFALSE, then theprimitiveTopologyparameter ofcmdSetPrimitiveTopologymust be of the same topology class as the pipelinePipelineInputAssemblyStateCreateInfo::topologystate - If a
SHADER_STAGE_TESSELLATION_CONTROL_BITstage is bound, then the current value ofprimitiveTopologymust bePRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_PATCH_LISTprior to this drawing command, then aSHADER_STAGE_TESSELLATION_CONTROL_BITstage must be bound - If
cmdSetPrimitiveTopologysetprimitiveTopologytoPRIMITIVE_TOPOLOGY_POINT_LISTprior to this drawing command, the maintenance5 feature is not enabled, both aSHADER_STAGE_TESSELLATION_EVALUATION_BITandSHADER_STAGE_GEOMETRY_BITstage are not bound, then theVertexExecutionModelmust have aPointSizedecorated variable that is statically written to - If the bound
graphics pipeline was created with the
DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDEdynamic state enabled, but without theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled, thencmdBindVertexBuffers2must have been called and not subsequently invalidated in the current command buffer prior to this draw command, and thepStridesparameter ofcmdBindVertexBuffers2must not beNULL - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled thencmdSetVertexInputEXTmust have been called and not subsequently invalidated in the current command buffer prior to this draw command - If the
vertexAttributeRobustness
feature is not enabled, and the
maintenance9
feature is not enabled, and there is a shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled then all variables with theInputstorage class decorated withLocationin theVertexExecutionModelOpEntryPointmust contain a location inVertexInputAttributeDescription2EXT::location - If there is a
shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and either the legacyVertexAttributes feature is not enabled or the SPIR-V Type associated with a givenInputvariable of the correspondingLocationin theVertexExecutionModelOpEntryPointis 64-bit, then the numeric type associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be the same asVertexInputAttributeDescription2EXT::format - If there is a
shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then the scalar width associated with allInputvariables of the correspondingLocationin theVertexExecutionModelOpEntryPointmust be 64-bit - If there is a
shader object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled and the scalar width associated with aLocationdecoratedInputvariable in theVertexExecutionModelOpEntryPointis 64-bit, then the correspondingVertexInputAttributeDescription2EXT::formatmust have a 64-bit component - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_VERTEX_INPUT_EXTdynamic state enabled andVertexInputAttributeDescription2EXT::formathas a 64-bit component, then allInputvariables at the correspondingLocationin theVertexExecutionModelOpEntryPointmust not use components that are not present in the format - If there is a shader
object bound to the
SHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with both aSHADER_STAGE_TESSELLATION_CONTROL_BITstage and theDYNAMIC_STATE_PATCH_CONTROL_POINTS_EXTdynamic state enabled, and the current value ofprimitiveTopologyisPRIMITIVE_TOPOLOGY_PATCH_LIST, thencmdSetPatchControlPointsEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If there is a shader
object bound to the
SHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If the
primitiveTopologyListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_POINT_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST,PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY, orPRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY, there is a shader object bound to theSHADER_STAGE_VERTEX_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled, thencmdSetPrimitiveRestartEnablemust beFALSE - If the
primitiveTopologyPatchListRestart
feature is not enabled, the
input assembly
is
PRIMITIVE_TOPOLOGY_PATCH_LIST, there is a shader object bound to theSHADER_STAGE_TESSELLATION_CONTROL_BITstage or the bound graphics pipeline state was created with theDYNAMIC_STATE_PRIMITIVE_RESTART_ENABLEdynamic state enabled thencmdSetPrimitiveRestartEnablemust beFALSE - The bound graphics
pipeline must not have been created with the
PipelineShaderStageCreateInfo::stagemember of any element ofGraphicsPipelineCreateInfo::pStagesset toSHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXT - There must be no
shader object bound to either of the
SHADER_STAGE_TASK_BIT_EXTorSHADER_STAGE_MESH_BIT_EXTstages - If a shader object
is bound to the
SHADER_STAGE_TESSELLATION_EVALUATION_BITstage or a graphics pipeline is bound which was created with both aSHADER_STAGE_TESSELLATION_EVALUATION_BITstage and theDYNAMIC_STATE_TESSELLATION_DOMAIN_ORIGIN_EXTdynamic state enabled, thencmdSetTessellationDomainOriginEXTmust have been called and not subsequently invalidated in the current command buffer prior to this drawing command - If a
shader is bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the type of subdivision, they must be the same - If a
shader is bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the orientation of triangles, they must be the same - If a
shader is bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the segment spacing, they must be the same - If a
shader is bound to both the
SHADER_STAGE_TESSELLATION_CONTROL_BITandSHADER_STAGE_TESSELLATION_EVALUATION_BITstages, and if both stages contain anOpExecutionModeinstruction specifying the output patch size, they must be the same - If
bufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
buffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITusage flag set -
offsetmust be a multiple of4 -
commandBuffermust not be a protected command buffer - If
countBufferis non-sparse then it must be bound completely and contiguously to a singleDeviceMemoryobject -
countBuffermust have been created with theBUFFER_USAGE_INDIRECT_BUFFER_BITusage flag 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 the drawIndirectCount feature is not enabled this function must not be used
- If the maintenance6 feature is not enabled, a valid index buffer must be bound
-
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
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 supportQUEUE_GRAPHICS_BIToperations - This command must only be called inside of a render pass instance
- This command must not be called between suspended render pass instances
- This command must only be called outside of a video coding scope
- 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 | Video Coding Scope | Supported Queue Types | Command Type |
|---|---|---|---|---|
| Primary Secondary | Inside | Outside | VK_QUEUE_GRAPHICS_BIT | Action |
Conditional Rendering
vkCmdDrawIndexedIndirectCount is affected by conditional rendering
See Also
VK_AMD_draw_indirect_count,
VK_KHR_draw_indirect_count,
VK_VERSION_1_2,
Buffer, CommandBuffer,
DeviceSize