blob: 61469532f921cd6c41bf90b8ce1593dd8d7c67ea [file] [log] [blame]
// Copyright 2019-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0
// Common Valid Usage
// Common to all dispatch and drawing commands
* [[VUID-{refpage}-magFilter-04553]]
If a slink:VkSampler created with pname:magFilter or pname:minFilter
equal to ename:VK_FILTER_LINEAR and pname:compareEnable equal to
ename:VK_FALSE is used to sample a slink:VkImageView as a result of this
command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
* [[VUID-{refpage}-mipmapMode-04770]]
If a slink:VkSampler created with pname:mipmapMode equal to
ename:VK_SAMPLER_MIPMAP_MODE_LINEAR and pname:compareEnable equal to
ename:VK_FALSE is used to sample a slink:VkImageView as a result of this
command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
* [[VUID-{refpage}-None-02691]]
If a sname:VkImageView is accessed using atomic operations as a result
of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
* [[VUID-{refpage}-None-02692]]
If a sname:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command, then the image view's
<<resources-image-view-format-features,format features>> must: contain
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
ifndef::VK_EXT_filter_cubic[]
* [[VUID-{refpage}-None-02693]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_EXT_filter_cubic[]
ifdef::VK_EXT_filter_cubic[]
* [[VUID-{refpage}-filterCubic-02694]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
result of this command must: have a elink:VkImageViewType and format
that supports cubic filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
* [[VUID-{refpage}-filterCubicMinmax-02695]]
Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
a reduction mode of either ename:VK_SAMPLER_REDUCTION_MODE_MIN or
ename:VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must:
have a elink:VkImageViewType and format that supports cubic filtering
together with minmax filtering, as specified by
sname:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
returned by fname:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_NV_corner_sampled_image[]
* [[VUID-{refpage}-flags-02696]]
Any slink:VkImage created with a slink:VkImageCreateInfo::pname:flags
containing ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a
result of this command must: only be sampled using a
elink:VkSamplerAddressMode of
ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
endif::VK_NV_corner_sampled_image[]
ifdef::VK_KHR_format_feature_flags2[]
* [[VUID-{refpage}-OpTypeImage-06423]]
Any slink:VkImageView or slink:VkBufferView being written as a storage
image or storage texel buffer where the image format field of the
code:OpTypeImage is code:Unknown must: have image format features that
support ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR
* [[VUID-{refpage}-OpTypeImage-06424]]
Any slink:VkImageView or slink:VkBufferView being read as a storage
image or storage texel buffer where the image format field of the
code:OpTypeImage is code:Unknown must: have image format features that
support ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR
endif::VK_KHR_format_feature_flags2[]
* [[VUID-{refpage}-None-02697]]
For each set _n_ that is statically used by the sname:VkPipeline bound
to the pipeline bind point used by this command, a descriptor set must:
have been bound to _n_ at the same pipeline bind point, with a
sname:VkPipelineLayout that is compatible for set _n_, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
ifndef::VK_KHR_maintenance4[]
* [[VUID-{refpage}-None-02698]]
For each push constant that is statically used by the sname:VkPipeline
bound to the pipeline bind point used by this command, a push constant
value must: have been set for the same pipeline bind point, with a
sname:VkPipelineLayout that is compatible for push constants, with the
sname:VkPipelineLayout used to create the current sname:VkPipeline, as
described in <<descriptorsets-compatibility>>
endif::VK_KHR_maintenance4[]
ifdef::VK_KHR_maintenance4[]
* [[VUID-{refpage}-maintenance4-06425]]
If the <<features-maintenance4, pname:maintenance4>> feature is not
enabled, then for each push constant that is statically used by the
sname:VkPipeline bound to the pipeline bind point used by this command,
a push constant value must: have been set for the same pipeline bind
point, with a sname:VkPipelineLayout that is compatible for push
constants, with the sname:VkPipelineLayout used to create the current
sname:VkPipeline, as described in <<descriptorsets-compatibility>>
endif::VK_KHR_maintenance4[]
* [[VUID-{refpage}-None-02699]]
Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the sname:VkPipeline bound to the pipeline bind point used by
this command
* [[VUID-{refpage}-None-02700]]
A valid pipeline must: be bound to the pipeline bind point used by this
command
* [[VUID-{refpage}-commandBuffer-02701]]
If the sname:VkPipeline object bound to the pipeline bind point used by
this command requires any dynamic state, that state must: have been set
or inherited (if the `apiext:VK_NV_inherited_viewport_scissor` extension
is enabled) for pname:commandBuffer, and done so after any previously
bound pipeline with the corresponding state not specified as dynamic
* [[VUID-{refpage}-None-02859]]
There must: not have been any calls to dynamic state setting commands
for any state not specified as dynamic in the sname:VkPipeline object
bound to the pipeline bind point used by this command, since that
pipeline was bound
* [[VUID-{refpage}-None-02702]]
If the sname:VkPipeline object bound to the pipeline bind point used by
this command accesses a sname:VkSampler object that uses unnormalized
coordinates, that sampler must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* [[VUID-{refpage}-None-02703]]
If the sname:VkPipeline object bound to the pipeline bind point used by
this command accesses a sname:VkSampler object that uses unnormalized
coordinates, that sampler must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* [[VUID-{refpage}-None-02704]]
If the sname:VkPipeline object bound to the pipeline bind point used by
this command accesses a sname:VkSampler object that uses unnormalized
coordinates, that sampler must: not be used with any of the SPIR-V
`OpImageSample*` or `OpImageSparseSample*` instructions that includes a
LOD bias or any offset values, in any shader stage
* [[VUID-{refpage}-None-02705]]
If the <<features-robustBufferAccess,robust buffer access>> feature is
not enabled, and if the sname:VkPipeline object bound to the pipeline
bind point used by this command accesses a uniform buffer, it must: not
access values outside of the range of the buffer as specified in the
descriptor set bound to the same pipeline bind point
* [[VUID-{refpage}-None-02706]]
If the <<features-robustBufferAccess,robust buffer access>> feature is
not enabled, and if the sname:VkPipeline object bound to the pipeline
bind point used by this command accesses a storage buffer, it must: not
access values outside of the range of the buffer as specified in the
descriptor set bound to the same pipeline bind point
ifdef::VK_VERSION_1_1[]
* [[VUID-{refpage}-commandBuffer-02707]]
If pname:commandBuffer is an unprotected command buffer and
<<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
any resource accessed by the slink:VkPipeline object bound to the
pipeline bind point used by this command must: not be a protected
resource
endif::VK_VERSION_1_1[]
* [[VUID-{refpage}-None-04115]]
If a slink:VkImageView is accessed using code:OpImageWrite as a result
of this command, then the code:Type of the code:Texel operand of that
instruction must: have at least as many components as the image view's
format
* [[VUID-{refpage}-OpImageWrite-04469]]
If a slink:VkBufferView is accessed using code:OpImageWrite as a result
of this command, then the code:Type of the code:Texel operand of that
instruction must: have at least as many components as the buffer view's
format
ifdef::VK_EXT_shader_image_atomic_int64[]
* [[VUID-{refpage}-SampledType-04470]]
If a slink:VkImageView with a elink:VkFormat that has a 64-bit component
width is accessed as a result of this command, the code:SampledType of
the code:OpTypeImage operand of that instruction must: have a code:Width
of 64
* [[VUID-{refpage}-SampledType-04471]]
If a slink:VkImageView with a elink:VkFormat that has a component width
less than 64-bit is accessed as a result of this command, the
code:SampledType of the code:OpTypeImage operand of that instruction
must: have a code:Width of 32
* [[VUID-{refpage}-SampledType-04472]]
If a slink:VkBufferView with a elink:VkFormat that has a 64-bit
component width is accessed as a result of this command, the
code:SampledType of the code:OpTypeImage operand of that instruction
must: have a code:Width of 64
* [[VUID-{refpage}-SampledType-04473]]
If a slink:VkBufferView with a elink:VkFormat that has a component width
less than 64-bit is accessed as a result of this command, the
code:SampledType of the code:OpTypeImage operand of that instruction
must: have a code:Width of 32
* [[VUID-{refpage}-sparseImageInt64Atomics-04474]]
If the
<<features-sparseImageInt64Atomics,pname:sparseImageInt64Atomics>>
feature is not enabled, slink:VkImage objects created with the
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag must: not be accessed by
atomic instructions through an code:OpTypeImage with a code:SampledType
with a code:Width of 64 by this command
* [[VUID-{refpage}-sparseImageInt64Atomics-04475]]
If the
<<features-sparseImageInt64Atomics,pname:sparseImageInt64Atomics>>
feature is not enabled, slink:VkBuffer objects created with the
ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT flag must: not be accessed
by atomic instructions through an code:OpTypeImage with a
code:SampledType with a code:Width of 64 by this command
endif::VK_EXT_shader_image_atomic_int64[]
// Common Valid Usage