VkDeviceMemoryCopyKHR(3)

# VkDeviceMemoryCopyKHR(3) Manual Page

## Name

VkDeviceMemoryCopyKHR - Structure specifying a memory range copy operation

## C Specification

The `VkDeviceMemoryCopyKHR` structure is defined as:

    // Provided by VK_KHR_device_address_commands
    typedef struct VkDeviceMemoryCopyKHR {
        VkStructureType             sType;
        const void*                 pNext;
        VkDeviceAddressRangeKHR     srcRange;
        VkAddressCommandFlagsKHR    srcFlags;
        VkDeviceAddressRangeKHR     dstRange;
        VkAddressCommandFlagsKHR    dstFlags;
    } VkDeviceMemoryCopyKHR;

## Members

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

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

- `srcRange` is a VkDeviceAddressRangeKHR structure defining the source memory to copy from.

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

- `dstRange` is a VkDeviceAddressRangeKHR structure defining the destination memory to copy to.

- `dstFlags` is a VkAddressCommandFlagsKHR value defining the copy flags for the destination address range.

## Description

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

Valid Usage

- VUID-VkDeviceMemoryCopyKHR-srcRange-13097
  If the range specified by `srcRange` is not bound completely to memory when accessed, `srcFlags` must not include VK_ADDRESS_COMMAND_FULLY_BOUND_BIT_KHR

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

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

- VUID-VkDeviceMemoryCopyKHR-srcFlags-13100
  `srcFlags` must not include both VK_ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR and VK_ADDRESS_COMMAND_UNKNOWN_STORAGE_BUFFER_USAGE_BIT_KHR

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

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

- VUID-VkDeviceMemoryCopyKHR-srcFlags-13101
  `srcFlags` 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-VkDeviceMemoryCopyKHR-srcRange-13124
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `srcRange`, was created with VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT, `srcFlags` must include VK_ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR or VK_ADDRESS_COMMAND_UNKNOWN_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR

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

- VUID-VkDeviceMemoryCopyKHR-dstRange-13097
  If the range specified by `dstRange` is not bound completely to memory when accessed, `dstFlags` must not include VK_ADDRESS_COMMAND_FULLY_BOUND_BIT_KHR

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

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

- VUID-VkDeviceMemoryCopyKHR-dstFlags-13100
  `dstFlags` must not include both VK_ADDRESS_COMMAND_STORAGE_BUFFER_USAGE_BIT_KHR and VK_ADDRESS_COMMAND_UNKNOWN_STORAGE_BUFFER_USAGE_BIT_KHR

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

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

- VUID-VkDeviceMemoryCopyKHR-dstFlags-13101
  `dstFlags` 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-VkDeviceMemoryCopyKHR-dstRange-13124
  If any buffer, which is bound to a range of VkDeviceMemory that overlaps the range backing `dstRange`, was created with VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT, `dstFlags` must include VK_ADDRESS_COMMAND_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR or VK_ADDRESS_COMMAND_UNKNOWN_TRANSFORM_FEEDBACK_BUFFER_USAGE_BIT_KHR

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

- VUID-VkDeviceMemoryCopyKHR-size-13016
  The `size` member of `dstRange` must be greater than or equal to the `size` member of `srcRange`

- VUID-VkDeviceMemoryCopyKHR-srcRange-13017
  The buffer from which `srcRange` was queried must have been created with VK_BUFFER_USAGE_TRANSFER_SRC_BIT

- VUID-VkDeviceMemoryCopyKHR-dstRange-13018
  The buffer from which `dstRange` was queried must have been created with VK_BUFFER_USAGE_TRANSFER_DST_BIT

Valid Usage (Implicit)

- VUID-VkDeviceMemoryCopyKHR-sType-sType
  `sType` must be VK_STRUCTURE_TYPE_DEVICE_MEMORY_COPY_KHR

- VUID-VkDeviceMemoryCopyKHR-pNext-pNext
  `pNext` must be `NULL`

- VUID-VkDeviceMemoryCopyKHR-srcFlags-parameter
  `srcFlags` must be a valid combination of VkAddressCommandFlagBitsKHR values

- VUID-VkDeviceMemoryCopyKHR-dstFlags-parameter
  `dstFlags` must be a valid combination of VkAddressCommandFlagBitsKHR values

## See Also

VK_KHR_device_address_commands, VkAddressCommandFlagsKHR, VkCopyDeviceMemoryInfoKHR, VkDeviceAddressRangeKHR, 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