Function Prototype

vkCmdCopyMemoryIndirectKHR

Copy data between memory regions

To copy data between two memory regions by specifying copy parameters indirectly in memory, call:

void vkCmdCopyMemoryIndirectKHR(
    VkCommandBuffer commandBuffer,
    const VkCopyMemoryIndirectInfoKHR* pCopyMemoryIndirectInfo);
  • commandBuffer is the command buffer into which the command will be recorded.
  • pCopyMemoryIndirectInfo is a pointer to a VkCopyMemoryIndirectInfoKHR structure containing the copy parameters, including the number of copies to execute and a strided array of VkCopyMemoryIndirectCommandKHR structures.

Each region specified in the memory referenced by pCopyMemoryIndirectInfo→copyAddressRange is copied from the source region to the specified destination region. The results are undefined if any of the source and destination regions overlap in memory.

Valid Usage

VUID-vkCmdCopyMemoryIndirectKHR-commandBuffer-10936

The VkCommandPool that commandBuffer was allocated from must support at least one of the queue types specified in VkPhysicalDeviceCopyMemoryIndirectPropertiesKHR::supportedQueues

VUID-vkCmdCopyMemoryIndirectKHR-commandBuffer-10937

commandBuffer must not be a protected command buffer

Valid Usage (Implicit)

VUID-vkCmdCopyMemoryIndirectKHR-pCopyMemoryIndirectInfo-parameter

pCopyMemoryIndirectInfo must be a valid pointer to a valid VkCopyMemoryIndirectInfoKHR structure

VUID-vkCmdCopyMemoryIndirectKHR-commandBuffer-cmdpool

The VkCommandPool that commandBuffer was allocated from must support VK_QUEUE_COMPUTE_BIT, VK_QUEUE_GRAPHICS_BIT, or VK_QUEUE_TRANSFER_BIT operations

VUID-vkCmdCopyMemoryIndirectKHR-renderpass

This command must only be called outside of a render pass instance

VUID-vkCmdCopyMemoryIndirectKHR-suspended

This command must not be called between suspended render pass instances

VUID-vkCmdCopyMemoryIndirectKHR-videocoding

This command must only be called outside of a video coding scope

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the VkCommandPool that commandBuffer was allocated from must be externally synchronized