VkCopyDeviceMemoryImageInfoKHR(3)

# VkCopyDeviceMemoryImageInfoKHR(3) Manual Page

## Name

VkCopyDeviceMemoryImageInfoKHR - Structure specifying copy operations between an image and memory ranges

## C Specification

The `VkCopyDeviceMemoryImageInfoKHR` structure is defined as:

    // Provided by VK_KHR_device_address_commands
    typedef struct VkCopyDeviceMemoryImageInfoKHR {
        VkStructureType                      sType;
        const void*                          pNext;
        VkImage                              image;
        uint32_t                             regionCount;
        const VkDeviceMemoryImageCopyKHR*    pRegions;
    } VkCopyDeviceMemoryImageInfoKHR;

## Members

- `sType` is a VkStructureType value identifying this structure.

- `pNext` is `NULL` or a pointer to a structure extending this structure.

- `image` is the base image accessed by the copy command.

- `regionCount` is the number of copies to be performed.

- `pRegions` is a pointer to an array of VkDeviceMemoryImageCopyKHR structures describing individual copy operations between two memory ranges.

## Description

Valid Usage

- VUID-VkCopyDeviceMemoryImageInfoKHR-addressRange-13026
  The range of memory backing the address range defined by the `addressRange` member of any element of `pRegions` must not overlap the memory backing the address range defined by the `addressRange` of any other element of `pRegions`

- VUID-VkCopyDeviceMemoryImageInfoKHR-addressRange-13027
  The range of memory backing the address range defined by the `addressRange` member of any element of `pRegions` must not overlap the memory backing any texels in `image` defined by the `imageSubresource`, `imageOffset`, and `imageExtent` members of any element of `pRegions`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageLayout-13028
  The `imageLayout` member of each element of `pRegions` must specify the layout of the image subresource specified for that element of `pRegions` at the time this command is executed on a VkDevice

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07966
  If `image` is non-sparse then the image or each specified disjoint plane must be bound completely and contiguously to a single `VkDeviceMemory` object

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageSubresource-07967
  The `imageSubresource.mipLevel` member of each element of `pRegions` must be less than the `mipLevels` specified in VkImageCreateInfo when `image` was created

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageSubresource-07968
  If `imageSubresource.layerCount` is not VK_REMAINING_ARRAY_LAYERS, `imageSubresource.baseArrayLayer` + `imageSubresource.layerCount` of each element of `pRegions` must be less than or equal to the `arrayLayers` specified in VkImageCreateInfo when `image` was created

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07969
  `image` must not have been created with `flags` containing VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07973
  `image` must have a sample count equal to VK_SAMPLE_COUNT_1_BIT

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07979
  If `image` is of type VK_IMAGE_TYPE_1D, then for each element of `pRegions`, `imageOffset.y` must be `0` and `imageExtent.height` must be `1`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageOffset-09104
  For each element of `pRegions`, `imageOffset.z` and (`imageExtent.depth` + `imageOffset.z`) must both be greater than or equal to `0` and less than or equal to the depth of the specified `imageSubresource` of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07980
  If `image` is of type VK_IMAGE_TYPE_1D or VK_IMAGE_TYPE_2D, then for each element of `pRegions`, `imageOffset.z` must be `0` and `imageExtent.depth` must be `1`

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07274
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, `imageOffset.x` must be a multiple of the texel block extent width of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageOffset-10051
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, and `imageOffset.x` does not equal the width of the subresource specified by `imageSubresource`, `imageOffset.x` must be a multiple of the texel block extent width of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07275
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, `imageOffset.y` must be a multiple of the texel block extent height of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageOffset-10052
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR or VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, and `imageOffset.y` does not equal the height of the subresource specified by `imageSubresource`, `imageOffset.y` must be a multiple of the texel block extent height of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07276
  For each element of `pRegions`, `imageOffset.z` must be a multiple of the texel block extent depth of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-00207
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, the sum of `imageOffset.x` and `extent.width` does not equal the width of the subresource specified by `imageSubresource`, `extent.width` must be a multiple of the texel block extent width of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageOffset-10053
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the difference of `imageOffset.x` and `extent.height` must be a multiple of the texel block extent width of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageOffset-10054
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of `imageOffset.x` and `extent.width` must be a multiple of the texel block extent width of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageOffset-10055
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the sum of `imageOffset.x` and `extent.height` does not equal the width of the subresource specified by `imageSubresource`, `extent.height` must be a multiple of the texel block extent width of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-00208
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, and the sum of `imageOffset.y` and `extent.height` does not equal the height of the subresource specified by `imageSubresource`, `extent.height` must be a multiple of the texel block extent height of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageOffset-10056
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR, the sum of `imageOffset.y` and `extent.width` does not equal the height of the subresource specified by `imageSubresource`, `extent.width` must be a multiple of the texel block extent height of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageOffset-10057
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR, the difference of `imageOffset.y` and `extent.height` must be a multiple of the texel block extent height of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageOffset-10058
  For each element of `pRegions`, if VkCopyCommandTransformInfoQCOM::`transform` is equal to VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR, the difference of `imageOffset.y` and `extent.width` must be a multiple of the texel block extent height of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-00209
  For each element of `pRegions`, if the sum of `imageOffset.z` and `extent.depth` does not equal the depth of the subresource specified by `srcSubresource`, `extent.depth` must be a multiple of the texel block extent depth of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-imageSubresource-09105
  For each element of `pRegions`, `imageSubresource.aspectMask` must specify aspects present in `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07981
  If `image` has a multi-planar format, then for each element of `pRegions`, `imageSubresource.aspectMask` must be a single valid multi-planar aspect mask bit

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-07983
  If `image` is of type VK_IMAGE_TYPE_3D, for each element of `pRegions`, `imageSubresource.baseArrayLayer` must be `0` and `imageSubresource.layerCount` must be `1`

- VUID-VkCopyDeviceMemoryImageInfoKHR-addressRowLength-09106
  For each element of `pRegions`, `addressRowLength` must be a multiple of the texel block extent width of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-addressImageHeight-09107
  For each element of `pRegions`, `addressImageHeight` must be a multiple of the texel block extent height of the VkFormat of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-addressRowLength-09108
  For each element of `pRegions`, `addressRowLength` divided by the texel block extent width and then multiplied by the texel block size of `image` must be less than or equal to 231-1

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-13029
  If `image` does not have either a depth/stencil format or a multi-planar format, then for each element of `pRegions`, `addressRange.address` must be a multiple of the texel block size

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-13030
  If `image` has a multi-planar format, then for each element of `pRegions`, `addressRange.address` must be a multiple of the element size of the compatible format for the format and the `aspectMask` of the `imageSubresource` as defined in https://registry.khronos.org/vulkan/specs/latest/html/vkspec.html#formats-compatible-planes

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-13031
  If `image` has a depth/stencil format, the `addressRange.address` member of any element of `pRegions` must be a multiple of `4`

- VUID-VkCopyDeviceMemoryImageInfoKHR-pRegions-13032
  The image region specified by each element of `pRegions` that does not contain VkCopyCommandTransformInfoQCOM in its `pNext` chain must be contained within the specified `imageSubresource` of `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-pRegions-13033
  If the image region specified by each element of `pRegions` contains VkCopyCommandTransformInfoQCOM in its `pNext` chain, the rotated image region must be contained within `image`

- VUID-VkCopyDeviceMemoryImageInfoKHR-pRegions-13034
  If any element of `pRegions` contains VkCopyCommandTransformInfoQCOM in its `pNext` chain, then `image` must have a 1x1x1 texel block extent

- VUID-VkCopyDeviceMemoryImageInfoKHR-pRegions-13035
  If any element of `pRegions` contains VkCopyCommandTransformInfoQCOM in its `pNext` chain, then `image` must be of type VK_IMAGE_TYPE_2D

- VUID-VkCopyDeviceMemoryImageInfoKHR-pRegions-13036
  If any element of `pRegions` contains VkCopyCommandTransformInfoQCOM in its `pNext` chain, then `image` must not have a multi-planar format

Valid Usage (Implicit)

- VUID-VkCopyDeviceMemoryImageInfoKHR-sType-sType
  `sType` must be VK_STRUCTURE_TYPE_COPY_DEVICE_MEMORY_IMAGE_INFO_KHR

- VUID-VkCopyDeviceMemoryImageInfoKHR-pNext-pNext
  `pNext` must be `NULL`

- VUID-VkCopyDeviceMemoryImageInfoKHR-image-parameter
  `image` must be a valid VkImage handle

- VUID-VkCopyDeviceMemoryImageInfoKHR-pRegions-parameter
  `pRegions` must be a valid pointer to an array of `regionCount` valid VkDeviceMemoryImageCopyKHR structures

- VUID-VkCopyDeviceMemoryImageInfoKHR-regionCount-arraylength
  `regionCount` must be greater than `0`

## See Also

VK_KHR_device_address_commands, VkDeviceMemoryImageCopyKHR, VkImage, VkStructureType, vkCmdCopyImageToMemoryKHR, vkCmdCopyMemoryToImageKHR

## Document Notes

For more information, see the Vulkan Specification.

This page is extracted from the Vulkan Specification. Fixes and changes should be made to the Specification, not directly.

## Copyright

Copyright 2014-2026 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0