Try to reduce linux wGPU crashes better (#55343)

Updates #54349

There were two problems:
* The crash never happened, instead we'd always retry.
* When re-trying it seemed like we were picking llvmpipe. Claude's
suggestion was that immediately after wake, the real GPU isn't yet
awake, and so we pick llvm. Avoid this by disallowing llvmpipe on retry

Release Notes:

- linux: Reduced crash rate when recovering GPUs
This commit is contained in:
Conrad Irwin authored and GitHub committed 2026-05-05 02:24:23 +00:00
1 parent ba6d258b0f
commit c6514d7397
4 files changed
+63 -29

No files matched your search

@@ -1387,16 +1387,13 @@ impl PlatformWindow for WaylandWindow {
.display_ptr()
.cast::<std::ffi::c_void>(),
};
state.renderer.recover(&raw_window).unwrap_or_else(|err| {
panic!(
"GPU device lost and recovery failed. \
This may happen after system suspend/resume. \
Please restart the application.\n\nError: {err}"
)
});
match state.renderer.recover(&raw_window) {
Ok(()) => {}
Err(err) => {
log::warn!("GPU recovery failed, will retry on next frame: {err}");
}
}
// The current scene references atlas textures that were cleared during recovery.
// Skip this frame and let the next frame rebuild the scene with fresh textures.
state.force_render_after_recovery = true;
return;
}
+6 -9
View File
@@ -1670,16 +1670,13 @@ impl PlatformWindow for X11Window {
window_id: self.0.x_window,
visual_id: inner.visual_id,
};
inner.renderer.recover(&raw_window).unwrap_or_else(|err| {
panic!(
"GPU device lost and recovery failed. \
This may happen after system suspend/resume. \
Please restart the application.\n\nError: {err}"
)
});
match inner.renderer.recover(&raw_window) {
Ok(()) => {}
Err(err) => {
log::warn!("GPU recovery failed, will retry on next frame: {err}");
}
}
// The current scene references atlas textures that were cleared during recovery.
// Skip this frame and let the next frame rebuild the scene with fresh textures.
inner.force_render_after_recovery = true;
return;
}