diff --git a/wgpu-core/src/hub.rs b/wgpu-core/src/hub.rs index 06df58917c..8edb4e56a2 100644 --- a/wgpu-core/src/hub.rs +++ b/wgpu-core/src/hub.rs @@ -724,6 +724,14 @@ impl Hub { for element in surface_guard.map.iter_mut() { if let Element::Occupied(ref mut surface, _epoch) = *element { + if surface + .presentation + .as_ref() + .map_or(wgt::Backend::Empty, |p| p.backend()) + != A::VARIANT + { + continue; + } if let Some(present) = surface.presentation.take() { let device = &devices[present.device_id.value]; let suf = A::get_surface_mut(surface); diff --git a/wgpu-core/src/present.rs b/wgpu-core/src/present.rs index 6f7d970eef..5ef55455b2 100644 --- a/wgpu-core/src/present.rs +++ b/wgpu-core/src/present.rs @@ -36,6 +36,12 @@ pub(crate) struct Presentation { pub(crate) acquired_texture: Option>, } +impl Presentation { + pub(crate) fn backend(&self) -> wgt::Backend { + crate::id::TypedId::unzip(self.device_id.value.0).2 + } +} + #[derive(Clone, Debug, Error)] pub enum SurfaceError { #[error("surface is invalid")]