1// Copyright 2019-2023 The Khronos Group Inc.
2//
3// SPDX-License-Identifier: CC-BY-4.0
4
5// Common Valid Usage
6// Common to all dispatch and drawing commands
7  * [[VUID-{refpage}-magFilter-04553]]
8    If a slink:VkSampler created with pname:magFilter or pname:minFilter
9    equal to ename:VK_FILTER_LINEAR and pname:compareEnable equal to
10    ename:VK_FALSE is used to sample a slink:VkImageView as a result of this
11    command, then the image view's
12    <<resources-image-view-format-features,format features>> must: contain
13    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
14  * [[VUID-{refpage}-mipmapMode-04770]]
15    If a slink:VkSampler created with pname:mipmapMode equal to
16    ename:VK_SAMPLER_MIPMAP_MODE_LINEAR and pname:compareEnable equal to
17    ename:VK_FALSE is used to sample a slink:VkImageView as a result of this
18    command, then the image view's
19    <<resources-image-view-format-features,format features>> must: contain
20    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
21ifndef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
22  * [[VUID-{refpage}-aspectMask-06478]]
23    If a slink:VkImageView is sampled with
24    <<textures-depth-compare-operation,depth comparison>>, the image view
25    must: have been created with an pname:aspectMask that contains
26    ename:VK_IMAGE_ASPECT_DEPTH_BIT
27endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
28ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
29  * [[VUID-{refpage}-None-06479]]
30    If a slink:VkImageView is sampled with
31    <<textures-depth-compare-operation,depth comparison>>, the image view's
32    <<resources-image-view-format-features,format features>> must: contain
33    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
34endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
35  * [[VUID-{refpage}-None-02691]]
36    If a slink:VkImageView is accessed using atomic operations as a result
37    of this command, then the image view's
38    <<resources-image-view-format-features,format features>> must: contain
39    ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
40  * [[VUID-{refpage}-None-07888]]
41    If a ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is
42    accessed using atomic operations as a result of this command, then the
43    storage texel buffer's <<resources-buffer-view-format-features,format
44    features>> must: contain
45    ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
46ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
47  * [[VUID-{refpage}-None-02692]]
48    If a slink:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
49    result of this command, then the image view's
50    <<resources-image-view-format-features,format features>> must: contain
51    ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
52  * [[VUID-{refpage}-None-02693]]
53    If
54ifdef::VK_EXT_filter_cubic[]
55    the apiext:VK_EXT_filter_cubic extension is not enabled and
56endif::VK_EXT_filter_cubic[]
57    any slink:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
58    result of this command, it must: not have a elink:VkImageViewType of
59    ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
60    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
61ifdef::VK_EXT_filter_cubic[]
62  * [[VUID-{refpage}-filterCubic-02694]]
63    Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
64    result of this command must: have a elink:VkImageViewType and format
65    that supports cubic filtering, as specified by
66    slink:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
67    returned by flink:vkGetPhysicalDeviceImageFormatProperties2
68  * [[VUID-{refpage}-filterCubicMinmax-02695]]
69    Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT with
70    a reduction mode of either ename:VK_SAMPLER_REDUCTION_MODE_MIN or
71    ename:VK_SAMPLER_REDUCTION_MODE_MAX as a result of this command must:
72    have a elink:VkImageViewType and format that supports cubic filtering
73    together with minmax filtering, as specified by
74    slink:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
75    returned by flink:vkGetPhysicalDeviceImageFormatProperties2
76endif::VK_EXT_filter_cubic[]
77endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
78ifdef::VK_QCOM_filter_cubic_clamp[]
79  * [[VUID-{refpage}-cubicRangeClamp-09212]]
80    If the <<features-filter-cubic-range-clamp, pname:cubicRangeClamp>>
81    feature is not enabled, then any slink:VkImageView being sampled with
82    ename:VK_FILTER_CUBIC_EXT as a result of this command
83    must: not have a
84    slink:VkSamplerReductionModeCreateInfo::pname:reductionMode equal to
85    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
86  * [[VUID-{refpage}-reductionMode-09213]]
87    Any slink:VkImageView being sampled with a
88    slink:VkSamplerReductionModeCreateInfo::pname:reductionMode equal to
89    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a
90    result of this command must: sample with ename:VK_FILTER_CUBIC_EXT
91endif::VK_QCOM_filter_cubic_clamp[]
92ifdef::VK_QCOM_filter_cubic_weights[]
93  * [[VUID-{refpage}-selectableCubicWeights-09214]]
94    If the <<features-filter-cubic-weight-selection,
95    pname:selectableCubicWeights>> feature is not enabled, then any
96    slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
97    result of this command must: have
98    slink:VkSamplerCubicWeightsCreateInfoQCOM::pname:cubicWeights equal to
99    ename:VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
100endif::VK_QCOM_filter_cubic_weights[]
101ifdef::VK_NV_corner_sampled_image[]
102  * [[VUID-{refpage}-flags-02696]]
103    Any slink:VkImage created with a slink:VkImageCreateInfo::pname:flags
104    containing ename:VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV sampled as a
105    result of this command must: only be sampled using a
106    elink:VkSamplerAddressMode of
107    ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
108endif::VK_NV_corner_sampled_image[]
109ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
110  * [[VUID-{refpage}-OpTypeImage-07027]]
111    For any slink:VkImageView being written as a storage image where the
112    image format field of the code:OpTypeImage is code:Unknown, the view's
113    <<resources-image-view-format-features,format features>> must: contain
114    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
115  * [[VUID-{refpage}-OpTypeImage-07028]]
116    For any slink:VkImageView being read as a storage image where the image
117    format field of the code:OpTypeImage is code:Unknown, the view's
118    <<resources-image-view-format-features,format features>> must: contain
119    ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
120  * [[VUID-{refpage}-OpTypeImage-07029]]
121    For any slink:VkBufferView being written as a storage texel buffer where
122    the image format field of the code:OpTypeImage is code:Unknown, the
123    view's <<VkFormatProperties3,buffer features>> must: contain
124    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
125  * [[VUID-{refpage}-OpTypeImage-07030]]
126    Any slink:VkBufferView being read as a storage texel buffer where the
127    image format field of the code:OpTypeImage is code:Unknown then the
128    view's <<VkFormatProperties3,buffer features>> must: contain
129    ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
130endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
131ifndef::VK_EXT_shader_object[]
132  * [[VUID-{refpage}-None-02697]]
133    For each set _n_ that is statically used by <<shaders-binding,a bound
134    shader>>, a descriptor set must: have been bound to _n_ at the same
135    pipeline bind point, with a slink:VkPipelineLayout that is compatible
136    for set _n_, with the slink:VkPipelineLayout used to create the current
137    slink:VkPipeline, as described in <<descriptorsets-compatibility>>
138  * [[VUID-{refpage}-None-02698]]
139    For each push constant that is statically used by <<shaders-binding,a
140    bound shader>>, a push constant value must: have been set for the same
141    pipeline bind point, with a slink:VkPipelineLayout that is compatible
142    for push constants, with the slink:VkPipelineLayout used to create the
143    current slink:VkPipeline, as described in
144    <<descriptorsets-compatibility>>
145endif::VK_EXT_shader_object[]
146ifdef::VK_EXT_shader_object[]
147  * [[VUID-{refpage}-None-08600]]
148    For each set _n_ that is statically used by <<shaders-binding,a bound
149    shader>>, a descriptor set must: have been bound to _n_ at the same
150    pipeline bind point, with a slink:VkPipelineLayout that is compatible
151    for set _n_, with the slink:VkPipelineLayout or
152    slink:VkDescriptorSetLayout array that was used to create the current
153    slink:VkPipeline or slink:VkShaderEXT, as described in
154    <<descriptorsets-compatibility>>
155  * [[VUID-{refpage}-None-08601]]
156    For each push constant that is statically used by <<shaders-binding,a
157    bound shader>>, a push constant value must: have been set for the same
158    pipeline bind point, with a slink:VkPipelineLayout that is compatible
159    for push constants, with the slink:VkPipelineLayout or
160    slink:VkDescriptorSetLayout and slink:VkPushConstantRange arrays used to
161    create the current slink:VkPipeline or slink:VkShaderEXT, as described
162    in <<descriptorsets-compatibility>>
163endif::VK_EXT_shader_object[]
164ifndef::VK_VERSION_1_3,VK_KHR_maintenance4[]
165endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
166ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
167ifndef::VK_EXT_shader_object[]
168  * [[VUID-{refpage}-maintenance4-06425]]
169    If the <<features-maintenance4, pname:maintenance4>> feature is not
170    enabled, then for each push constant that is statically used by
171    <<shaders-binding,a bound shader>>, a push constant value must: have
172    been set for the same pipeline bind point, with a slink:VkPipelineLayout
173    that is compatible for push constants, with the slink:VkPipelineLayout
174    used to create the current slink:VkPipeline, as described in
175    <<descriptorsets-compatibility>>
176endif::VK_EXT_shader_object[]
177ifdef::VK_EXT_shader_object[]
178  * [[VUID-{refpage}-maintenance4-08602]]
179    If the <<features-maintenance4, pname:maintenance4>> feature is not
180    enabled, then for each push constant that is statically used by
181    <<shaders-binding,a bound shader>>, a push constant value must: have
182    been set for the same pipeline bind point, with a slink:VkPipelineLayout
183    that is compatible for push constants, with the slink:VkPipelineLayout
184    or slink:VkDescriptorSetLayout and slink:VkPushConstantRange arrays used
185    to create the current slink:VkPipeline or slink:VkShaderEXT, as
186    described in <<descriptorsets-compatibility>>
187endif::VK_EXT_shader_object[]
188endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
189ifndef::VK_EXT_descriptor_buffer[]
190  * [[VUID-{refpage}-None-02699]]
191    Descriptors in each bound descriptor set, specified via
192    flink:vkCmdBindDescriptorSets, must: be valid as described by
193    <<descriptor-validity,descriptor validity>> if they are statically used
194    by <<shaders-binding,a bound shader>>
195endif::VK_EXT_descriptor_buffer[]
196ifdef::VK_EXT_descriptor_buffer[]
197  * [[VUID-{refpage}-None-08114]]
198    Descriptors in each bound descriptor set, specified via
199    flink:vkCmdBindDescriptorSets, must: be valid if they are statically
200    used by the slink:VkPipeline bound to the pipeline bind point used by
201    this command and the bound slink:VkPipeline was not created with
202    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
203  * [[VUID-{refpage}-None-08115]]
204    If the descriptors used by the slink:VkPipeline bound to the pipeline
205    bind point were specified via flink:vkCmdBindDescriptorSets, the bound
206    slink:VkPipeline must: have been created without
207    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
208  * [[VUID-{refpage}-None-08116]]
209    Descriptors in bound descriptor buffers, specified via
210    flink:vkCmdSetDescriptorBufferOffsetsEXT, must: be valid if they are
211    dynamically used by the slink:VkPipeline bound to the pipeline bind
212    point used by this command and the bound slink:VkPipeline was created
213    with ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
214ifdef::VK_EXT_shader_object[]
215  * [[VUID-{refpage}-None-08604]]
216    Descriptors in bound descriptor buffers, specified via
217    flink:vkCmdSetDescriptorBufferOffsetsEXT, must: be valid if they are
218    dynamically used by any slink:VkShaderEXT bound to a stage corresponding
219    to the pipeline bind point used by this command
220endif::VK_EXT_shader_object[]
221  * [[VUID-{refpage}-None-08117]]
222    If the descriptors used by the slink:VkPipeline bound to the pipeline
223    bind point were specified via flink:vkCmdSetDescriptorBufferOffsetsEXT,
224    the bound slink:VkPipeline must: have been created with
225    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
226  * [[VUID-{refpage}-None-08119]]
227    If a descriptor is dynamically used with a slink:VkPipeline created with
228    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor
229    memory must: be resident
230ifdef::VK_EXT_shader_object[]
231  * [[VUID-{refpage}-None-08605]]
232    If a descriptor is dynamically used with a slink:VkShaderEXT created
233    with a sname:VkDescriptorSetLayout that was created with
234    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the
235    descriptor memory must: be resident
236endif::VK_EXT_shader_object[]
237endif::VK_EXT_descriptor_buffer[]
238ifndef::VK_EXT_shader_object[]
239  * [[VUID-{refpage}-None-02700]]
240    A valid pipeline must: be bound to the pipeline bind point used by this
241    command
242  * [[VUID-{refpage}-None-02859]]
243    There must: not have been any calls to dynamic state setting commands
244    for any state not specified as dynamic in the slink:VkPipeline object
245    bound to the pipeline bind point used by this command, since that
246    pipeline was bound
247  * [[VUID-{refpage}-None-02702]]
248    If the slink:VkPipeline object bound to the pipeline bind point used by
249    this command accesses a slink:VkSampler object that uses unnormalized
250    coordinates, that sampler must: not be used to sample from any
251    slink:VkImage with a slink:VkImageView of the type
252    ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
253    ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
254    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
255  * [[VUID-{refpage}-None-02703]]
256    If the slink:VkPipeline object bound to the pipeline bind point used by
257    this command accesses a slink:VkSampler object that uses unnormalized
258    coordinates, that sampler must: not be used with any of the SPIR-V
259    `OpImageSample*` or `OpImageSparseSample*` instructions with
260    code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
261    stage
262  * [[VUID-{refpage}-None-02704]]
263    If the slink:VkPipeline object bound to the pipeline bind point used by
264    this command accesses a slink:VkSampler object that uses unnormalized
265    coordinates, that sampler must: not be used with any of the SPIR-V
266    `OpImageSample*` or `OpImageSparseSample*` instructions that includes a
267    LOD bias or any offset values, in any shader stage
268endif::VK_EXT_shader_object[]
269ifdef::VK_EXT_shader_object[]
270  * [[VUID-{refpage}-None-08606]]
271    If the <<features-shaderObject, pname:shaderObject>> feature is not
272    enabled, a valid pipeline must: be bound to the pipeline bind point used
273    by this command
274  * [[VUID-{refpage}-None-08607]]
275    If the <<features-shaderObject, pname:shaderObject>> is enabled, either
276    a valid pipeline must: be bound to the pipeline bind point used by this
277    command, or a valid combination of valid and dlink:VK_NULL_HANDLE shader
278    objects must: be bound to every supported shader stage corresponding to
279    the pipeline bind point used by this command
280  * [[VUID-{refpage}-None-08608]]
281    If a pipeline is bound to the pipeline bind point used by this command,
282    there must: not have been any calls to dynamic state setting commands
283    for any state not specified as dynamic in the slink:VkPipeline object
284    bound to the pipeline bind point used by this command, since that
285    pipeline was bound
286  * [[VUID-{refpage}-None-08609]]
287    If the slink:VkPipeline object bound to the pipeline bind point used by
288    this command or any slink:VkShaderEXT bound to a stage corresponding to
289    the pipeline bind point used by this command accesses a slink:VkSampler
290    object that uses unnormalized coordinates, that sampler must: not be
291    used to sample from any slink:VkImage with a slink:VkImageView of the
292    type ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
293    ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
294    ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
295  * [[VUID-{refpage}-None-08610]]
296    If the slink:VkPipeline object bound to the pipeline bind point used by
297    this command or any slink:VkShaderEXT bound to a stage corresponding to
298    the pipeline bind point used by this command accesses a slink:VkSampler
299    object that uses unnormalized coordinates, that sampler must: not be
300    used with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*`
301    instructions with code:ImplicitLod, code:Dref or code:Proj in their
302    name, in any shader stage
303  * [[VUID-{refpage}-None-08611]]
304    If the slink:VkPipeline object bound to the pipeline bind point used by
305    this command or any slink:VkShaderEXT bound to a stage corresponding to
306    the pipeline bind point used by this command accesses a slink:VkSampler
307    object that uses unnormalized coordinates, that sampler must: not be
308    used with any of the SPIR-V `OpImageSample*` or `OpImageSparseSample*`
309    instructions that includes a LOD bias or any offset values, in any
310    shader stage
311endif::VK_EXT_shader_object[]
312ifndef::VK_EXT_pipeline_robustness[]
313  * [[VUID-{refpage}-None-02705]]
314    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
315    is not enabled, and if the slink:VkPipeline object bound to the pipeline
316    bind point used by this command accesses a uniform buffer, it must: not
317    access values outside of the range of the buffer as specified in the
318    descriptor set bound to the same pipeline bind point
319endif::VK_EXT_pipeline_robustness[]
320ifdef::VK_EXT_pipeline_robustness[]
321  * [[VUID-{refpage}-uniformBuffers-06935]]
322    If any stage of the slink:VkPipeline object bound to the pipeline bind
323    point used by this command accesses a uniform buffer, and that stage was
324    created without enabling either
325    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT or
326    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
327    for pname:uniformBuffers, and the <<features-robustBufferAccess,
328    pname:robustBufferAccess>> feature is not enabled, that stage must: not
329    access values outside of the range of the buffer as specified in the
330    descriptor set bound to the same pipeline bind point
331endif::VK_EXT_pipeline_robustness[]
332ifdef::VK_EXT_shader_object[]
333  * [[VUID-{refpage}-None-08612]]
334    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
335    is not enabled, and any slink:VkShaderEXT bound to a stage corresponding
336    to the pipeline bind point used by this command accesses a uniform
337    buffer, it must: not access values outside of the range of the buffer as
338    specified in the descriptor set bound to the same pipeline bind point
339endif::VK_EXT_shader_object[]
340ifndef::VK_EXT_pipeline_robustness[]
341  * [[VUID-{refpage}-None-02706]]
342    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
343    is not enabled, and if the slink:VkPipeline object bound to the pipeline
344    bind point used by this command accesses a storage buffer, it must: not
345    access values outside of the range of the buffer as specified in the
346    descriptor set bound to the same pipeline bind point
347endif::VK_EXT_pipeline_robustness[]
348ifdef::VK_EXT_pipeline_robustness[]
349  * [[VUID-{refpage}-storageBuffers-06936]]
350    If any stage of the slink:VkPipeline object bound to the pipeline bind
351    point used by this command accesses a storage buffer, and that stage was
352    created without enabling either
353    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT or
354    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
355    for pname:storageBuffers, and the <<features-robustBufferAccess,
356    pname:robustBufferAccess>> feature is not enabled, that stage must: not
357    access values outside of the range of the buffer as specified in the
358    descriptor set bound to the same pipeline bind point
359endif::VK_EXT_pipeline_robustness[]
360ifdef::VK_EXT_shader_object[]
361  * [[VUID-{refpage}-None-08613]]
362    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
363    is not enabled, and any slink:VkShaderEXT bound to a stage corresponding
364    to the pipeline bind point used by this command accesses a storage
365    buffer, it must: not access values outside of the range of the buffer as
366    specified in the descriptor set bound to the same pipeline bind point
367endif::VK_EXT_shader_object[]
368ifdef::VK_VERSION_1_1[]
369  * [[VUID-{refpage}-commandBuffer-02707]]
370    If pname:commandBuffer is an unprotected command buffer and
371    <<limits-protectedNoFault, pname:protectedNoFault>> is not supported,
372    any resource accessed by <<shaders-binding,bound shaders>> must: not be
373    a protected resource
374endif::VK_VERSION_1_1[]
375ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
376  * [[VUID-{refpage}-None-06550]]
377    If <<shaders-binding,a bound shader>> accesses a slink:VkSampler or
378    slink:VkImageView object that enables
379    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>, that object
380    must: only be used with `OpImageSample*` or `OpImageSparseSample*`
381    instructions
382  * [[VUID-{refpage}-ConstOffset-06551]]
383    If <<shaders-binding,a bound shader>> accesses a slink:VkSampler or
384    slink:VkImageView object that enables
385    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>, that object
386    must: not use the code:ConstOffset and code:Offset operands
387endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
388  * [[VUID-{refpage}-viewType-07752]]
389    If a slink:VkImageView is accessed as a result of this command, then the
390    image view's pname:viewType must: match the code:Dim operand of the
391    code:OpTypeImage as described in <<textures-operation-validation>>
392  * [[VUID-{refpage}-format-07753]]
393    If a slink:VkImageView is accessed as a result of this command, then the
394    <<formats-numericformat, numeric type>> of the image view's pname:format
395    and the code:Sampled code:Type operand of the code:OpTypeImage must:
396    match
397  * [[VUID-{refpage}-OpImageWrite-08795]]
398    If a slink:VkImageView
399ifdef::VK_KHR_maintenance5[]
400    created with a format other than ename:VK_FORMAT_A8_UNORM_KHR
401endif::VK_KHR_maintenance5[]
402    is accessed using code:OpImageWrite as a result of this command, then
403    the code:Type of the code:Texel operand of that instruction must: have
404    at least as many components as the image view's format
405ifdef::VK_KHR_maintenance5[]
406  * [[VUID-{refpage}-OpImageWrite-08796]]
407    If a slink:VkImageView created with the format
408    ename:VK_FORMAT_A8_UNORM_KHR is accessed using code:OpImageWrite as a
409    result of this command, then the code:Type of the code:Texel operand of
410    that instruction must: have four components
411endif::VK_KHR_maintenance5[]
412  * [[VUID-{refpage}-OpImageWrite-04469]]
413    If a slink:VkBufferView is accessed using code:OpImageWrite as a result
414    of this command, then the code:Type of the code:Texel operand of that
415    instruction must: have at least as many components as the buffer view's
416    format
417ifdef::VK_EXT_shader_image_atomic_int64[]
418  * [[VUID-{refpage}-SampledType-04470]]
419    If a slink:VkImageView with a elink:VkFormat that has a 64-bit component
420    width is accessed as a result of this command, the code:SampledType of
421    the code:OpTypeImage operand of that instruction must: have a code:Width
422    of 64
423  * [[VUID-{refpage}-SampledType-04471]]
424    If a slink:VkImageView with a elink:VkFormat that has a component width
425    less than 64-bit is accessed as a result of this command, the
426    code:SampledType of the code:OpTypeImage operand of that instruction
427    must: have a code:Width of 32
428  * [[VUID-{refpage}-SampledType-04472]]
429    If a slink:VkBufferView with a elink:VkFormat that has a 64-bit
430    component width is accessed as a result of this command, the
431    code:SampledType of the code:OpTypeImage operand of that instruction
432    must: have a code:Width of 64
433  * [[VUID-{refpage}-SampledType-04473]]
434    If a slink:VkBufferView with a elink:VkFormat that has a component width
435    less than 64-bit is accessed as a result of this command, the
436    code:SampledType of the code:OpTypeImage operand of that instruction
437    must: have a code:Width of 32
438  * [[VUID-{refpage}-sparseImageInt64Atomics-04474]]
439    If the <<features-sparseImageInt64Atomics,
440    pname:sparseImageInt64Atomics>> feature is not enabled, slink:VkImage
441    objects created with the ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag
442    must: not be accessed by atomic instructions through an code:OpTypeImage
443    with a code:SampledType with a code:Width of 64 by this command
444  * [[VUID-{refpage}-sparseImageInt64Atomics-04475]]
445    If the <<features-sparseImageInt64Atomics,
446    pname:sparseImageInt64Atomics>> feature is not enabled, slink:VkBuffer
447    objects created with the ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
448    flag must: not be accessed by atomic instructions through an
449    code:OpTypeImage with a code:SampledType with a code:Width of 64 by this
450    command
451endif::VK_EXT_shader_image_atomic_int64[]
452ifdef::VK_QCOM_image_processing[]
453  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06971]]
454    If code:OpImageWeightedSampleQCOM is used to sample a slink:VkImageView
455    as a result of this command, then the image view's
456    <<resources-image-view-format-features,format features>> must: contain
457    ename:VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
458  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06972]]
459    If code:OpImageWeightedSampleQCOM uses a slink:VkImageView as a sample
460    weight image as a result of this command, then the image view's
461    <<resources-image-view-format-features,format features>> must: contain
462    ename:VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM
463  * [[VUID-{refpage}-OpImageBoxFilterQCOM-06973]]
464    If code:OpImageBoxFilterQCOM is used to sample a slink:VkImageView as a
465    result of this command, then the image view's
466    <<resources-image-view-format-features,format features>> must: contain
467    ename:VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM
468  * [[VUID-{refpage}-OpImageBlockMatchSSDQCOM-06974]]
469    If code:OpImageBlockMatchSSDQCOM is used to read from an
470    slink:VkImageView as a result of this command, then the image view's
471    <<resources-image-view-format-features,format features>> must: contain
472    ename:VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
473  * [[VUID-{refpage}-OpImageBlockMatchSADQCOM-06975]]
474    If code:OpImageBlockMatchSADQCOM is used to read from an
475    slink:VkImageView as a result of this command, then the image view's
476    <<resources-image-view-format-features,format features>> must: contain
477    ename:VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
478  * [[VUID-{refpage}-OpImageBlockMatchSADQCOM-06976]]
479    If code:OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to
480    read from a reference image as result of this command, then the
481    specified reference coordinates must: not fail
482    <<textures-integer-coordinate-validation,integer texel coordinate
483    validation>>
484  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06977]]
485    If code:OpImageWeightedSampleQCOM, code:OpImageBoxFilterQCOM,
486ifdef::VK_QCOM_image_processing2[]
487    code:OpImageBlockMatchWindowSSDQCOM,
488    code:OpImageBlockMatchWindowSADQCOM,
489    code:OpImageBlockMatchGatherSSDQCOM,
490    code:OpImageBlockMatchGatherSADQCOM,
491endif::VK_QCOM_image_processing2[]
492    code:OpImageBlockMatchSSDQCOM, or code:OpImageBlockMatchSADQCOM uses a
493    slink:VkSampler as a result of this command, then the sampler must: have
494    been created with ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
495  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06978]]
496    If any command other than code:OpImageWeightedSampleQCOM,
497    code:OpImageBoxFilterQCOM,
498ifdef::VK_QCOM_image_processing2[]
499    code:OpImageBlockMatchWindowSSDQCOM,
500    code:OpImageBlockMatchWindowSADQCOM,
501    code:OpImageBlockMatchGatherSSDQCOM,
502    code:OpImageBlockMatchGatherSADQCOM,
503endif::VK_QCOM_image_processing2[]
504    code:OpImageBlockMatchSSDQCOM, or code:OpImageBlockMatchSADQCOM uses a
505    slink:VkSampler as a result of this command, then the sampler must: not
506    have been created with ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
507endif::VK_QCOM_image_processing[]
508ifdef::VK_QCOM_image_processing2[]
509  * [[VUID-{refpage}-OpImageBlockMatchWindow-09215]]
510    If a code:OpImageBlockMatchWindow*QCOM or
511    code:OpImageBlockMatchGather*QCOM instruction is used to read from an
512    slink:VkImageView as a result of this command, then the image view's
513    <<resources-image-view-format-features,format features>> must: contain
514    ename:VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM
515  * [[VUID-{refpage}-OpImageBlockMatchWindow-09216]]
516    If a code:OpImageBlockMatchWindow*QCOM or
517    code:OpImageBlockMatchGather*QCOM instruction is used to read from an
518    slink:VkImageView as a result of this command, then the image view's
519    format must: be a single-component format.
520  * [[VUID-{refpage}-OpImageBlockMatchWindow-09217]]
521    If a code:OpImageBlockMatchWindow*QCOM or
522    code:OpImageBlockMatchGather*QCOM read from a reference image as result
523    of this command, then the specified reference coordinates must: not fail
524    <<textures-integer-coordinate-validation,integer texel coordinate
525    validation>>
526endif::VK_QCOM_image_processing2[]
527  * [[VUID-{refpage}-None-07288]]
528    Any shader invocation executed by this command must:
529    <<shaders-termination,terminate>>
530// Common Valid Usage
531