| // Copyright 2020-2021 The Khronos Group Inc. |
| // |
| // SPDX-License-Identifier: CC-BY-4.0 |
| |
| // Common Valid Usage |
| // Common to VkCmdBlitImage* commands |
| * [[VUID-{refpage}-pRegions-00215]] |
| The source region specified by each element of pname:pRegions must: be a |
| region that is contained within pname:srcImage |
| * [[VUID-{refpage}-pRegions-00216]] |
| The destination region specified by each element of pname:pRegions must: |
| be a region that is contained within pname:dstImage |
| * [[VUID-{refpage}-pRegions-00217]] |
| The union of all destination regions, specified by the elements of |
| pname:pRegions, must: not overlap in memory with any texel that may: be |
| sampled during the blit operation |
| * [[VUID-{refpage}-srcImage-01999]] |
| The <<resources-image-format-features,format features>> of |
| pname:srcImage must: contain ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| * [[VUID-{refpage}-srcImage-06421]] |
| pname:srcImage must: not use a |
| <<formats-requiring-sampler-ycbcr-conversion, format that requires a |
| sampler Y'C~B~C~R~ conversion>> |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| * [[VUID-{refpage}-srcImage-00219]] |
| pname:srcImage must: have been created with |
| ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag |
| * [[VUID-{refpage}-srcImage-00220]] |
| If pname:srcImage is non-sparse then it must: be bound completely and |
| contiguously to a single sname:VkDeviceMemory object |
| * [[VUID-{refpage}-srcImageLayout-00221]] |
| pname:srcImageLayout must: specify the layout of the image subresources |
| of pname:srcImage specified in pname:pRegions at the time this command |
| is executed on a sname:VkDevice |
| ifndef::VK_KHR_shared_presentable_image[] |
| * [[VUID-{refpage}-srcImageLayout-00222]] |
| pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL |
| or ename:VK_IMAGE_LAYOUT_GENERAL |
| endif::VK_KHR_shared_presentable_image[] |
| ifdef::VK_KHR_shared_presentable_image[] |
| * [[VUID-{refpage}-srcImageLayout-01398]] |
| pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, |
| ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or |
| ename:VK_IMAGE_LAYOUT_GENERAL |
| endif::VK_KHR_shared_presentable_image[] |
| * [[VUID-{refpage}-dstImage-02000]] |
| The <<resources-image-format-features,format features>> of |
| pname:dstImage must: contain ename:VK_FORMAT_FEATURE_BLIT_DST_BIT |
| ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| * [[VUID-{refpage}-dstImage-06422]] |
| pname:dstImage must: not use a |
| <<formats-requiring-sampler-ycbcr-conversion, format that requires a |
| sampler Y'C~B~C~R~ conversion>> |
| endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[] |
| * [[VUID-{refpage}-dstImage-00224]] |
| pname:dstImage must: have been created with |
| ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag |
| * [[VUID-{refpage}-dstImage-00225]] |
| If pname:dstImage is non-sparse then it must: be bound completely and |
| contiguously to a single sname:VkDeviceMemory object |
| * [[VUID-{refpage}-dstImageLayout-00226]] |
| pname:dstImageLayout must: specify the layout of the image subresources |
| of pname:dstImage specified in pname:pRegions at the time this command |
| is executed on a sname:VkDevice |
| ifndef::VK_KHR_shared_presentable_image[] |
| * [[VUID-{refpage}-dstImageLayout-00227]] |
| pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL |
| or ename:VK_IMAGE_LAYOUT_GENERAL |
| endif::VK_KHR_shared_presentable_image[] |
| ifdef::VK_KHR_shared_presentable_image[] |
| * [[VUID-{refpage}-dstImageLayout-01399]] |
| pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR, |
| ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or |
| ename:VK_IMAGE_LAYOUT_GENERAL |
| endif::VK_KHR_shared_presentable_image[] |
| * [[VUID-{refpage}-srcImage-00229]] |
| If either of pname:srcImage or pname:dstImage was created with a signed |
| integer elink:VkFormat, the other must: also have been created with a |
| signed integer elink:VkFormat |
| * [[VUID-{refpage}-srcImage-00230]] |
| If either of pname:srcImage or pname:dstImage was created with an |
| unsigned integer elink:VkFormat, the other must: also have been created |
| with an unsigned integer elink:VkFormat |
| * [[VUID-{refpage}-srcImage-00231]] |
| If either of pname:srcImage or pname:dstImage was created with a |
| depth/stencil format, the other must: have exactly the same format |
| * [[VUID-{refpage}-srcImage-00232]] |
| If pname:srcImage was created with a depth/stencil format, pname:filter |
| must: be ename:VK_FILTER_NEAREST |
| * [[VUID-{refpage}-srcImage-00233]] |
| pname:srcImage must: have been created with a pname:samples value of |
| ename:VK_SAMPLE_COUNT_1_BIT |
| * [[VUID-{refpage}-dstImage-00234]] |
| pname:dstImage must: have been created with a pname:samples value of |
| ename:VK_SAMPLE_COUNT_1_BIT |
| * [[VUID-{refpage}-filter-02001]] |
| If pname:filter is ename:VK_FILTER_LINEAR, then the |
| <<resources-image-format-features,format features>> of pname:srcImage |
| must: contain ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT |
| ifdef::VK_IMG_filter_cubic,VK_EXT_filter_cubic[] |
| * [[VUID-{refpage}-filter-02002]] |
| If pname:filter is ename:VK_FILTER_CUBIC_EXT, then the |
| <<resources-image-format-features,format features>> of pname:srcImage |
| must: contain ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT |
| * [[VUID-{refpage}-filter-00237]] |
| If pname:filter is ename:VK_FILTER_CUBIC_EXT, pname:srcImage must: be of |
| type ename:VK_IMAGE_TYPE_2D |
| endif::VK_IMG_filter_cubic,VK_EXT_filter_cubic[] |
| * [[VUID-{refpage}-srcSubresource-01705]] |
| The pname:srcSubresource.mipLevel member of each element of |
| pname:pRegions must: be less than the pname:mipLevels specified in |
| slink:VkImageCreateInfo when pname:srcImage was created |
| * [[VUID-{refpage}-dstSubresource-01706]] |
| The pname:dstSubresource.mipLevel member of each element of |
| pname:pRegions must: be less than the pname:mipLevels specified in |
| slink:VkImageCreateInfo when pname:dstImage was created |
| * [[VUID-{refpage}-srcSubresource-01707]] |
| The [eq]#pname:srcSubresource.baseArrayLayer {plus} |
| pname:srcSubresource.layerCount# of each element of pname:pRegions must: |
| be less than or equal to the pname:arrayLayers specified in |
| slink:VkImageCreateInfo when pname:srcImage was created |
| * [[VUID-{refpage}-dstSubresource-01708]] |
| The [eq]#pname:dstSubresource.baseArrayLayer {plus} |
| pname:dstSubresource.layerCount# of each element of pname:pRegions must: |
| be less than or equal to the pname:arrayLayers specified in |
| slink:VkImageCreateInfo when pname:dstImage was created |
| ifdef::VK_EXT_fragment_density_map[] |
| * [[VUID-{refpage}-dstImage-02545]] |
| pname:dstImage and pname:srcImage must: not have been created with |
| pname:flags containing ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT |
| endif::VK_EXT_fragment_density_map[] |
| // Common Valid Usage |
| * [[VUID-{refpage}-srcImage-00240]] |
| If either pname:srcImage or pname:dstImage is of type |
| ename:VK_IMAGE_TYPE_3D, then for each element of pname:pRegions, |
| pname:srcSubresource.baseArrayLayer and |
| pname:dstSubresource.baseArrayLayer must: each be `0`, and |
| pname:srcSubresource.layerCount and pname:dstSubresource.layerCount |
| must: each be `1` |
| * [[VUID-{refpage}-aspectMask-00241]] |
| For each element of pname:pRegions, pname:srcSubresource.aspectMask |
| must: specify aspects present in pname:srcImage |
| * [[VUID-{refpage}-aspectMask-00242]] |
| For each element of pname:pRegions, pname:dstSubresource.aspectMask |
| must: specify aspects present in pname:dstImage |
| * [[VUID-{refpage}-srcOffset-00243]] |
| For each element of pname:pRegions, pname:srcOffsets[0].x and |
| pname:srcOffsets[1].x must: both be greater than or equal to `0` and |
| less than or equal to the width of the specified pname:srcSubresource of |
| pname:srcImage |
| * [[VUID-{refpage}-srcOffset-00244]] |
| For each element of pname:pRegions, pname:srcOffsets[0].y and |
| pname:srcOffsets[1].y must: both be greater than or equal to `0` and |
| less than or equal to the height of the specified pname:srcSubresource |
| of pname:srcImage |
| * [[VUID-{refpage}-srcImage-00245]] |
| If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D, then for each |
| element of pname:pRegions, pname:srcOffsets[0].y must: be `0` and |
| pname:srcOffsets[1].y must: be `1` |
| * [[VUID-{refpage}-srcOffset-00246]] |
| For each element of pname:pRegions, pname:srcOffsets[0].z and |
| pname:srcOffsets[1].z must: both be greater than or equal to `0` and |
| less than or equal to the depth of the specified pname:srcSubresource of |
| pname:srcImage |
| * [[VUID-{refpage}-srcImage-00247]] |
| If pname:srcImage is of type ename:VK_IMAGE_TYPE_1D or |
| ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions, |
| pname:srcOffsets[0].z must: be `0` and pname:srcOffsets[1].z must: be |
| `1` |
| * [[VUID-{refpage}-dstOffset-00248]] |
| For each element of pname:pRegions, pname:dstOffsets[0].x and |
| pname:dstOffsets[1].x must: both be greater than or equal to `0` and |
| less than or equal to the width of the specified pname:dstSubresource of |
| pname:dstImage |
| * [[VUID-{refpage}-dstOffset-00249]] |
| For each element of pname:pRegions, pname:dstOffsets[0].y and |
| pname:dstOffsets[1].y must: both be greater than or equal to `0` and |
| less than or equal to the height of the specified pname:dstSubresource |
| of pname:dstImage |
| * [[VUID-{refpage}-dstImage-00250]] |
| If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D, then for each |
| element of pname:pRegions, pname:dstOffsets[0].y must: be `0` and |
| pname:dstOffsets[1].y must: be `1` |
| * [[VUID-{refpage}-dstOffset-00251]] |
| For each element of pname:pRegions, pname:dstOffsets[0].z and |
| pname:dstOffsets[1].z must: both be greater than or equal to `0` and |
| less than or equal to the depth of the specified pname:dstSubresource of |
| pname:dstImage |
| * [[VUID-{refpage}-dstImage-00252]] |
| If pname:dstImage is of type ename:VK_IMAGE_TYPE_1D or |
| ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions, |
| pname:dstOffsets[0].z must: be `0` and pname:dstOffsets[1].z must: be |
| `1` |