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:
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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user