use nuvec_gpu::Device;
pub use nuvec_gpu::MemoryStats;
use crate::{Error, Result};
fn device() -> Option<&'static Device> {
Device::shared()
}
pub fn physical_memory() -> u64 {
nuvec_gpu::physical_memory()
}
pub fn stats() -> MemoryStats {
device().map(Device::memory).unwrap_or_default()
}
pub fn active_memory() -> usize {
stats().active_with_mapped
}
pub fn peak_memory() -> usize {
stats().peak_with_mapped
}
pub fn cache_memory() -> usize {
stats().cache
}
pub fn reset_peak_memory() {
if let Some(d) = device() {
d.reset_peak();
}
}
pub fn set_memory_limit(bytes: usize) -> usize {
device().map_or(0, |d| d.set_memory_limit(bytes))
}
pub fn set_cache_limit(bytes: usize) -> usize {
device().map_or(0, |d| d.set_cache_limit(bytes))
}
pub fn set_wired_limit(bytes: usize) -> Result<usize> {
let Some(d) = device() else {
return Ok(0);
};
d.set_wired_limit(bytes).map_err(|e| match e {
nuvec_gpu::GpuError::InvalidArgument(msg) => Error::InvalidArgument(msg),
e => Error::Backend(e.to_string()),
})
}
pub fn can_wire() -> bool {
device().is_some_and(Device::can_wire)
}
pub fn clear_cache() {
if let Some(d) = device() {
d.clear_cache();
}
}