diff options
Diffstat (limited to 'wgpu/src/image/raster.rs')
| -rw-r--r-- | wgpu/src/image/raster.rs | 19 | 
1 files changed, 14 insertions, 5 deletions
| diff --git a/wgpu/src/image/raster.rs b/wgpu/src/image/raster.rs index a6cba76a..4d3c3125 100644 --- a/wgpu/src/image/raster.rs +++ b/wgpu/src/image/raster.rs @@ -4,13 +4,13 @@ use crate::graphics;  use crate::graphics::image::image_rs;  use crate::image::atlas::{self, Atlas}; -use std::collections::{HashMap, HashSet}; +use rustc_hash::{FxHashMap, FxHashSet};  /// Entry in cache corresponding to an image handle  #[derive(Debug)]  pub enum Memory {      /// Image data on host -    Host(image_rs::ImageBuffer<image_rs::Rgba<u8>, Vec<u8>>), +    Host(image_rs::ImageBuffer<image_rs::Rgba<u8>, image::Bytes>),      /// Storage entry      Device(atlas::Entry),      /// Image not found @@ -38,8 +38,9 @@ impl Memory {  /// Caches image raster data  #[derive(Debug, Default)]  pub struct Cache { -    map: HashMap<u64, Memory>, -    hits: HashSet<u64>, +    map: FxHashMap<image::Id, Memory>, +    hits: FxHashSet<image::Id>, +    should_trim: bool,  }  impl Cache { @@ -50,11 +51,13 @@ impl Cache {          }          let memory = match graphics::image::load(handle) { -            Ok(image) => Memory::Host(image.to_rgba8()), +            Ok(image) => Memory::Host(image),              Err(image_rs::error::ImageError::IoError(_)) => Memory::NotFound,              Err(_) => Memory::Invalid,          }; +        self.should_trim = true; +          self.insert(handle, memory);          self.get(handle).unwrap()      } @@ -86,6 +89,11 @@ impl Cache {      /// Trim cache misses from cache      pub fn trim(&mut self, atlas: &mut Atlas) { +        // Only trim if new entries have landed in the `Cache` +        if !self.should_trim { +            return; +        } +          let hits = &self.hits;          self.map.retain(|k, memory| { @@ -101,6 +109,7 @@ impl Cache {          });          self.hits.clear(); +        self.should_trim = false;      }      fn get(&mut self, handle: &image::Handle) -> Option<&mut Memory> { | 
