diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-01-04 13:02:05 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-01-04 13:02:22 +0300 |
| commit | 4618e4851ccac8b5d6e708ea926a25a1c22a3e27 (patch) | |
| tree | 8a001b72dc346b89e503ddc9910163bb3b14947f | |
| parent | b2ca280c49d7dc804fc76da6ec9f7f1cbe8f9de5 (diff) | |
| download | niri-4618e4851ccac8b5d6e708ea926a25a1c22a3e27.tar.gz niri-4618e4851ccac8b5d6e708ea926a25a1c22a3e27.tar.bz2 niri-4618e4851ccac8b5d6e708ea926a25a1c22a3e27.zip | |
Default to unrestricted primary plane scanout
| -rw-r--r-- | niri-config/src/lib.rs | 2 | ||||
| -rw-r--r-- | src/backend/tty.rs | 18 | ||||
| -rw-r--r-- | wiki/Configuration:-Debug-Options.md | 15 |
3 files changed, 30 insertions, 5 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index 5e6e56e7..be5a3653 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -1641,6 +1641,8 @@ pub struct DebugConfig { pub disable_cursor_plane: bool, #[knuffel(child)] pub disable_direct_scanout: bool, + #[knuffel(child)] + pub restrict_primary_scanout_to_matching_format: bool, #[knuffel(child, unwrap(argument))] pub render_drm_device: Option<PathBuf>, #[knuffel(child)] diff --git a/src/backend/tty.rs b/src/backend/tty.rs index 67f99bbc..bf94ed12 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -1336,21 +1336,29 @@ impl Tty { // Overlay planes are disabled by default as they cause weird performance issues on my // system. - let mut flags = - FrameFlags::ALLOW_PRIMARY_PLANE_SCANOUT | FrameFlags::ALLOW_CURSOR_PLANE_SCANOUT; - { + let flags = { let debug = &self.config.borrow().debug; + + let primary_scanout_flag = if debug.restrict_primary_scanout_to_matching_format { + FrameFlags::ALLOW_PRIMARY_PLANE_SCANOUT + } else { + FrameFlags::ALLOW_PRIMARY_PLANE_SCANOUT_ANY + }; + let mut flags = primary_scanout_flag | FrameFlags::ALLOW_CURSOR_PLANE_SCANOUT; + if debug.enable_overlay_planes { flags.insert(FrameFlags::ALLOW_OVERLAY_PLANE_SCANOUT); } if debug.disable_direct_scanout { - flags.remove(FrameFlags::ALLOW_PRIMARY_PLANE_SCANOUT); + flags.remove(primary_scanout_flag); flags.remove(FrameFlags::ALLOW_OVERLAY_PLANE_SCANOUT); } if debug.disable_cursor_plane { flags.remove(FrameFlags::ALLOW_CURSOR_PLANE_SCANOUT); } - } + + flags + }; // Hand them over to the DRM. let drm_compositor = &mut surface.compositor; diff --git a/wiki/Configuration:-Debug-Options.md b/wiki/Configuration:-Debug-Options.md index 66b449ff..cdb0c7cc 100644 --- a/wiki/Configuration:-Debug-Options.md +++ b/wiki/Configuration:-Debug-Options.md @@ -16,6 +16,7 @@ debug { enable-overlay-planes disable-cursor-plane disable-direct-scanout + restrict-primary-scanout-to-matching-format render-drm-device "/dev/dri/renderD129" force-pipewire-invalid-modifier dbus-interfaces-in-non-session-instances @@ -84,6 +85,20 @@ debug { } ``` +### `restrict-primary-scanout-to-matching-format` + +Restricts direct scanout to the primary plane to when the window buffer exactly matches the composition swapchain format. + +This flag may prevent unexpected bandwidth changes when going between composition and scanout. +The plan is to make it default in the future, when we implement a way to tell the clients the composition swapchain format. +As is, it may prevent some clients (mpv on my machine) from scanning out to the primary plane. + +```kdl +debug { + restrict-primary-scanout-to-matching-format +} +``` + ### `render-drm-device` Override the DRM device that niri will use for all rendering. |
