diff --git a/wgpu-core/src/device/life.rs b/wgpu-core/src/device/life.rs index 51badf465a..dbfca043b5 100644 --- a/wgpu-core/src/device/life.rs +++ b/wgpu-core/src/device/life.rs @@ -312,15 +312,12 @@ impl LifetimeTracker { pub(super) fn triage_suspected( &mut self, hub: &Hub, - new_suspects: &SuspectedResources, trackers: &Mutex, #[cfg(feature = "trace")] trace: Option<&Mutex>, token: &mut Token>, ) { profiling::scope!("triage_suspected"); - self.suspected_resources.extend(new_suspects); - if !self.suspected_resources.render_bundles.is_empty() { let (mut guard, _) = hub.render_bundles.write(token); let mut trackers = trackers.lock(); diff --git a/wgpu-core/src/device/mod.rs b/wgpu-core/src/device/mod.rs index a0db86c8e9..af97401de4 100644 --- a/wgpu-core/src/device/mod.rs +++ b/wgpu-core/src/device/mod.rs @@ -358,9 +358,12 @@ impl Device { profiling::scope!("maintain", "Device"); let mut life_tracker = self.lock_life(token); + life_tracker + .suspected_resources + .extend(&self.temp_suspected); + life_tracker.triage_suspected( hub, - &self.temp_suspected, &self.trackers, #[cfg(feature = "trace")] self.trace.as_ref(), @@ -455,6 +458,8 @@ impl Device { self.lock_life(&mut token) .suspected_resources .extend(&self.temp_suspected); + + self.temp_suspected.clear(); } fn create_buffer( @@ -4160,7 +4165,6 @@ impl Global { let device = device_guard.get(device_id).map_err(|_| InvalidDevice)?; device.lock_life(&mut token).triage_suspected( &hub, - &device.temp_suspected, &device.trackers, #[cfg(feature = "trace")] None, diff --git a/wgpu-core/src/device/queue.rs b/wgpu-core/src/device/queue.rs index b87c5ba5b0..945c6bb6e0 100644 --- a/wgpu-core/src/device/queue.rs +++ b/wgpu-core/src/device/queue.rs @@ -795,6 +795,8 @@ impl Global { Err(WaitIdleError::StuckGpu) => return Err(QueueSubmitError::StuckGpu), }; + device.temp_suspected.clear(); + profiling::scope!("cleanup"); if let Some(pending_execution) = device.pending_writes.post_submit( &device.command_allocator,