VkDeviceMemoryImageCopyKHR(3)

# VkDeviceMemoryImageCopyKHR(3) Manual Page

## Name

VkDeviceMemoryImageCopyKHR - Structure specifying a copy operation between a memory range and texels in an image

## C Specification

The `VkDeviceMemoryImageCopyKHR` structure is defined as:

    // Provided by VK_KHR_device_address_commands
    typedef struct VkDeviceMemoryImageCopyKHR {
        VkStructureType             sType;
        const void*                 pNext;
        VkDeviceAddressRangeKHR     addressRange;
        VkAddressCommandFlagsKHR    addressFlags;
        uint32_t                    addressRowLength;
        uint32_t                    addressImageHeight;
        VkImageSubresourceLayers    imageSubresource;
        VkImageLayout               imageLayout;
        VkOffset3D                  imageOffset;
        VkExtent3D                  imageExtent;
    } VkDeviceMemoryImageCopyKHR;

## Members

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

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

- `addressRange` is a VkDeviceAddressRangeKHR structure defining the address range accessed by the copy operation.

- `addressFlags` is a VkAddressCommandFlagsKHR value defining the copy flags for the source address range.

- `addressRowLength` specifies the total number of texels in the address range representing a row of texels in the x dimension. Each new row of pixels in the copy will be read at an offset increment by this number of texels.

- `addressImageHeight` specifies the total number of rows of texels in the address range representing a 2D slice of texels in the x and y dimensions. Each new 2D slice of pixels in the copy will be read at an offset increment by this number of rows of texels.

- `imageSubresource` is a VkImageSubresourceLayers used to specify the specific image subresources of the image used for the source or destination image data.

- `imageLayout` is the VkImageLayout of the image subresource accessed by this copy.

- `imageOffset` selects the initial `x`, `y`, `z` offsets in texels of the sub-region of the source or destination image data.

- `imageExtent` is the size in texels of the image to copy in `width`, `height` and `depth`.

## Description

This structure defines a copy operation where `srcRange.size` bytes will be copied from `srcRange.address` to `dstRange.address`.

Valid Usage

- VUID-VkDeviceMemoryImageCopyKHR-addressRange-13097
  If the range specified by `addressRange` is not bound completely to memory when accessed, `addressFlags` must not include VK_ADDRESS_COMMAND_FULLY_BOUND_BIT_KHR

- VUID-VkDeviceMemoryImageCopyKHR-addressRange-13098
  If the buffer from which the range specified by `addressRange` was created with VK_BUFFER_CREATE_PROTECTED_BIT, and `protectedNoFault` is not supported, `addressFlags` must include VK_ADDRESS_COMMAND_PROTECTED_BIT_KHR

- VUID-VkDeviceMemoryImageCopyKHR-addressRange-13099
  If the buffer from which the range specified by `addressRange` was created without VK_BUFFER_CREATE_PROTECTED_BIT, and `protectedNoFault` is not supported, `addressFlags` must not include VK_ADDRESS_COMMAND_PROTECTED_BIT_KHR

- VUID-VkDeviceMemoryImageCopyKHR-addressFlags-13100
  `addressFlags` must not include both VK_ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR and VK_ADDRESS_COMMAND_UNKNOWN_STORAGE_BUFFER_USAGE_BIT_KHR

- VUID-VkDeviceMemoryImageCopyKHR-addressRange-13122
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `addressRange`, was created with VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, `addressFlags` must include VK_ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR or VK_ADDRESS_COMMAND_UNKNOWN_STORAGE_BUFFER_USAGE_BIT_KHR

- VUID-VkDeviceMemoryImageCopyKHR-addressRange-13123
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `addressRange`, was created without VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, `addressFlags` must not include VK_ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR

- VUID-VkDeviceMemoryImageCopyKHR-addressFlags-13101
  `addressFlags` must not include both VK_ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR and VK_ADDRESS_COMMAND_UNKNOWN_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR

- VUID-VkDeviceMemoryImageCopyKHR-addressRange-13124
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `addressRange`, was created with VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT, `addressFlags` must include VK_ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR or VK_ADDRESS_COMMAND_UNKNOWN_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR

- VUID-VkDeviceMemoryImageCopyKHR-addressRange-13125
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `addressRange`, was created without VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT, `addressFlags` must not include VK_ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR

- VUID-VkDeviceMemoryImageCopyKHR-size-13037
  The `size` member of `addressRange` must be large enough to contain all address locations that are accessed by this copy according to Buffer and Image Addressing

- VUID-VkDeviceMemoryImageCopyKHR-addressRowLength-09101
  `addressRowLength` must be `0`, or greater than or equal to the `width` member of `imageExtent`

- VUID-VkDeviceMemoryImageCopyKHR-addressImageHeight-09102
  `addressImageHeight` must be `0`, or greater than or equal to the `height` member of `imageExtent`

- VUID-VkDeviceMemoryImageCopyKHR-aspectMask-09103
  The `aspectMask` member of `imageSubresource` must only have a single bit set

- VUID-VkDeviceMemoryImageCopyKHR-imageExtent-06659
  `imageExtent.width` must not be 0

- VUID-VkDeviceMemoryImageCopyKHR-imageExtent-06660
  `imageExtent.height` must not be 0

- VUID-VkDeviceMemoryImageCopyKHR-imageExtent-06661
  `imageExtent.depth` must not be 0

Valid Usage (Implicit)

- VUID-VkDeviceMemoryImageCopyKHR-sType-sType
  `sType` must be VK_STRUCTURE_TYPE_DEVICE_MEMORY_IMAGE_COPY_KHR

- VUID-VkDeviceMemoryImageCopyKHR-pNext-pNext
  `pNext` must be `NULL` or a pointer to a valid instance of VkCopyCommandTransformInfoQCOM

- VUID-VkDeviceMemoryImageCopyKHR-sType-unique
  The `sType` value of each structure in the `pNext` chain must be unique

- VUID-VkDeviceMemoryImageCopyKHR-addressFlags-parameter
  `addressFlags` must be a valid combination of VkAddressCommandFlagBitsKHR values

- VUID-VkDeviceMemoryImageCopyKHR-imageSubresource-parameter
  `imageSubresource` must be a valid VkImageSubresourceLayers structure

- VUID-VkDeviceMemoryImageCopyKHR-imageLayout-parameter
  `imageLayout` must be a valid VkImageLayout value

## See Also

VK_KHR_device_address_commands, VkAddressCommandFlagsKHR, VkCopyDeviceMemoryImageInfoKHR, VkDeviceAddressRangeKHR, VkExtent3D, VkImageLayout, VkImageSubresourceLayers, VkOffset3D, VkStructureType

## 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