pub struct GpuCache {
now: FrameStamp,
texture: Texture,
saved_block_count: usize,
debug_flags: DebugFlags,
pending_clear: bool,
prepared_for_frames: bool,
requires_frame_build: bool,
document_frames_to_build: HashSet<DocumentId, BuildHasherDefault<FxHasher>>,
}
Expand description
The main LRU cache interface.
Fields§
§now: FrameStamp
Current FrameId.
texture: Texture
CPU-side texture allocator.
saved_block_count: usize
Number of blocks requested this frame that don’t need to be re-uploaded.
debug_flags: DebugFlags
The current debug flags for the system.
pending_clear: bool
Whether there is a pending clear to send with the next update.
prepared_for_frames: bool
Indicates that prepare_for_frames has been called for this group of frames. Used for sanity checks.
requires_frame_build: bool
This indicates that we performed a cleanup operation which requires all documents to build a frame.
document_frames_to_build: HashSet<DocumentId, BuildHasherDefault<FxHasher>>
The set of documents which have had frames built in this update. Used for sanity checks.
Implementations§
source§impl GpuCache
impl GpuCache
pub fn new() -> Self
sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Drops everything in the GPU cache. Must not be called once gpu cache entries for the next frame have already been requested.
pub fn requires_frame_build(&self) -> bool
pub fn prepare_for_frames(&mut self)
pub fn bookkeep_after_frames(&mut self)
sourcepub fn begin_frame(&mut self, stamp: FrameStamp)
pub fn begin_frame(&mut self, stamp: FrameStamp)
Begin a new frame.
pub fn invalidate(&mut self, handle: &GpuCacheHandle)
sourcepub fn request<'a>(
&'a mut self,
handle: &'a mut GpuCacheHandle,
) -> Option<GpuDataRequest<'a>>
pub fn request<'a>( &'a mut self, handle: &'a mut GpuCacheHandle, ) -> Option<GpuDataRequest<'a>>
Request a resource be added to the cache. If the resource
is already in the cache, None
will be returned.
pub fn push_per_frame_blocks( &mut self, blocks: &[GpuBlockData], ) -> GpuCacheHandle
pub fn push_deferred_per_frame_blocks( &mut self, block_count: usize, ) -> GpuCacheHandle
sourcepub fn end_frame(&mut self, profile: &mut TransactionProfile) -> FrameStamp
pub fn end_frame(&mut self, profile: &mut TransactionProfile) -> FrameStamp
End the frame. Return the list of updates to apply to the device specific cache texture.
sourcepub fn should_reclaim_memory(&self) -> bool
pub fn should_reclaim_memory(&self) -> bool
Returns true if utilization has been low enough for long enough that we should blow the cache away and rebuild it.
sourcepub fn extract_updates(&mut self) -> GpuCacheUpdateList
pub fn extract_updates(&mut self) -> GpuCacheUpdateList
Extract the pending updates from the cache.
sourcepub fn set_debug_flags(&mut self, flags: DebugFlags)
pub fn set_debug_flags(&mut self, flags: DebugFlags)
Sets the current debug flags for the system.
sourcepub fn get_address(&self, id: &GpuCacheHandle) -> GpuCacheAddress
pub fn get_address(&self, id: &GpuCacheHandle) -> GpuCacheAddress
Get the actual GPU address in the texture for a given slot ID. It’s assumed at this point that the given slot has been requested and built for this frame. Attempting to get the address for a freed or pending slot will panic!
Trait Implementations§
source§impl MallocSizeOf for GpuCache
impl MallocSizeOf for GpuCache
source§fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
Auto Trait Implementations§
impl Freeze for GpuCache
impl RefUnwindSafe for GpuCache
impl Send for GpuCache
impl Sync for GpuCache
impl Unpin for GpuCache
impl UnwindSafe for GpuCache
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