pub(crate) struct SamplerCache {
samplers: HashMap<HashableSamplerCreateInfo, CacheEntry>,
total_capacity: u32,
passthrough: bool,
}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: u32Maximum number of unique samplers that can be created.
passthrough: boolIf true, the sampler cache is disabled and all samplers are created on demand.
Implementations§
Source§impl SamplerCache
impl SamplerCache
pub fn new(total_capacity: u32) -> Self
Sourcepub fn create_sampler(
&mut self,
device: &Device,
create_info: SamplerCreateInfo<'static>,
) -> Result<Sampler, DeviceError>
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.
Sourcepub fn destroy_sampler(
&mut self,
device: &Device,
create_info: SamplerCreateInfo<'static>,
provided_sampler: Sampler,
)
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§
impl Freeze for SamplerCache
impl RefUnwindSafe for SamplerCache
impl Send for SamplerCache
impl Sync for SamplerCache
impl Unpin for SamplerCache
impl UnwindSafe for SamplerCache
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more