# VkCopyMemoryIndirectInfoKHR(3) Manual Page

## Name

VkCopyMemoryIndirectInfoKHR - Parameters describing indirect copy parameters

Loading… please wait.

## C Specification

The VkCopyMemoryIndirectInfoKHR structure is defined as:

    // Provided by VK_KHR_copy_memory_indirect
    typedef struct VkCopyMemoryIndirectInfoKHR {
        VkStructureType                   sType;
        const void*                       pNext;
        VkAddressCopyFlagsKHR             srcCopyFlags;
        VkAddressCopyFlagsKHR             dstCopyFlags;
        uint32_t                          copyCount;
        VkStridedDeviceAddressRangeKHR    copyAddressRange;
    } VkCopyMemoryIndirectInfoKHR;

## Members

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

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

- `srcCopyFlags` is a VkAddressCopyFlagsKHR value defining the copy flags for the source address range.

- `dstCopyFlags` is a VkAddressCopyFlagsKHR value defining the copy flags for the destination address range.

- `copyCount` is the number of copies to execute, and can be zero.

- `copyAddressRange` is a memory region specifying the copy parameters. It is laid out as an array of VkCopyMemoryIndirectCommandKHR structures.

## Description

Valid Usage

- VUID-VkCopyMemoryIndirectInfoKHR-srcCopyFlags-10938
  If `srcCopyFlags` contains `VK_ADDRESS_COPY_SPARSE_BIT_KHR`, the source memory regions accessed must be bound to memory

- VUID-VkCopyMemoryIndirectInfoKHR-dstCopyFlags-10939
  If `dstCopyFlags` contains `VK_ADDRESS_COPY_SPARSE_BIT_KHR`, the destination memory regions accessed must be bound to memory

- VUID-VkCopyMemoryIndirectInfoKHR-srcCopyFlags-10940
  `srcCopyFlags` must not contain `VK_ADDRESS_COPY_PROTECTED_BIT_KHR`

- VUID-VkCopyMemoryIndirectInfoKHR-dstCopyFlags-10941
  `dstCopyFlags` must not contain `VK_ADDRESS_COPY_PROTECTED_BIT_KHR`

- VUID-VkCopyMemoryIndirectInfoKHR-copyAddressRange-10942
  `copyAddressRange.address` must be 4 byte aligned

- VUID-VkCopyMemoryIndirectInfoKHR-copyAddressRange-10943
  `copyAddressRange.stride` must be a multiple of `4` and must be greater than or equal to sizeof(VkCopyMemoryIndirectCommandKHR)

- VUID-VkCopyMemoryIndirectInfoKHR-copyCount-10944
  `copyCount` must be less than or equal to `copyAddressRange.size` / `copyAddressRange.stride`

- VUID-VkCopyMemoryIndirectInfoKHR-copyAddressRange-10945
  Any of the source or destination memory regions specified in `copyAddressRange` must not overlap with any of the specified destination memory regions

- VUID-VkCopyMemoryIndirectInfoKHR-copyAddressRange-12210
  `copyAddressRange` must be a device address range allocated to the application from a buffer created with the `VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT` usage flag set

Valid Usage (Implicit)

- VUID-VkCopyMemoryIndirectInfoKHR-sType-sType
  `sType` must be `VK_STRUCTURE_TYPE_COPY_MEMORY_INDIRECT_INFO_KHR`

- VUID-VkCopyMemoryIndirectInfoKHR-pNext-pNext
  `pNext` must be `NULL`

- VUID-VkCopyMemoryIndirectInfoKHR-srcCopyFlags-parameter
  `srcCopyFlags` must be a valid combination of VkAddressCopyFlagBitsKHR values

- VUID-VkCopyMemoryIndirectInfoKHR-srcCopyFlags-requiredbitmask
  `srcCopyFlags` must not be `0`

- VUID-VkCopyMemoryIndirectInfoKHR-dstCopyFlags-parameter
  `dstCopyFlags` must be a valid combination of VkAddressCopyFlagBitsKHR values

- VUID-VkCopyMemoryIndirectInfoKHR-dstCopyFlags-requiredbitmask
  `dstCopyFlags` must not be `0`

## See Also

VK_KHR_copy_memory_indirect, VkAddressCopyFlagsKHR, VkStridedDeviceAddressRangeKHR, VkStructureType, vkCmdCopyMemoryIndirectKHR

## 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-2025 The Khronos Group Inc.

SPDX-License-Identifier: CC-BY-4.0