aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-01-04 13:02:05 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-01-04 13:02:22 +0300
commit4618e4851ccac8b5d6e708ea926a25a1c22a3e27 (patch)
tree8a001b72dc346b89e503ddc9910163bb3b14947f
parentb2ca280c49d7dc804fc76da6ec9f7f1cbe8f9de5 (diff)
downloadniri-4618e4851ccac8b5d6e708ea926a25a1c22a3e27.tar.gz
niri-4618e4851ccac8b5d6e708ea926a25a1c22a3e27.tar.bz2
niri-4618e4851ccac8b5d6e708ea926a25a1c22a3e27.zip
Default to unrestricted primary plane scanout
-rw-r--r--niri-config/src/lib.rs2
-rw-r--r--src/backend/tty.rs18
-rw-r--r--wiki/Configuration:-Debug-Options.md15
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.