Class VkDescriptorPoolCreateInfo
- All Implemented Interfaces:
AutoCloseable
,NativeResource
,Pointer
Description
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
.
Note
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.
Valid Usage
- If the
descriptorPoolOverallocation
feature is not enabled, orflags
does not haveDESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV
set,maxSets
must be greater than 0 - If
flags
has theDESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_SETS_BIT_NV
orDESCRIPTOR_POOL_CREATE_ALLOW_OVERALLOCATION_POOLS_BIT_NV
bits set, thendescriptorPoolOverallocation
must be enabled - If
flags
has theDESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT
bit set, then theDESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT
bit must not be set - If
VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT
::mutableDescriptorType
is not enabled,pPoolSizes
must not contain adescriptorType
ofDESCRIPTOR_TYPE_MUTABLE_EXT
- If
flags
has theDESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_EXT
bit set,VkPhysicalDeviceMutableDescriptorTypeFeaturesEXT
::mutableDescriptorType
must be enabled - If
pPoolSizes
contains adescriptorType
ofDESCRIPTOR_TYPE_MUTABLE_EXT
, any otherDESCRIPTOR_TYPE_MUTABLE_EXT
element inpPoolSizes
must not have sets of supported descriptor types which partially overlap
Valid Usage (Implicit)
sType
must beSTRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
- Each
pNext
member of any structure (including this one) in thepNext
chain must be eitherNULL
or a pointer to a valid instance ofVkDescriptorPoolInlineUniformBlockCreateInfo
orVkMutableDescriptorTypeCreateInfoEXT
- The
sType
value of each struct in thepNext
chain must be unique flags
must be a valid combination ofVkDescriptorPoolCreateFlagBits
values- If
poolSizeCount
is not 0,pPoolSizes
must be a valid pointer to an array ofpoolSizeCount
validVkDescriptorPoolSize
structures
See Also
VkDescriptorPoolSize
, CreateDescriptorPool
Layout
struct VkDescriptorPoolCreateInfo {
VkStructureType sType()
;
void const * pNext()
;
VkDescriptorPoolCreateFlags flags()
;
uint32_t maxSets()
;
uint32_t poolSizeCount()
;
VkDescriptorPoolSize
const * pPoolSizes()
;
}
-
Nested Class Summary
Nested classes/interfaces inherited from class org.lwjgl.system.Struct
Struct.StructValidation
Nested classes/interfaces inherited from interface org.lwjgl.system.Pointer
Pointer.Default
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
The struct alignment in bytes.static final int
The struct member offsets.static final int
The struct member offsets.static final int
The struct member offsets.static final int
The struct member offsets.static final int
The struct member offsets.static final int
The struct size in bytes.static final int
The struct member offsets.Fields inherited from interface org.lwjgl.system.Pointer
BITS32, BITS64, CLONG_SHIFT, CLONG_SIZE, POINTER_SHIFT, POINTER_SIZE
-
Constructor Summary
ConstructorDescriptionVkDescriptorPoolCreateInfo
(ByteBuffer container) Creates aVkDescriptorPoolCreateInfo
instance at the current position of the specifiedByteBuffer
container. -
Method Summary
Modifier and TypeMethodDescriptionstatic VkDescriptorPoolCreateInfo
calloc()
Returns a newVkDescriptorPoolCreateInfo
instance allocated withmemCalloc
.calloc
(int capacity) Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated withmemCalloc
.calloc
(int capacity, MemoryStack stack) Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated on the specifiedMemoryStack
and initializes all its bits to zero.static VkDescriptorPoolCreateInfo
calloc
(MemoryStack stack) Returns a newVkDescriptorPoolCreateInfo
instance allocated on the specifiedMemoryStack
and initializes all its bits to zero.static VkDescriptorPoolCreateInfo
Deprecated.callocStack
(int capacity) Deprecated.callocStack
(int capacity, MemoryStack stack) Deprecated.static VkDescriptorPoolCreateInfo
callocStack
(MemoryStack stack) Deprecated.static VkDescriptorPoolCreateInfo
create()
Returns a newVkDescriptorPoolCreateInfo
instance allocated withBufferUtils
.create
(int capacity) Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated withBufferUtils
.static VkDescriptorPoolCreateInfo
create
(long address) Returns a newVkDescriptorPoolCreateInfo
instance for the specified memory address.create
(long address, int capacity) Create aVkDescriptorPoolCreateInfo.Buffer
instance at the specified memory.static VkDescriptorPoolCreateInfo
createSafe
(long address) createSafe
(long address, int capacity) int
flags()
a bitmask ofVkDescriptorPoolCreateFlagBits
specifying certain supported operations on the pool.flags
(int value) Sets the specified value to theflags()
field.static VkDescriptorPoolCreateInfo
malloc()
Returns a newVkDescriptorPoolCreateInfo
instance allocated withmemAlloc
.malloc
(int capacity) Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated withmemAlloc
.malloc
(int capacity, MemoryStack stack) Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated on the specifiedMemoryStack
.static VkDescriptorPoolCreateInfo
malloc
(MemoryStack stack) Returns a newVkDescriptorPoolCreateInfo
instance allocated on the specifiedMemoryStack
.static VkDescriptorPoolCreateInfo
Deprecated.mallocStack
(int capacity) Deprecated.mallocStack
(int capacity, MemoryStack stack) Deprecated.static VkDescriptorPoolCreateInfo
mallocStack
(MemoryStack stack) Deprecated.int
maxSets()
the maximum number of descriptor sets that can be allocated from the pool.maxSets
(int value) Sets the specified value to themaxSets()
field.static int
nflags
(long struct) Unsafe version offlags()
.static void
nflags
(long struct, int value) Unsafe version offlags
.static int
nmaxSets
(long struct) Unsafe version ofmaxSets()
.static void
nmaxSets
(long struct, int value) Unsafe version ofmaxSets
.static long
npNext
(long struct) Unsafe version ofpNext()
.static void
npNext
(long struct, long value) Unsafe version ofpNext
.static int
npoolSizeCount
(long struct) Unsafe version ofpoolSizeCount()
.static void
npoolSizeCount
(long struct, int value) Sets the specified value to thepoolSizeCount
field of the specifiedstruct
.static VkDescriptorPoolSize.Buffer
npPoolSizes
(long struct) Unsafe version ofpPoolSizes()
.static void
npPoolSizes
(long struct, VkDescriptorPoolSize.Buffer value) Unsafe version ofpPoolSizes
.static int
nsType
(long struct) Unsafe version ofsType()
.static void
nsType
(long struct, int value) Unsafe version ofsType
.long
pNext()
NULL
or a pointer to a structure extending this structure.pNext
(long value) Sets the specified value to thepNext()
field.Prepends the specifiedVkDescriptorPoolInlineUniformBlockCreateInfo
value to thepNext
chain.Prepends the specifiedVkDescriptorPoolInlineUniformBlockCreateInfoEXT
value to thepNext
chain.Prepends the specifiedVkMutableDescriptorTypeCreateInfoEXT
value to thepNext
chain.Prepends the specifiedVkMutableDescriptorTypeCreateInfoVALVE
value to thepNext
chain.int
the number of elements inpPoolSizes
.a pointer to an array ofVkDescriptorPoolSize
structures, each containing a descriptor type and number of descriptors of that type to be allocated in the pool.Sets the address of the specifiedVkDescriptorPoolSize.Buffer
to thepPoolSizes()
field.set
(int sType, long pNext, int flags, int maxSets, VkDescriptorPoolSize.Buffer pPoolSizes) Initializes this struct with the specified values.Copies the specified struct data to this struct.int
sizeof()
Returnssizeof(struct)
.int
sType()
aVkStructureType
value identifying this structure.sType
(int value) Sets the specified value to thesType()
field.Sets theSTRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
value to thesType()
field.static void
validate
(long struct) Validates pointer members that should not beNULL
.Methods inherited from class org.lwjgl.system.Pointer.Default
address, equals, hashCode, toString
Methods inherited from interface org.lwjgl.system.NativeResource
close, free
-
Field Details
-
SIZEOF
public static final int SIZEOFThe struct size in bytes. -
ALIGNOF
public static final int ALIGNOFThe struct alignment in bytes. -
STYPE
public static final int STYPEThe struct member offsets. -
PNEXT
public static final int PNEXTThe struct member offsets. -
FLAGS
public static final int FLAGSThe struct member offsets. -
MAXSETS
public static final int MAXSETSThe struct member offsets. -
POOLSIZECOUNT
public static final int POOLSIZECOUNTThe struct member offsets. -
PPOOLSIZES
public static final int PPOOLSIZESThe struct member offsets.
-
-
Constructor Details
-
VkDescriptorPoolCreateInfo
Creates aVkDescriptorPoolCreateInfo
instance at the current position of the specifiedByteBuffer
container. Changes to the buffer's content will be visible to the struct instance and vice versa.The created instance holds a strong reference to the container object.
-
-
Method Details
-
sizeof
public int sizeof()Description copied from class:Struct
Returnssizeof(struct)
.- Specified by:
sizeof
in classStruct<VkDescriptorPoolCreateInfo>
-
sType
public int sType()aVkStructureType
value identifying this structure. -
pNext
public long pNext()NULL
or a pointer to a structure extending this structure. -
flags
public int flags()a bitmask ofVkDescriptorPoolCreateFlagBits
specifying certain supported operations on the pool. -
maxSets
public int maxSets()the maximum number of descriptor sets that can be allocated from the pool. -
poolSizeCount
public int poolSizeCount()the number of elements inpPoolSizes
. -
pPoolSizes
a pointer to an array ofVkDescriptorPoolSize
structures, each containing a descriptor type and number of descriptors of that type to be allocated in the pool. -
sType
Sets the specified value to thesType()
field. -
sType$Default
Sets theSTRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
value to thesType()
field. -
pNext
Sets the specified value to thepNext()
field. -
pNext
Prepends the specifiedVkDescriptorPoolInlineUniformBlockCreateInfo
value to thepNext
chain. -
pNext
Prepends the specifiedVkDescriptorPoolInlineUniformBlockCreateInfoEXT
value to thepNext
chain. -
pNext
Prepends the specifiedVkMutableDescriptorTypeCreateInfoEXT
value to thepNext
chain. -
pNext
Prepends the specifiedVkMutableDescriptorTypeCreateInfoVALVE
value to thepNext
chain. -
flags
Sets the specified value to theflags()
field. -
maxSets
Sets the specified value to themaxSets()
field. -
pPoolSizes
Sets the address of the specifiedVkDescriptorPoolSize.Buffer
to thepPoolSizes()
field. -
set
public VkDescriptorPoolCreateInfo set(int sType, long pNext, int flags, int maxSets, @Nullable VkDescriptorPoolSize.Buffer pPoolSizes) Initializes this struct with the specified values. -
set
Copies the specified struct data to this struct.- Parameters:
src
- the source struct- Returns:
- this struct
-
malloc
Returns a newVkDescriptorPoolCreateInfo
instance allocated withmemAlloc
. The instance must be explicitly freed. -
calloc
Returns a newVkDescriptorPoolCreateInfo
instance allocated withmemCalloc
. The instance must be explicitly freed. -
create
Returns a newVkDescriptorPoolCreateInfo
instance allocated withBufferUtils
. -
create
Returns a newVkDescriptorPoolCreateInfo
instance for the specified memory address. -
createSafe
-
malloc
Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated withmemAlloc
. The instance must be explicitly freed.- Parameters:
capacity
- the buffer capacity
-
calloc
Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated withmemCalloc
. The instance must be explicitly freed.- Parameters:
capacity
- the buffer capacity
-
create
Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated withBufferUtils
.- Parameters:
capacity
- the buffer capacity
-
create
Create aVkDescriptorPoolCreateInfo.Buffer
instance at the specified memory.- Parameters:
address
- the memory addresscapacity
- the buffer capacity
-
createSafe
-
mallocStack
Deprecated.Deprecated for removal in 3.4.0. Usemalloc(MemoryStack)
instead. -
callocStack
Deprecated.Deprecated for removal in 3.4.0. Usecalloc(MemoryStack)
instead. -
mallocStack
Deprecated.Deprecated for removal in 3.4.0. Usemalloc(MemoryStack)
instead. -
callocStack
Deprecated.Deprecated for removal in 3.4.0. Usecalloc(MemoryStack)
instead. -
mallocStack
Deprecated.Deprecated for removal in 3.4.0. Usemalloc(int, MemoryStack)
instead. -
callocStack
Deprecated.Deprecated for removal in 3.4.0. Usecalloc(int, MemoryStack)
instead. -
mallocStack
@Deprecated public static VkDescriptorPoolCreateInfo.Buffer mallocStack(int capacity, MemoryStack stack) Deprecated.Deprecated for removal in 3.4.0. Usemalloc(int, MemoryStack)
instead. -
callocStack
@Deprecated public static VkDescriptorPoolCreateInfo.Buffer callocStack(int capacity, MemoryStack stack) Deprecated.Deprecated for removal in 3.4.0. Usecalloc(int, MemoryStack)
instead. -
malloc
Returns a newVkDescriptorPoolCreateInfo
instance allocated on the specifiedMemoryStack
.- Parameters:
stack
- the stack from which to allocate
-
calloc
Returns a newVkDescriptorPoolCreateInfo
instance allocated on the specifiedMemoryStack
and initializes all its bits to zero.- Parameters:
stack
- the stack from which to allocate
-
malloc
Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated on the specifiedMemoryStack
.- Parameters:
capacity
- the buffer capacitystack
- the stack from which to allocate
-
calloc
Returns a newVkDescriptorPoolCreateInfo.Buffer
instance allocated on the specifiedMemoryStack
and initializes all its bits to zero.- Parameters:
capacity
- the buffer capacitystack
- the stack from which to allocate
-
nsType
public static int nsType(long struct) Unsafe version ofsType()
. -
npNext
public static long npNext(long struct) Unsafe version ofpNext()
. -
nflags
public static int nflags(long struct) Unsafe version offlags()
. -
nmaxSets
public static int nmaxSets(long struct) Unsafe version ofmaxSets()
. -
npoolSizeCount
public static int npoolSizeCount(long struct) Unsafe version ofpoolSizeCount()
. -
npPoolSizes
Unsafe version ofpPoolSizes()
. -
nsType
public static void nsType(long struct, int value) Unsafe version ofsType
. -
npNext
public static void npNext(long struct, long value) Unsafe version ofpNext
. -
nflags
public static void nflags(long struct, int value) Unsafe version offlags
. -
nmaxSets
public static void nmaxSets(long struct, int value) Unsafe version ofmaxSets
. -
npoolSizeCount
public static void npoolSizeCount(long struct, int value) Sets the specified value to thepoolSizeCount
field of the specifiedstruct
. -
npPoolSizes
Unsafe version ofpPoolSizes
. -
validate
public static void validate(long struct) Validates pointer members that should not beNULL
.- Parameters:
struct
- the struct to validate
-