use std::{
cell::UnsafeCell,
ops::{Deref, DerefMut},
};
pub mod timing_queue;
pub use timing_queue::{EntryKey, Timing, TimingQueue};
pub mod watcher;
#[macro_export]
macro_rules! wgsl_file {
() => {{
let mut wgsl_file = format!("./{}", file!()).replace("./framework", ".");
wgsl_file.pop();
wgsl_file.pop();
wgsl_file.push_str("wgsl");
wgsl_file
}};
}
pub fn next_pow2_number(n: usize) -> usize {
let mut e = 2;
loop {
if e >= n {
return e;
}
e *= 2;
}
}
#[derive(Debug)]
pub struct ChillCell<T> {
_inner: UnsafeCell<T>,
}
impl<T> ChillCell<T> {
pub const fn new(value: T) -> Self {
ChillCell {
_inner: UnsafeCell::new(value),
}
}
pub fn get_mut(&self) -> &mut T {
unsafe { &mut *self._inner.get() }
}
pub fn get(&self) -> &T {
unsafe { &*self._inner.get() }
}
}
impl<T> Deref for ChillCell<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
unsafe { &*self._inner.get() }
}
}
impl<T> DerefMut for ChillCell<T> {
fn deref_mut(&mut self) -> &mut Self::Target {
self._inner.get_mut()
}
}