]> git.nega.tv - josh/narcissus/commitdiff
Add const for magical swapchain destruction delay
authorJoshua Simmons <josh@nega.tv>
Sat, 12 Nov 2022 23:22:56 +0000 (00:22 +0100)
committerJoshua Simmons <josh@nega.tv>
Sat, 12 Nov 2022 23:22:56 +0000 (00:22 +0100)
narcissus-gpu/src/delay_queue.rs
narcissus-gpu/src/vulkan.rs

index 9ba0cfafb7c65676e277fcfdc74d3fd6c8f46529..44efaeb5bf85acee6c197a33c9d9bdea3187f6dd 100644 (file)
@@ -1,13 +1,13 @@
 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,
@@ -33,7 +33,7 @@ impl<T> DelayQueue<T> {
         }
     }
 
-    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>,
     {
index 7b6ca5a79acf5c20feee37aa61111da6cae129a8..e0339a5e6ef72fa2c7b656a5904fcdd6e230ef60 100644 (file)
@@ -26,6 +26,11 @@ use crate::{
 
 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)]
@@ -782,7 +787,7 @@ impl<'app> VulkanDevice<'app> {
             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(),