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