diff --git a/src/Game.cs b/src/Game.cs index b2f2fcb..a7d2d67 100644 --- a/src/Game.cs +++ b/src/Game.cs @@ -207,14 +207,32 @@ public void SetFramePacingSettings(FramePacingSettings settings) if (settings.Mode == FramePacingMode.LatencyOptimized) { + bool changedPresentMode = false; + // If latency-optimized, prefer mailbox or immediate mode if (GraphicsDevice.SupportsPresentMode(MainWindow, PresentMode.Mailbox)) { - GraphicsDevice.SetSwapchainParameters(MainWindow, SwapchainComposition.SDR, PresentMode.Mailbox); + changedPresentMode = GraphicsDevice.SetSwapchainParameters( + MainWindow, SwapchainComposition.SDR, PresentMode.Mailbox + ); + } + + if (!changedPresentMode + && GraphicsDevice.SupportsPresentMode(MainWindow, PresentMode.Immediate)) + { + changedPresentMode = GraphicsDevice.SetSwapchainParameters( + MainWindow, SwapchainComposition.SDR, PresentMode.Immediate + ); + + if (changedPresentMode) + { + Logger.LogInfo("Mailbox present mode is unsupported; falling back to Immediate."); + } } - else if (GraphicsDevice.SupportsPresentMode(MainWindow, PresentMode.Immediate)) + + if (!changedPresentMode) { - GraphicsDevice.SetSwapchainParameters(MainWindow, SwapchainComposition.SDR, PresentMode.Immediate); + Logger.LogInfo("Failed to change present mode to one with less latency due to lack of support."); } }