Structures

VkDeviceMemoryImageCopyKHR

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

The VkDeviceMemoryImageCopyKHR structure is defined as:

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;
  • 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.

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

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