use std::collections::VecDeque;
pub struct DelayQueue<T> {
- delay: u64,
- counter: u64,
- values: VecDeque<(u64, T)>,
+ delay: usize,
+ counter: usize,
+ values: VecDeque<(usize, T)>,
}
impl<T> DelayQueue<T> {
- pub fn new(delay: u64) -> Self {
+ pub fn new(delay: usize) -> Self {
Self {
delay,
counter: 0,
}
}
- pub fn drain<R>(&mut self, range: R) -> std::collections::vec_deque::Drain<'_, (u64, T)>
+ pub fn drain<R>(&mut self, range: R) -> std::collections::vec_deque::Drain<'_, (usize, T)>
where
R: std::ops::RangeBounds<usize>,
{
const NUM_FRAMES: usize = 2;
+/// How many frames to delay swapchain destruction.
+///
+/// There's no correct answer here (spec bug) we're just picking a big number and hoping for the best.
+const SWAPCHAIN_DESTROY_DELAY_FRAMES: usize = 8;
+
macro_rules! vk_check {
($e:expr) => ({
#[allow(unused_unsafe)]
frames,
swapchains: Mutex::new(HashMap::new()),
- destroyed_swapchains: Mutex::new(DelayQueue::new(8)),
+ destroyed_swapchains: Mutex::new(DelayQueue::new(SWAPCHAIN_DESTROY_DELAY_FRAMES)),
texture_pool: default(),
buffer_pool: default(),