// Copyright 2019-2024 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
ifndef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
  * [[VUID-{refpage}-aspectMask-06478]]
    If a slink:VkImageView is sampled with
    <<textures-depth-compare-operation,depth comparison>>, the image view
    must: have been created with an pname:aspectMask that contains
    ename:VK_IMAGE_ASPECT_DEPTH_BIT
endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
ifdef::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
  * [[VUID-{refpage}-None-06479]]
    If a slink:VkImageView is sampled with
    <<textures-depth-compare-operation,depth comparison>>, the image view's
    <<resources-image-view-format-features,format features>> must: contain
    ename:VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT
endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
  * [[VUID-{refpage}-None-02691]]
    If a slink: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
  * [[VUID-{refpage}-None-07888]]
    If a ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor is
    accessed using atomic operations as a result of this command, then the
    storage texel buffer's <<resources-buffer-view-format-features,format
    features>> must: contain
    ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
  * [[VUID-{refpage}-None-02692]]
    If a slink: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
  * [[VUID-{refpage}-None-02693]]
    If
ifdef::VK_EXT_filter_cubic[]
    the apiext:VK_EXT_filter_cubic extension is not enabled and
endif::VK_EXT_filter_cubic[]
    any slink:VkImageView is sampled with ename:VK_FILTER_CUBIC_EXT as a
    result of this command, it 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
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
    slink:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubic
    returned by flink: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
    slink:VkFilterCubicImageViewImageFormatPropertiesEXT::pname:filterCubicMinmax
    returned by flink:vkGetPhysicalDeviceImageFormatProperties2
endif::VK_EXT_filter_cubic[]
endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[]
ifdef::VK_QCOM_filter_cubic_clamp[]
  * [[VUID-{refpage}-cubicRangeClamp-09212]]
    If the <<features-filter-cubic-range-clamp, pname:cubicRangeClamp>>
    feature is not enabled, then any slink:VkImageView being sampled with
    ename:VK_FILTER_CUBIC_EXT as a result of this command must: not have a
    slink:VkSamplerReductionModeCreateInfo::pname:reductionMode equal to
    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM
  * [[VUID-{refpage}-reductionMode-09213]]
    Any slink:VkImageView being sampled with a
    slink:VkSamplerReductionModeCreateInfo::pname:reductionMode equal to
    ename:VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_RANGECLAMP_QCOM as a
    result of this command must: sample with ename:VK_FILTER_CUBIC_EXT
endif::VK_QCOM_filter_cubic_clamp[]
ifdef::VK_QCOM_filter_cubic_weights[]
  * [[VUID-{refpage}-selectableCubicWeights-09214]]
    If the <<features-filter-cubic-weight-selection,
    pname:selectableCubicWeights>> feature is not enabled, then any
    slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_EXT as a
    result of this command must: have
    slink:VkSamplerCubicWeightsCreateInfoQCOM::pname:cubicWeights equal to
    ename:VK_CUBIC_FILTER_WEIGHTS_CATMULL_ROM_QCOM
endif::VK_QCOM_filter_cubic_weights[]
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_VERSION_1_3,VK_KHR_format_feature_flags2[]
  * [[VUID-{refpage}-OpTypeImage-07027]]
    For any slink:VkImageView being written as a storage image where the
    image format field of the code:OpTypeImage is code:Unknown, the view's
    <<resources-image-view-format-features,format features>> must: contain
    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
  * [[VUID-{refpage}-OpTypeImage-07028]]
    For any slink:VkImageView being read as a storage image where the image
    format field of the code:OpTypeImage is code:Unknown, the view's
    <<resources-image-view-format-features,format features>> must: contain
    ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
  * [[VUID-{refpage}-OpTypeImage-07029]]
    For any slink:VkBufferView being written as a storage texel buffer where
    the image format field of the code:OpTypeImage is code:Unknown, the
    view's <<VkFormatProperties3,buffer features>> must: contain
    ename:VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT
  * [[VUID-{refpage}-OpTypeImage-07030]]
    Any slink:VkBufferView being read as a storage texel buffer where the
    image format field of the code:OpTypeImage is code:Unknown then the
    view's <<VkFormatProperties3,buffer features>> must: contain
    ename:VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT
endif::VK_VERSION_1_3,VK_KHR_format_feature_flags2[]
  * [[VUID-{refpage}-None-08600]]
    For each set _n_ that is statically used by <<shaders-binding,a bound
    shader>>, a descriptor set must: have been bound to _n_ at the same
    pipeline bind point, with a slink:VkPipelineLayout that is compatible
    for set _n_, with the slink:VkPipelineLayout used to create the current
    slink:VkPipeline
ifdef::VK_EXT_shader_object[]
    or the slink:VkDescriptorSetLayout array used to create the current
    slink:VkShaderEXT
endif::VK_EXT_shader_object[]
    , as described in <<descriptorsets-compatibility>>
  * [[VUID-{refpage}-None-08601]]
    For each push constant that is statically used by <<shaders-binding,a
    bound shader>>, a push constant value must: have been set for the same
    pipeline bind point, with a slink:VkPipelineLayout that is compatible
    for push constants, with the slink:VkPipelineLayout used to create the
    current slink:VkPipeline
ifdef::VK_EXT_shader_object[]
    or the slink:VkDescriptorSetLayout array used to create the current
    slink:VkShaderEXT
endif::VK_EXT_shader_object[]
    , as described in <<descriptorsets-compatibility>>
ifdef::VK_VERSION_1_3,VK_KHR_maintenance4[]
  * [[VUID-{refpage}-maintenance4-08602]]
    If the <<features-maintenance4, pname:maintenance4>> feature is not
    enabled, then for each push constant that is statically used by
    <<shaders-binding,a bound shader>>, a push constant value must: have
    been set for the same pipeline bind point, with a slink:VkPipelineLayout
    that is compatible for push constants, with the slink:VkPipelineLayout
    used to create the current slink:VkPipeline
ifdef::VK_EXT_shader_object[]
    or the slink:VkDescriptorSetLayout and slink:VkPushConstantRange arrays
    used to create the current slink:VkShaderEXT
endif::VK_EXT_shader_object[]
    , as described in <<descriptorsets-compatibility>>
endif::VK_VERSION_1_3,VK_KHR_maintenance4[]
  * [[VUID-{refpage}-None-08114]]
    Descriptors in each bound descriptor set, specified via
    flink:vkCmdBindDescriptorSets, must: be valid as described by
    <<descriptor-validity,descriptor validity>> if they are statically used
    by
ifndef::VK_EXT_descriptor_buffer[<<shaders-binding,a bound shader>>]
ifdef::VK_EXT_descriptor_buffer[]
    the slink:VkPipeline bound to the pipeline bind point used by this
    command and the bound slink:VkPipeline was not created with
    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
endif::VK_EXT_descriptor_buffer[]
ifdef::VK_EXT_descriptor_buffer[]
  * [[VUID-{refpage}-None-08115]]
    If the descriptors used by the slink:VkPipeline bound to the pipeline
    bind point were specified via flink:vkCmdBindDescriptorSets, the bound
    slink:VkPipeline must: have been created without
    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
  * [[VUID-{refpage}-None-08116]]
    Descriptors in bound descriptor buffers, specified via
    flink:vkCmdSetDescriptorBufferOffsetsEXT, must: be valid if they are
    dynamically used by the slink:VkPipeline bound to the pipeline bind
    point used by this command and the bound slink:VkPipeline was created
    with ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08604]]
    Descriptors in bound descriptor buffers, specified via
    flink:vkCmdSetDescriptorBufferOffsetsEXT, must: be valid if they are
    dynamically used by any slink:VkShaderEXT bound to a stage corresponding
    to the pipeline bind point used by this command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08117]]
    If the descriptors used by the slink:VkPipeline bound to the pipeline
    bind point were specified via flink:vkCmdSetDescriptorBufferOffsetsEXT,
    the bound slink:VkPipeline must: have been created with
    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT
  * [[VUID-{refpage}-None-08119]]
    If a descriptor is dynamically used with a slink:VkPipeline created with
    ename:VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the descriptor
    memory must: be resident
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08605]]
    If a descriptor is dynamically used with a slink:VkShaderEXT created
    with a sname:VkDescriptorSetLayout that was created with
    ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, the
    descriptor memory must: be resident
endif::VK_EXT_shader_object[]
endif::VK_EXT_descriptor_buffer[]
  * [[VUID-{refpage}-None-08606]]
ifdef::VK_EXT_shader_object[]
    If the <<features-shaderObject, pname:shaderObject>> feature is not
    enabled, a
endif::VK_EXT_shader_object[]
ifndef::VK_EXT_shader_object[A]
    valid pipeline must: be bound to the pipeline bind point used by this
    command
  * [[VUID-{refpage}-None-08608]]
ifdef::VK_EXT_shader_object[]
    If a pipeline is bound to the pipeline bind point used by this command,
    there
endif::VK_EXT_shader_object[]
ifndef::VK_EXT_shader_object[There]
    must: not have been any calls to dynamic state setting commands for any
    state not specified as dynamic in the slink:VkPipeline object bound to
    the pipeline bind point used by this command, since that pipeline was
    bound
  * [[VUID-{refpage}-None-08609]]
    If the slink:VkPipeline object bound to the pipeline bind point used by
    this command
ifdef::VK_EXT_shader_object[]
    or any slink:VkShaderEXT bound to a stage corresponding to the pipeline
    bind point used by this command
endif::VK_EXT_shader_object[]
    accesses a slink:VkSampler object that uses unnormalized coordinates,
    that sampler must: not be used to sample from any slink:VkImage with a
    slink: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-08610]]
    If the slink:VkPipeline object bound to the pipeline bind point used by
    this command
ifdef::VK_EXT_shader_object[]
    or any slink:VkShaderEXT bound to a stage corresponding to the pipeline
    bind point used by this command
endif::VK_EXT_shader_object[]
    accesses a slink: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-08611]]
    If the slink:VkPipeline object bound to the pipeline bind point used by
    this command
ifdef::VK_EXT_shader_object[]
    or any slink:VkShaderEXT bound to a stage corresponding to the pipeline
    bind point used by this command
endif::VK_EXT_shader_object[]
    accesses a slink: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
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08607]]
    If the <<features-shaderObject, pname:shaderObject>> is enabled, either
    a valid pipeline must: be bound to the pipeline bind point used by this
    command, or a valid combination of valid and dlink:VK_NULL_HANDLE shader
    objects must: be bound to every supported shader stage corresponding to
    the pipeline bind point used by this command
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-uniformBuffers-06935]]
    If any stage of the slink:VkPipeline object bound to the pipeline bind
    point used by this command accesses a uniform buffer,
ifdef::VK_EXT_pipeline_robustness[]
    and that stage was created without enabling either
    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT or
    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
    for pname:uniformBuffers,
endif::VK_EXT_pipeline_robustness[]
    and the <<features-robustBufferAccess, pname: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
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08612]]
    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
    is not enabled, and any slink:VkShaderEXT bound 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
endif::VK_EXT_shader_object[]
  * [[VUID-{refpage}-storageBuffers-06936]]
    If any stage of the slink:VkPipeline object bound to the pipeline bind
    point used by this command accesses a storage buffer,
ifdef::VK_EXT_pipeline_robustness[]
    and that stage was created without enabling either
    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT or
    ename:VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT
    for pname:storageBuffers,
endif::VK_EXT_pipeline_robustness[]
    and the <<features-robustBufferAccess, pname: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
ifdef::VK_EXT_shader_object[]
  * [[VUID-{refpage}-None-08613]]
    If the <<features-robustBufferAccess, pname:robustBufferAccess>> feature
    is not enabled, and any slink:VkShaderEXT bound 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
endif::VK_EXT_shader_object[]
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 <<shaders-binding,bound shaders>> must: not be
    a protected resource
endif::VK_VERSION_1_1[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
  * [[VUID-{refpage}-None-06550]]
    If <<shaders-binding,a bound shader>> accesses a slink:VkSampler or
    slink:VkImageView object that enables
    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>, that object
    must: only be used with `OpImageSample*` or `OpImageSparseSample*`
    instructions
  * [[VUID-{refpage}-ConstOffset-06551]]
    If <<shaders-binding,a bound shader>> accesses a slink:VkSampler or
    slink:VkImageView object that enables
    <<samplers-YCbCr-conversion,sampler {YCbCr} conversion>>, that object
    must: not use the code:ConstOffset and code:Offset operands
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
  * [[VUID-{refpage}-viewType-07752]]
    If a slink:VkImageView is accessed as a result of this command, then the
    image view's pname:viewType must: match the code:Dim operand of the
    code:OpTypeImage as described in <<textures-operation-validation>>
  * [[VUID-{refpage}-format-07753]]
    If a slink:VkImageView is accessed as a result of this command, then the
    <<formats-numericformat, numeric type>> of the image view's pname:format
    and the code:Sampled code:Type operand of the code:OpTypeImage must:
    match
  * [[VUID-{refpage}-OpImageWrite-08795]]
    If a slink:VkImageView
ifdef::VK_KHR_maintenance5[]
    created with a format other than ename:VK_FORMAT_A8_UNORM_KHR
endif::VK_KHR_maintenance5[]
    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
ifdef::VK_KHR_maintenance5[]
  * [[VUID-{refpage}-OpImageWrite-08796]]
    If a slink:VkImageView created with the format
    ename:VK_FORMAT_A8_UNORM_KHR 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 four components
endif::VK_KHR_maintenance5[]
  * [[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[]
ifdef::VK_QCOM_image_processing[]
  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06971]]
    If code:OpImageWeightedSampleQCOM 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_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM
  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06972]]
    If code:OpImageWeightedSampleQCOM uses a slink:VkImageView as a sample
    weight image as a result of this command, then the image view's
    <<resources-image-view-format-features,format features>> must: contain
    ename:VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM
  * [[VUID-{refpage}-OpImageBoxFilterQCOM-06973]]
    If code:OpImageBoxFilterQCOM 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_2_BOX_FILTER_SAMPLED_BIT_QCOM
  * [[VUID-{refpage}-OpImageBlockMatchSSDQCOM-06974]]
    If code:OpImageBlockMatchSSDQCOM is used to read from an
    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_2_BLOCK_MATCHING_BIT_QCOM
  * [[VUID-{refpage}-OpImageBlockMatchSADQCOM-06975]]
    If code:OpImageBlockMatchSADQCOM is used to read from an
    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_2_BLOCK_MATCHING_BIT_QCOM
  * [[VUID-{refpage}-OpImageBlockMatchSADQCOM-06976]]
    If code:OpImageBlockMatchSADQCOM or OpImageBlockMatchSSDQCOM is used to
    read from a reference image as result of this command, then the
    specified reference coordinates must: not fail
    <<textures-integer-coordinate-validation,integer texel coordinate
    validation>>
  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06977]]
    If code:OpImageWeightedSampleQCOM, code:OpImageBoxFilterQCOM,
ifdef::VK_QCOM_image_processing2[]
    code:OpImageBlockMatchWindowSSDQCOM,
    code:OpImageBlockMatchWindowSADQCOM,
    code:OpImageBlockMatchGatherSSDQCOM,
    code:OpImageBlockMatchGatherSADQCOM,
endif::VK_QCOM_image_processing2[]
    code:OpImageBlockMatchSSDQCOM, or code:OpImageBlockMatchSADQCOM uses a
    slink:VkSampler as a result of this command, then the sampler must: have
    been created with ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
  * [[VUID-{refpage}-OpImageWeightedSampleQCOM-06978]]
    If any command other than code:OpImageWeightedSampleQCOM,
    code:OpImageBoxFilterQCOM,
ifdef::VK_QCOM_image_processing2[]
    code:OpImageBlockMatchWindowSSDQCOM,
    code:OpImageBlockMatchWindowSADQCOM,
    code:OpImageBlockMatchGatherSSDQCOM,
    code:OpImageBlockMatchGatherSADQCOM,
endif::VK_QCOM_image_processing2[]
    code:OpImageBlockMatchSSDQCOM, or code:OpImageBlockMatchSADQCOM uses a
    slink:VkSampler as a result of this command, then the sampler must: not
    have been created with ename:VK_SAMPLER_CREATE_IMAGE_PROCESSING_BIT_QCOM
endif::VK_QCOM_image_processing[]
ifdef::VK_QCOM_image_processing2[]
  * [[VUID-{refpage}-OpImageBlockMatchWindow-09215]]
    If a code:OpImageBlockMatchWindow*QCOM or
    code:OpImageBlockMatchGather*QCOM instruction is used to read from an
    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_2_BLOCK_MATCHING_BIT_QCOM
  * [[VUID-{refpage}-OpImageBlockMatchWindow-09216]]
    If a code:OpImageBlockMatchWindow*QCOM or
    code:OpImageBlockMatchGather*QCOM instruction is used to read from an
    slink:VkImageView as a result of this command, then the image view's
    format must: be a single-component format.
  * [[VUID-{refpage}-OpImageBlockMatchWindow-09217]]
    If a code:OpImageBlockMatchWindow*QCOM or
    code:OpImageBlockMatchGather*QCOM read from a reference image as result
    of this command, then the specified reference coordinates must: not fail
    <<textures-integer-coordinate-validation,integer texel coordinate
    validation>>
endif::VK_QCOM_image_processing2[]
  * [[VUID-{refpage}-None-07288]]
    Any shader invocation executed by this command must:
    <<shaders-termination,terminate>>
// Common Valid Usage
