diff --git a/src/backends/metal/video.rs b/src/backends/metal/video.rs index a4a2536b..6771cf8d 100644 --- a/src/backends/metal/video.rs +++ b/src/backends/metal/video.rs @@ -2328,7 +2328,18 @@ impl MetalBackend { } } } - if let Err(e) = changes.commit(flags, 0) { + let res = loop { + let res = changes.commit(flags, 0); + if let Err(e) = &res { + if flags.not_contains(DRM_MODE_ATOMIC_ALLOW_MODESET) { + log::warn!("Fast commit failed, retrying with modeset: {}", ErrorFmt(e)); + flags |= DRM_MODE_ATOMIC_ALLOW_MODESET; + continue; + } + } + break res; + }; + if let Err(e) = res { return Err(MetalError::Modeset(e)); } for connector in dev.connectors.lock().values() {