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

source

pub fn new( device: Arc<Device>, create_info: DescriptorPoolCreateInfo ) -> Result<DescriptorPool, Validated<VulkanError>>

Creates a new DescriptorPool.

source

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 from device.
  • create_info must match the info used to create the object.
source

pub fn flags(&self) -> DescriptorPoolCreateFlags

Returns the flags that the descriptor pool was created with.

source

pub fn max_sets(&self) -> u32

Returns the maximum number of sets that can be allocated from the pool.

source

pub fn pool_sizes(&self) -> &HashMap<DescriptorType, u32>

Returns the number of descriptors of each type that the pool was created with.

source

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.

source

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 of allocate_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.
source

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 from self, and not freed previously.
  • All elements of descriptor_sets must not be in use by the host or device.
source

pub unsafe fn reset(&self) -> Result<(), VulkanError>

Resets the pool.

This destroys all descriptor sets and empties the pool.

Safety
  • All descriptor sets that were previously allocated from self must not be in use by the host or device.

Trait Implementations§

source§

impl Debug for DescriptorPool

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl DeviceOwned for DescriptorPool

source§

fn device(&self) -> &Arc<Device>

Returns the device that owns self.
source§

impl Drop for DescriptorPool

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl Hash for DescriptorPool

source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq for DescriptorPool

source§

fn eq(&self, other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl VulkanObject for DescriptorPool

§

type Handle = DescriptorPool

The type of the object.
source§

fn handle(&self) -> Self::Handle

Returns the raw Vulkan handle of the object.
source§

impl Eq for DescriptorPool

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> DeviceOwnedVulkanObject for Twhere T: DeviceOwned + VulkanObject,

source§

fn set_debug_utils_object_name( &self, object_name: Option<&str> ) -> Result<(), VulkanError>

Assigns a human-readable name to the object for debugging purposes. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.