#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub struct DerivedCacheBudget {
pub cpu_bytes: u64,
pub gpu_bytes: u64,
}
impl Default for DerivedCacheBudget {
fn default() -> Self {
Self {
cpu_bytes: 128 * 1024 * 1024,
gpu_bytes: 256 * 1024 * 1024,
}
}
}
#[derive(Clone, Copy, Default, PartialEq, Eq, Debug)]
pub struct DerivedCacheUsage {
pub cpu_bytes: u64,
pub gpu_bytes: u64,
pub peak_cpu_bytes: u64,
pub peak_gpu_bytes: u64,
}
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)]
pub(crate) enum DerivedCacheClass {
Visibility,
RecordSet,
Acceleration,
SurfaceField,
TimelineMaterialization,
}
#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)]
pub(crate) enum DerivedCacheKey {
#[cfg(test)]
Test(u64),
RecordSet(crate::scene_gpu::RecordKey),
Visibility(crate::scene_gpu::VisibilityKey),
SurfaceField(crate::scene_gpu::SurfaceFieldKey),
SceneAttribute(molgfx_core::AttributeHandle),
ScenePoint(molgfx_core::PointBatchHandle),
SceneInstance(molgfx_core::InstanceBatchHandle),
PagedAttribute(molgfx_core::ResidencyTicket),
PagedInstance(molgfx_core::ChunkOccurrenceId),
}
impl From<crate::scene_gpu::RecordKey> for DerivedCacheKey {
fn from(value: crate::scene_gpu::RecordKey) -> Self {
Self::RecordSet(value)
}
}
impl From<crate::scene_gpu::VisibilityKey> for DerivedCacheKey {
fn from(value: crate::scene_gpu::VisibilityKey) -> Self {
Self::Visibility(value)
}
}
#[cfg(test)]
impl From<u64> for DerivedCacheKey {
fn from(value: u64) -> Self {
Self::Test(value)
}
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub(crate) enum MaterializationPlan {
Direct,
Materialized,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub(crate) struct DerivedFootprint {
pub(crate) cpu_bytes: u64,
pub(crate) gpu_bytes: u64,
}
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub(super) struct Entry {
pub(super) key: DerivedCacheKey,
pub(super) class: DerivedCacheClass,
pub(super) footprint: DerivedFootprint,
pub(super) last_used_frame: u64,
}