blob: ce6d0f72db482f4bcc746f283a0f326cfa1a72a8 [file] [log] [blame]
// Copyright 2020-2021 The Khronos Group Inc.
//
// SPDX-License-Identifier: CC-BY-4.0
// Common Valid Usage
// Common to commands copying from images to buffers, or buffers to images
// This relies on an additional attribute {imageparam} set by the command
// which includes this file, specifying the name of the source or
// destination image.
ifndef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-{refpage}-bufferOffset-00193]]
If {imageparam} does not have a depth/stencil format, then for each
element of pname:pRegions, pname:bufferOffset must: be a multiple of the
format's texel block size
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-{refpage}-bufferOffset-01558]]
If {imageparam} does not have either a depth/stencil or a
<<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, then
for each element of pname:pRegions, pname:bufferOffset must: be a
multiple of the format's texel block size
* [[VUID-{refpage}-bufferOffset-01559]]
If {imageparam} has a
<<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, then
for each element of pname:pRegions, pname:bufferOffset must: be a
multiple of the element size of the compatible format for the format and
the pname:aspectMask of the pname:imageSubresource as defined in
<<formats-compatible-planes>>
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-{refpage}-srcImage-00199]]
If {imageparam} is of type ename:VK_IMAGE_TYPE_1D, then for each element
of pname:pRegions, pname:imageOffset.y must: be `0` and
pname:imageExtent.height must: be `1`
* [[VUID-{refpage}-imageOffset-00200]]
For each element of pname:pRegions, pname:imageOffset.z and
[eq]#(pname:imageExtent.depth {plus} pname:imageOffset.z)# must: both be
greater than or equal to `0` and less than or equal to the depth of the
specified pname:imageSubresource of {imageparam}
* [[VUID-{refpage}-srcImage-00201]]
If {imageparam} is of type ename:VK_IMAGE_TYPE_1D or
ename:VK_IMAGE_TYPE_2D, then for each element of pname:pRegions,
pname:imageOffset.z must: be `0` and pname:imageExtent.depth must: be
`1`
* [[VUID-{refpage}-bufferRowLength-00203]]
If {imageparam} is a <<blocked-image, blocked image>>, for each element
of pname:pRegions, pname:bufferRowLength must: be a multiple of the
compressed texel block width
* [[VUID-{refpage}-bufferImageHeight-00204]]
If {imageparam} is a <<blocked-image, blocked image>>, for each element
of pname:pRegions, pname:bufferImageHeight must: be a multiple of the
compressed texel block height
* [[VUID-{refpage}-imageOffset-00205]]
If {imageparam} is a <<blocked-image, blocked image>>, for each element
of pname:pRegions, all members of pname:imageOffset must: be a multiple
of the corresponding dimensions of the compressed texel block
* [[VUID-{refpage}-bufferOffset-00206]]
If {imageparam} is a <<blocked-image, blocked image>>, for each element
of pname:pRegions, pname:bufferOffset must: be a multiple of the
compressed texel block size in bytes
* [[VUID-{refpage}-imageExtent-00207]]
If {imageparam} is a <<blocked-image, blocked image>>, for each element
of pname:pRegions, pname:imageExtent.width must: be a multiple of the
compressed texel block width or [eq]#(pname:imageExtent.width {plus}
pname:imageOffset.x)# must: equal the width of the specified
pname:imageSubresource of {imageparam}
* [[VUID-{refpage}-imageExtent-00208]]
If {imageparam} is a <<blocked-image, blocked image>>, for each element
of pname:pRegions, pname:imageExtent.height must: be a multiple of the
compressed texel block height or [eq]#(pname:imageExtent.height {plus}
pname:imageOffset.y)# must: equal the height of the specified
pname:imageSubresource of {imageparam}
* [[VUID-{refpage}-imageExtent-00209]]
If {imageparam} is a <<blocked-image, blocked image>>, for each element
of pname:pRegions, pname:imageExtent.depth must: be a multiple of the
compressed texel block depth or [eq]#(pname:imageExtent.depth {plus}
pname:imageOffset.z)# must: equal the depth of the specified
pname:imageSubresource of {imageparam}
* [[VUID-{refpage}-aspectMask-00211]]
For each element of pname:pRegions, pname:imageSubresource.aspectMask
must: specify aspects present in {imageparam}
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-{refpage}-aspectMask-01560]]
If {imageparam} has a
<<formats-requiring-sampler-ycbcr-conversion,multi-planar format>>, then
for each element of pname:pRegions, pname:imageSubresource.aspectMask
must: be ename:VK_IMAGE_ASPECT_PLANE_0_BIT,
ename:VK_IMAGE_ASPECT_PLANE_1_BIT, or ename:VK_IMAGE_ASPECT_PLANE_2_BIT
(with ename:VK_IMAGE_ASPECT_PLANE_2_BIT valid only for image formats
with three planes)
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
* [[VUID-{refpage}-baseArrayLayer-00213]]
If {imageparam} is of type ename:VK_IMAGE_TYPE_3D, for each element of
pname:pRegions, pname:imageSubresource.baseArrayLayer must: be `0` and
pname:imageSubresource.layerCount must: be `1`
* [[VUID-{refpage}-pRegions-04725]]
If {imageparam} is not a <<blocked-image, blocked image>>, for each
element of pname:pRegions, pname:bufferRowLength multiplied by the texel
block size of {imageparam} must: be less than or equal to [eq]#2^31^-1#
* [[VUID-{refpage}-pRegions-04726]]
If {imageparam} is a <<blocked-image, blocked image>>, for each element
of pname:pRegions, pname:bufferRowLength divided by the compressed texel
block width and then multiplied by the texel block size of {imageparam}
must: be less than or equal to [eq]#2^31^-1#
* [[VUID-{refpage}-commandBuffer-04052]]
If the queue family used to create the slink:VkCommandPool which
pname:commandBuffer was allocated from does not support
ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT, the
pname:bufferOffset member of any element of pname:pRegions must: be a
multiple of `4`
* [[VUID-{refpage}-srcImage-04053]]
If {imageparam} has a depth/stencil format, the pname:bufferOffset
member of any element of pname:pRegions must: be a multiple of `4`
// Common Valid Usage