pub struct StandardDescriptorSetAllocator { /* private fields */ }
Expand description
Standard implementation of a descriptor set allocator.
The intended way to use this allocator is to have one that is used globally for the duration of
the program, in order to avoid creating and destroying DescriptorPool
s, as that is
expensive. Alternatively, you can have one locally on a thread for the duration of the thread.
Internally, this allocator uses one or more DescriptorPool
s per descriptor set layout per
thread, using Thread-Local Storage. When a thread first allocates, an entry is reserved for the
thread and descriptor set layout combination. After a thread exits and the allocator wasn’t
dropped yet, its entries are freed, but the pools it used are not dropped. The next time a new
thread allocates for the first time, the entries are reused along with the pools. If all
threads drop their reference to the allocator, all entries along with the allocator are
dropped, even if the threads didn’t exit yet, which is why you should keep the allocator alive
for as long as you need to allocate so that the pools can keep being reused.
This allocator only needs to lock when a thread first allocates or when a thread that previously allocated exits. In all other cases, allocation is lock-free.
Implementations§
source§impl StandardDescriptorSetAllocator
impl StandardDescriptorSetAllocator
sourcepub fn new(
device: Arc<Device>,
create_info: StandardDescriptorSetAllocatorCreateInfo
) -> StandardDescriptorSetAllocator
pub fn new( device: Arc<Device>, create_info: StandardDescriptorSetAllocatorCreateInfo ) -> StandardDescriptorSetAllocator
Creates a new StandardDescriptorSetAllocator
.
sourcepub fn clear(&self, layout: &Arc<DescriptorSetLayout>)
pub fn clear(&self, layout: &Arc<DescriptorSetLayout>)
Clears the entry for the given descriptor set layout and the current thread. This does not mean that the pools are dropped immediately. A pool is kept alive for as long as descriptor sets allocated from it exist.
This has no effect if the entry was not initialized yet.
Trait Implementations§
source§impl DescriptorSetAllocator for StandardDescriptorSetAllocator
impl DescriptorSetAllocator for StandardDescriptorSetAllocator
source§fn allocate(
&self,
layout: &Arc<DescriptorSetLayout>,
variable_descriptor_count: u32
) -> Result<StandardDescriptorSetAlloc, Validated<VulkanError>>
fn allocate( &self, layout: &Arc<DescriptorSetLayout>, variable_descriptor_count: u32 ) -> Result<StandardDescriptorSetAlloc, Validated<VulkanError>>
Allocates a descriptor set.