## C Specification

The VkCopyDescriptorSet structure is defined as:

// Provided by VK_VERSION_1_0
typedef struct VkCopyDescriptorSet {
VkStructureType    sType;
const void*        pNext;
VkDescriptorSet    srcSet;
uint32_t           srcBinding;
uint32_t           srcArrayElement;
VkDescriptorSet    dstSet;
uint32_t           dstBinding;
uint32_t           dstArrayElement;
uint32_t           descriptorCount;
} VkCopyDescriptorSet;

## Members

• sType is the type of this structure.

• pNext is NULL or a pointer to a structure extending this structure.

• srcSet, srcBinding, and srcArrayElement are the source set, binding, and array element, respectively. If the descriptor binding identified by srcSet and srcBinding has a descriptor type of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then srcArrayElement specifies the starting byte offset within the binding to copy from.

• dstSet, dstBinding, and dstArrayElement are the destination set, binding, and array element, respectively. If the descriptor binding identified by dstSet and dstBinding has a descriptor type of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then dstArrayElement specifies the starting byte offset within the binding to copy to.

• descriptorCount is the number of descriptors to copy from the source to destination. If descriptorCount is greater than the number of remaining array elements in the source or destination binding, those affect consecutive bindings in a manner similar to VkWriteDescriptorSet above. If the descriptor binding identified by srcSet and srcBinding has a descriptor type of VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT then descriptorCount specifies the number of bytes to copy and the remaining array elements in the source or destination binding refer to the remaining number of bytes in those.

## Description

Valid Usage
• VUID-VkCopyDescriptorSet-srcBinding-00345
srcBinding must be a valid binding within srcSet

• VUID-VkCopyDescriptorSet-srcArrayElement-00346
The sum of srcArrayElement and descriptorCount must be less than or equal to the number of array elements in the descriptor set binding specified by srcBinding, and all applicable consecutive bindings, as described by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive

• VUID-VkCopyDescriptorSet-dstBinding-00347
dstBinding must be a valid binding within dstSet

• VUID-VkCopyDescriptorSet-dstArrayElement-00348
The sum of dstArrayElement and descriptorCount must be less than or equal to the number of array elements in the descriptor set binding specified by dstBinding, and all applicable consecutive bindings, as described by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive

• VUID-VkCopyDescriptorSet-dstBinding-02632
The type of dstBinding within dstSet must be equal to the type of srcBinding within srcSet

• VUID-VkCopyDescriptorSet-srcSet-00349
If srcSet is equal to dstSet, then the source and destination ranges of descriptors must not overlap, where the ranges may include array elements from consecutive bindings as described by https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-updates-consecutive

• VUID-VkCopyDescriptorSet-srcBinding-02223
If the descriptor type of the descriptor set binding specified by srcBinding is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, srcArrayElement must be an integer multiple of 4

• VUID-VkCopyDescriptorSet-dstBinding-02224
If the descriptor type of the descriptor set binding specified by dstBinding is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, dstArrayElement must be an integer multiple of 4

• VUID-VkCopyDescriptorSet-srcBinding-02225
If the descriptor type of the descriptor set binding specified by either srcBinding or dstBinding is VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT, descriptorCount must be an integer multiple of 4

• VUID-VkCopyDescriptorSet-srcSet-01918
If srcSet’s layout was created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag set, then dstSet’s layout must also have been created with the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag set

• VUID-VkCopyDescriptorSet-srcSet-01919
If srcSet’s layout was created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag set, then dstSet’s layout must also have been created without the VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT flag set

• VUID-VkCopyDescriptorSet-srcSet-01920
If the descriptor pool from which srcSet was allocated was created with the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set, then the descriptor pool from which dstSet was allocated must also have been created with the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set

• VUID-VkCopyDescriptorSet-srcSet-01921
If the descriptor pool from which srcSet was allocated was created without the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set, then the descriptor pool from which dstSet was allocated must also have been created without the VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT flag set

• VUID-VkCopyDescriptorSet-dstBinding-02753
If the descriptor type of the descriptor set binding specified by dstBinding is VK_DESCRIPTOR_TYPE_SAMPLER, then dstSet must not have been allocated with a layout that included immutable samplers for dstBinding

Valid Usage (Implicit)
• VUID-VkCopyDescriptorSet-sType-sType
sType must be VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET

• VUID-VkCopyDescriptorSet-pNext-pNext
pNext must be NULL

• VUID-VkCopyDescriptorSet-srcSet-parameter
srcSet must be a valid VkDescriptorSet handle

• VUID-VkCopyDescriptorSet-dstSet-parameter
dstSet must be a valid VkDescriptorSet handle

• VUID-VkCopyDescriptorSet-commonparent
Both of dstSet, and srcSet must have been created, allocated, or retrieved from the same VkDevice