wgpu_hal::vulkan::sampler

Struct SamplerCache

source
pub(crate) struct SamplerCache {
    samplers: HashMap<HashableSamplerCreateInfo, CacheEntry>,
    total_capacity: u32,
    passthrough: bool,
}
Available on vulkan only.
Expand description

Global sampler cache.

As some devices have a low limit (4000) on the number of unique samplers that can be created, we need to cache samplers to avoid running out if people eagerly create duplicate samplers.

Fields§

§samplers: HashMap<HashableSamplerCreateInfo, CacheEntry>

Mapping from the sampler description to sampler and reference count.

§total_capacity: u32

Maximum number of unique samplers that can be created.

§passthrough: bool

If true, the sampler cache is disabled and all samplers are created on demand.

Implementations§

source§

impl SamplerCache

source

pub fn new(total_capacity: u32) -> Self

source

pub fn create_sampler( &mut self, device: &Device, create_info: SamplerCreateInfo<'static>, ) -> Result<Sampler, DeviceError>

Create a sampler, or return an existing one if it already exists.

If the sampler already exists, the reference count is incremented.

If the sampler does not exist, a new sampler is created and inserted into the cache.

If the cache is full, an error is returned.

source

pub fn destroy_sampler( &mut self, device: &Device, create_info: SamplerCreateInfo<'static>, provided_sampler: Sampler, )

Decrease the reference count of a sampler and destroy it if the reference count reaches 0.

The provided sampler is checked against the sampler in the cache to ensure there is no clerical error.

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
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

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, U> TryFrom<U> for T
where U: Into<T>,

source§

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>,

source§

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.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

source§

impl<T> WasmNotSend for T
where T: Send,

source§

impl<T> WasmNotSendSync for T

source§

impl<T> WasmNotSync for T
where T: Sync,