If multiple VkDescriptorPoolSize structures containing the same descriptor type appear in the pPoolSizes array then the pool will be created with enough storage for the total number of descriptors of each type.
Fragmentation of a descriptor pool is possible and may lead to descriptor set allocation failures. A failure due to fragmentation is defined as failing a descriptor set allocation despite the sum of all outstanding descriptor set allocations from the pool plus the requested allocation requiring no more than the total number of descriptors requested at pool creation. Implementations provide certain guarantees of when fragmentation must not cause allocation failure, as described below.
If a descriptor pool has not had any descriptor sets freed since it was created or most recently reset then fragmentation must not cause an allocation failure (note that this is always the case for a pool created without the DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT bit set). Additionally, if all sets allocated from the pool since it was created or most recently reset use the same number of descriptors (of each type) and the requested allocation also uses that same number of descriptors (of each type), then fragmentation must not cause an allocation failure.
If an allocation failure occurs due to fragmentation, an application can create an additional descriptor pool to perform further descriptor set allocations.
If flags has the DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit set, descriptor pool creation may fail with the error ERROR_FRAGMENTATION if the total number of descriptors across all pools (including this one) created with this bit set exceeds maxUpdateAfterBindDescriptorsInAllPools, or if fragmentation of the underlying hardware resources occurs.
If a pPoolSizes[i]::type is DESCRIPTOR_TYPE_MUTABLE_EXT, a VkMutableDescriptorTypeCreateInfoEXT struct in the pNext chain can be used to specify which mutable descriptor types can be allocated from the pool. If included in the pNext chain, VkMutableDescriptorTypeCreateInfoEXT::pMutableDescriptorTypeLists[i] specifies which kind of DESCRIPTOR_TYPE_MUTABLE_EXT descriptors can be allocated from this pool entry. If VkMutableDescriptorTypeCreateInfoEXT does not exist in the pNext chain, or VkMutableDescriptorTypeCreateInfoEXT::pMutableDescriptorTypeLists[i] is out of range, the descriptor pool allocates enough memory to be able to allocate a DESCRIPTOR_TYPE_MUTABLE_EXT descriptor with any supported VkDescriptorType as a mutable descriptor. A mutable descriptor can be allocated from a pool entry if the type list in VkDescriptorSetLayoutCreateInfo is a subset of the type list declared in the descriptor pool, or if the pool entry is created without a descriptor type list. Multiple pPoolSizes entries with DESCRIPTOR_TYPE_MUTABLE_EXT can be declared. When multiple such pool entries are present in pPoolSizes, they specify sets of supported descriptor types which either fully overlap, partially overlap, or are disjoint. Two sets fully overlap if the sets of supported descriptor types are equal. If the sets are not disjoint they partially overlap. A pool entry without a VkMutableDescriptorTypeListEXT assigned to it is considered to partially overlap any other pool entry which has a VkMutableDescriptorTypeListEXT assigned to it. The application must ensure that partial overlap does not exist in pPoolSizes.
The requirement of no partial overlap is intended to resolve ambiguity for validation as there is no confusion which pPoolSizes entries will be allocated from. An implementation is not expected to depend on this requirement.
descriptorPoolOverallocation feature is not enabled, or flags does not have DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV set, maxSets must be greater than 0flags has the DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV or DESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV bits set, then descriptorPoolOverallocation must be enabledflags has the DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT bit set, then the DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT bit must not be setVkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::mutableDescriptorType is not enabled, pPoolSizes must not contain a descriptorType of DESCRIPTOR_TYPE_MUTABLE_EXTflags has the DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT bit set, VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT::mutableDescriptorType must be enabledpPoolSizes contains a descriptorType of DESCRIPTOR_TYPE_MUTABLE_EXT, any other DESCRIPTOR_TYPE_MUTABLE_EXT element in pPoolSizes must not have sets of supported descriptor types which partially overlapsType must be STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFOpNext member of any structure (including this one) in the pNext chain must be either NULL or a pointer to a valid instance of VkDescriptorPoolInlineUniformBlockCreateInfo or VkMutableDescriptorTypeCreateInfoEXTsType value of each struct in the pNext chain must be uniqueflags must be a valid combination of VkDescriptorPoolCreateFlagBits valuespoolSizeCount is not 0, pPoolSizes must be a valid pointer to an array of poolSizeCount valid VkDescriptorPoolSize structuresVkDescriptorPoolSize, CreateDescriptorPool
struct VkDescriptorPoolCreateInfo {
VkStructureType sType;
void const * pNext;
VkDescriptorPoolCreateFlags flags;
uint32_t maxSets;
uint32_t poolSizeCount;
VkDescriptorPoolSize const * pPoolSizes;
}
| Modifier and Type | Class and Description |
|---|---|
| public static class | VkDescriptorPoolCreateInfo.
An array of |
| Modifier and Type | Field and Description |
|---|---|
| public static final int | ALIGNOF
The struct alignment in bytes. |
| public static final int | FLAGS
The struct member offsets. |
| public static final int | MAXSETS
The struct member offsets. |
| public static final int | PNEXT
The struct member offsets. |
| public static final int | POOLSIZECOUNT
The struct member offsets. |
| public static final int | PPOOLSIZES
The struct member offsets. |
| public static final int | SIZEOF
The struct size in bytes. |
| public static final int | STYPE
The struct member offsets. |
| Access | Constructor and Description |
|---|---|
| protected | |
| public | VkDescriptorPoolCreateInfo(ByteBuffer container)
Creates a |
| Modifier and Type | Method and Description |
|---|---|
| public static VkDescriptorPoolCreateInfo | |
| public static VkDescriptorPoolCreateInfo. | calloc(int
the buffer capacity capacity)Returns a new |
| public static VkDescriptorPoolCreateInfo | calloc(MemoryStack
the stack from which to allocate stack)Returns a new |
| public static VkDescriptorPoolCreateInfo. | calloc(int
the buffer capacity capacity, MemoryStack the stack from which to allocate stack)Returns a new |
| public static VkDescriptorPoolCreateInfo | |
| public static VkDescriptorPoolCreateInfo | |
| public static VkDescriptorPoolCreateInfo. | |
| public static VkDescriptorPoolCreateInfo. | |
| protected VkDescriptorPoolCreateInfo | create(long
the struct memory address address, ByteBuffer an optional container buffer, to be referenced strongly by the struct instance. container)Implements abstract org. the constructor, but returns the exact type of the Struct subclass.
|
| public static VkDescriptorPoolCreateInfo | |
| public static VkDescriptorPoolCreateInfo | create(long address)
Returns a new |
| public static VkDescriptorPoolCreateInfo. | create(int
the buffer capacity capacity)Returns a new |
| public static VkDescriptorPoolCreateInfo. | create(long
the memory address address, int the buffer capacity capacity)Create a |
| public static VkDescriptorPoolCreateInfo | |
| public static VkDescriptorPoolCreateInfo. | |
| public int | flags()
a bitmask of |
| public VkDescriptorPoolCreateInfo | |
| public static VkDescriptorPoolCreateInfo | |
| public static VkDescriptorPoolCreateInfo. | malloc(int
the buffer capacity capacity)Returns a new |
| public static VkDescriptorPoolCreateInfo | malloc(MemoryStack
the stack from which to allocate stack)Returns a new |
| public static VkDescriptorPoolCreateInfo. | malloc(int
the buffer capacity capacity, MemoryStack the stack from which to allocate stack)Returns a new |
| public static VkDescriptorPoolCreateInfo | |
| public static VkDescriptorPoolCreateInfo | |
| public static VkDescriptorPoolCreateInfo. | |
| public static VkDescriptorPoolCreateInfo. | |
| public int | |
| public VkDescriptorPoolCreateInfo | |
| public static int | |
| public static void | |
| public static int | |
| public static void | |
| public static long | |
| public static void | |
| public static int | |
| public static void | npoolSizeCount(long struct, int value)
Sets the specified value to the |
| public static VkDescriptorPoolSize. | |
| public static void | |
| public static int | |
| public static void | |
| public long | |
| public VkDescriptorPoolCreateInfo | |
| public VkDescriptorPoolCreateInfo | pNext(VkDescriptorPoolInlineUniformBlockCreateInfo value)
Prepends the specified |
| public VkDescriptorPoolCreateInfo | pNext(VkDescriptorPoolInlineUniformBlockCreateInfoEXT value)
Prepends the specified |
| public VkDescriptorPoolCreateInfo | pNext(VkMutableDescriptorTypeCreateInfoEXT value)
Prepends the specified |
| public VkDescriptorPoolCreateInfo | pNext(VkMutableDescriptorTypeCreateInfoVALVE value)
Prepends the specified |
| public int | |
| public VkDescriptorPoolSize. | pPoolSizes()
a pointer to an array of |
| public VkDescriptorPoolCreateInfo | pPoolSizes(VkDescriptorPoolSize.
Sets the address of the specified |
| public VkDescriptorPoolCreateInfo | set(int sType, long pNext, int flags, int maxSets, VkDescriptorPoolSize.
Initializes this struct with the specified values. |
| public VkDescriptorPoolCreateInfo | Returns: this structthe source struct src)Copies the specified struct data to this struct. |
| public int | |
| public int | |
| public VkDescriptorPoolCreateInfo | |
| public VkDescriptorPoolCreateInfo | |
| public static void |