diff options
| -rw-r--r-- | niri-config/src/lib.rs | 3 | ||||
| -rw-r--r-- | src/backend/tty.rs | 6 | ||||
| -rw-r--r-- | wiki/Configuration:-Debug-Options.md | 17 |
3 files changed, 26 insertions, 0 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 44aeffe9..012db9e9 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -2329,6 +2329,8 @@ pub struct DebugConfig { pub strict_new_window_focus_policy: bool, #[knuffel(child)] pub honor_xdg_activation_with_invalid_serial: bool, + #[knuffel(child)] + pub skip_cursor_only_updates_during_vrr: bool, } #[derive(knuffel::DecodeScalar, Debug, Clone, Copy, PartialEq, Eq)] @@ -5286,6 +5288,7 @@ mod tests { disable_monitor_names: false, strict_new_window_focus_policy: false, honor_xdg_activation_with_invalid_serial: false, + skip_cursor_only_updates_during_vrr: false, }, workspaces: [ Workspace { diff --git a/src/backend/tty.rs b/src/backend/tty.rs index 363526d4..3b5cd31c 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -1422,6 +1422,12 @@ impl Tty { if debug.disable_cursor_plane { flags.remove(FrameFlags::ALLOW_CURSOR_PLANE_SCANOUT); } + if debug.skip_cursor_only_updates_during_vrr { + let output_state = niri.output_state.get(output).unwrap(); + if output_state.frame_clock.vrr() { + flags.insert(FrameFlags::SKIP_CURSOR_ONLY_UPDATES); + } + } flags }; diff --git a/wiki/Configuration:-Debug-Options.md b/wiki/Configuration:-Debug-Options.md index 639df325..cf59d8b6 100644 --- a/wiki/Configuration:-Debug-Options.md +++ b/wiki/Configuration:-Debug-Options.md @@ -29,6 +29,7 @@ debug { disable-monitor-names strict-new-window-focus-policy honor-xdg-activation-with-invalid-serial + skip-cursor-only-updates-during-vrr } binds { @@ -275,6 +276,22 @@ debug { } ``` +### `skip-cursor-only-updates-during-vrr` + +<sup>Since: next release</sup> + +Skips redrawing the screen from cursor input while variable refresh rate is active. + +Useful for games where the cursor isn't drawn internally to prevent erratic VRR shifts in response to cursor movement. + +Note that the current implementation has some issues, for example when there's nothing redrawing the screen (like a game), the rendering will appear to completely freeze (since cursor movements won't cause redraws). + +```kdl +debug { + skip-cursor-only-updates-during-vrr +} +``` + ### Key Bindings These are not debug options, but rather key bindings. |
