Struct screen_13::pool::hash::HashPool

source ·
pub struct HashPool { /* private fields */ }
Expand description

A high-performance resource allocator.

§Bucket Strategy

The information for each lease request is the key for a HashMap of buckets. If no bucket exists with the exact information provided a new bucket is created.

In practice this means that for a PoolInfo::image_capacity of 4, requests for a 1024x1024 image with certain attributes will store a maximum of 4 such images. Requests for any image having a different size or attributes will store an additional maximum of 4 images.

§Memory Management

If requests for varying resources is common HashPool::clear_images_by_info and other memory management functions are nessecery in order to avoid using all available device memory.

Implementations§

source§

impl HashPool

source

pub fn new(device: &Arc<Device>) -> Self

Constructs a new HashPool.

source

pub fn with_capacity(device: &Arc<Device>, info: impl Into<PoolInfo>) -> Self

Constructs a new HashPool with the given capacity information.

source

pub fn clear(&mut self)

Clears the pool, removing all resources.

source§

impl HashPool

source

pub fn clear_accel_structs(&mut self)

Clears the pool of acceleration structure resources.

source

pub fn clear_accel_structs_by_info( &mut self, info: impl Into<AccelerationStructureInfo> )

Clears the pool of all acceleration structure resources matching the given information.

source

pub fn retain_accel_structs<F>(&mut self, f: F)

Retains only the acceleration structure resources specified by the predicate.

In other words, remove all acceleration structure resources for which f(AccelerationStructureInfo) returns false.

The elements are visited in unsorted (and unspecified) order.

§Performance

Provides the same performance guarantees as HashMap::retain.

source§

impl HashPool

source

pub fn clear_buffers(&mut self)

Clears the pool of buffer resources.

source

pub fn clear_buffers_by_info(&mut self, info: impl Into<BufferInfo>)

Clears the pool of all buffer resources matching the given information.

source

pub fn retain_buffers<F>(&mut self, f: F)
where F: FnMut(BufferInfo) -> bool,

Retains only the buffer resources specified by the predicate.

In other words, remove all buffer resources for which f(BufferInfo) returns false.

The elements are visited in unsorted (and unspecified) order.

§Performance

Provides the same performance guarantees as HashMap::retain.

source§

impl HashPool

source

pub fn clear_images(&mut self)

Clears the pool of image resources.

source

pub fn clear_images_by_info(&mut self, info: impl Into<ImageInfo>)

Clears the pool of all image resources matching the given information.

source

pub fn retain_images<F>(&mut self, f: F)
where F: FnMut(ImageInfo) -> bool,

Retains only the image resources specified by the predicate.

In other words, remove all image resources for which f(ImageInfo) returns false.

The elements are visited in unsorted (and unspecified) order.

§Performance

Provides the same performance guarantees as HashMap::retain.

Trait Implementations§

source§

impl Debug for HashPool

source§

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

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

impl Pool<AccelerationStructureInfo, AccelerationStructure> for HashPool

source§

impl Pool<BufferInfo, Buffer> for HashPool

source§

fn lease(&mut self, info: BufferInfo) -> Result<Lease<Buffer>, DriverError>

Lease a resource.
source§

impl Pool<ImageInfo, Image> for HashPool

source§

fn lease(&mut self, info: ImageInfo) -> Result<Lease<Image>, DriverError>

Lease a resource.

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. 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 T
where 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> Pool<AccelerationStructureInfoBuilder, AccelerationStructure> for T

source§

impl<T> Pool<BufferInfoBuilder, Buffer> for T
where T: Pool<BufferInfo, Buffer>,

source§

fn lease( &mut self, builder: BufferInfoBuilder ) -> Result<Lease<Buffer>, DriverError>

Lease a resource.
source§

impl<T> Pool<ImageInfoBuilder, Image> for T
where T: Pool<ImageInfo, Image>,

source§

fn lease( &mut self, builder: ImageInfoBuilder ) -> Result<Lease<Image>, DriverError>

Lease a resource.
source§

impl<T, U> TryFrom<U> for T
where 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 T
where 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.
source§

impl<T> ResolverPool for T
where T: Pool<DescriptorPoolInfo, DescriptorPool> + Pool<RenderPassInfo, RenderPass> + Pool<CommandBufferInfo, CommandBuffer>,