Struct vulkano::descriptor_set::pool::DescriptorPool
source · pub struct DescriptorPool { /* private fields */ }
Expand description
Pool that descriptors are allocated from.
A pool has a maximum number of descriptor sets and a maximum number of descriptors (one value per descriptor type) it can allocate.
Implementations§
source§impl DescriptorPool
impl DescriptorPool
sourcepub fn new(
device: Arc<Device>,
create_info: DescriptorPoolCreateInfo
) -> Result<DescriptorPool, Validated<VulkanError>>
pub fn new( device: Arc<Device>, create_info: DescriptorPoolCreateInfo ) -> Result<DescriptorPool, Validated<VulkanError>>
Creates a new DescriptorPool
.
sourcepub unsafe fn from_handle(
device: Arc<Device>,
handle: DescriptorPool,
create_info: DescriptorPoolCreateInfo
) -> DescriptorPool
pub unsafe fn from_handle( device: Arc<Device>, handle: DescriptorPool, create_info: DescriptorPoolCreateInfo ) -> DescriptorPool
Creates a new DescriptorPool
from a raw object handle.
Safety
handle
must be a valid Vulkan object handle created fromdevice
.create_info
must match the info used to create the object.
sourcepub fn flags(&self) -> DescriptorPoolCreateFlags
pub fn flags(&self) -> DescriptorPoolCreateFlags
Returns the flags that the descriptor pool was created with.
sourcepub fn max_sets(&self) -> u32
pub fn max_sets(&self) -> u32
Returns the maximum number of sets that can be allocated from the pool.
sourcepub fn pool_sizes(&self) -> &HashMap<DescriptorType, u32>
pub fn pool_sizes(&self) -> &HashMap<DescriptorType, u32>
Returns the number of descriptors of each type that the pool was created with.
sourcepub fn max_inline_uniform_block_bindings(&self) -> u32
pub fn max_inline_uniform_block_bindings(&self) -> u32
Returns the maximum number of DescriptorType::InlineUniformBlock
bindings that can
be allocated from the descriptor pool.
sourcepub unsafe fn allocate_descriptor_sets(
&self,
allocate_infos: impl IntoIterator<Item = DescriptorSetAllocateInfo>
) -> Result<impl ExactSizeIterator<Item = DescriptorPoolAlloc>, Validated<VulkanError>>
pub unsafe fn allocate_descriptor_sets( &self, allocate_infos: impl IntoIterator<Item = DescriptorSetAllocateInfo> ) -> Result<impl ExactSizeIterator<Item = DescriptorPoolAlloc>, Validated<VulkanError>>
Allocates descriptor sets from the pool, one for each element in allocate_info
.
Returns an iterator to the allocated sets, or an error.
The FragmentedPool
errors often can’t be prevented. If the function returns this error,
you should just create a new pool.
Safety
- When the pool is dropped, the returned descriptor sets must not be in use by either the host or device.
- If the device API version is less than 1.1, and the
khr_maintenance1
extension is not enabled on the device, then the length ofallocate_infos
must not be greater than the number of descriptor sets remaining in the pool, and the total number of descriptors of each type being allocated must not be greater than the number of descriptors of that type remaining in the pool.
sourcepub unsafe fn free_descriptor_sets(
&self,
descriptor_sets: impl IntoIterator<Item = UnsafeDescriptorSet>
) -> Result<(), Validated<VulkanError>>
pub unsafe fn free_descriptor_sets( &self, descriptor_sets: impl IntoIterator<Item = UnsafeDescriptorSet> ) -> Result<(), Validated<VulkanError>>
Frees some descriptor sets.
Note that it is not mandatory to free sets. Destroying or resetting the pool destroys all the descriptor sets.
Safety
- All elements of
descriptor_sets
must have been allocated fromself
, and not freed previously. - All elements of
descriptor_sets
must not be in use by the host or device.