diff --git a/wgpu-core/src/device/life.rs b/wgpu-core/src/device/life.rs index 1f85487160..51badf465a 100644 --- a/wgpu-core/src/device/life.rs +++ b/wgpu-core/src/device/life.rs @@ -223,7 +223,6 @@ impl LifetimeTracker { pub fn track_submission( &mut self, index: SubmissionIndex, - new_suspects: &SuspectedResources, temp_resources: impl Iterator>, encoders: Vec>, ) { @@ -245,7 +244,6 @@ impl LifetimeTracker { .drain(..) .map(|stored| stored.value), ); - self.suspected_resources.extend(new_suspects); self.active.alloc().init(ActiveSubmission { index, @@ -314,12 +312,15 @@ 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 35a2119fb2..a0db86c8e9 100644 --- a/wgpu-core/src/device/mod.rs +++ b/wgpu-core/src/device/mod.rs @@ -360,6 +360,7 @@ impl Device { life_tracker.triage_suspected( hub, + &self.temp_suspected, &self.trackers, #[cfg(feature = "trace")] self.trace.as_ref(), @@ -4159,6 +4160,7 @@ 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 1073559b7b..b87c5ba5b0 100644 --- a/wgpu-core/src/device/queue.rs +++ b/wgpu-core/src/device/queue.rs @@ -805,7 +805,6 @@ impl Global { } super::Device::lock_life_internal(&device.life_tracker, &mut token).track_submission( submit_index, - &device.temp_suspected, device.pending_writes.temp_resources.drain(..), active_executions, ); diff --git a/wgpu-core/src/swap_chain.rs b/wgpu-core/src/swap_chain.rs index e70b930d67..46fcfb24d5 100644 --- a/wgpu-core/src/swap_chain.rs +++ b/wgpu-core/src/swap_chain.rs @@ -277,13 +277,6 @@ impl Global { let view = &mut view_guard[view_id.value]; let _ = view.life_guard.ref_count.take(); - /* - let (view_maybe, _) = hub.texture_views.unregister(view_id.value.0, &mut token); - drop(view_id); // contains the ref count - let view = view_maybe.ok_or(SwapChainError::Invalid)?; - if view.life_guard.ref_count.unwrap().load() != 1 { - return Err(SwapChainError::StillReferenced); - }*/ suf_texture }; diff --git a/wgpu-core/src/track/mod.rs b/wgpu-core/src/track/mod.rs index a7038a83cf..c6739f5a3b 100644 --- a/wgpu-core/src/track/mod.rs +++ b/wgpu-core/src/track/mod.rs @@ -250,7 +250,7 @@ impl ResourceTracker { Entry::Occupied(e) => { if e.get().ref_count.load() == 1 { let res = e.remove(); - assert_eq!(res.epoch, epoch); + assert_eq!(res.epoch, epoch, "Epoch mismatch for {:?}", id); true } else { false