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