Skip to content

Commit

Permalink
[PATCH] Handle user callbacks in surface_configure
Browse files Browse the repository at this point in the history
  • Loading branch information
nical authored and bonsairobo committed Mar 1, 2024
1 parent fb4f9c5 commit 8430692
Showing 1 changed file with 21 additions and 8 deletions.
29 changes: 21 additions & 8 deletions wgpu-core/src/device/global.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2104,15 +2104,19 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
Ok(())
}

log::info!("configuring surface with {:?}", config);
let hub = A::hub(self);
let mut token = Token::root();
// User callbacks must not be called while we are holding locks.
let mut user_callbacks = None;

let (mut surface_guard, mut token) = self.surfaces.write(&mut token);
let (adapter_guard, mut token) = hub.adapters.read(&mut token);
let (device_guard, mut token) = hub.devices.read(&mut token);
log::info!("configuring surface with {:?}", config);

let error = 'outer: loop {
let hub = A::hub(self);
let mut token = Token::root();

let (mut surface_guard, mut token) = self.surfaces.write(&mut token);
let (adapter_guard, mut token) = hub.adapters.read(&mut token);
let (device_guard, mut token) = hub.devices.read(&mut token);

let device = match device_guard.get(device_id) {
Ok(device) => device,
Err(_) => break DeviceError::Invalid.into(),
Expand Down Expand Up @@ -2184,8 +2188,13 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
}

// Wait for all work to finish before configuring the surface.
if let Err(e) = device.maintain(hub, wgt::Maintain::Wait, &mut token) {
break e.into();
match device.maintain(hub, wgt::Maintain::Wait, &mut token) {
Ok((closures, _)) => {
user_callbacks = Some(closures);
}
Err(e) => {
break e.into();
}
}

// All textures must be destroyed before the surface can be re-configured.
Expand Down Expand Up @@ -2233,6 +2242,10 @@ impl<G: GlobalIdentityHandlerFactory> Global<G> {
return None;
};

if let Some(callbacks) = user_callbacks {
callbacks.fire();
}

Some(error)
}

Expand Down

0 comments on commit 8430692

Please sign in to comment.