From 6b16cc52dbfaa12889cadb93ce19da3e3fde46f2 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Tue, 17 Dec 2024 17:04:23 +0300 Subject: Add force-pipewire-invalid-modifier debug flag --- niri-config/src/lib.rs | 2 ++ src/niri.rs | 14 +++++++++++++- wiki/Configuration:-Debug-Options.md | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs index f49c2496..a7ac89d2 100644 --- a/niri-config/src/lib.rs +++ b/niri-config/src/lib.rs @@ -1528,6 +1528,8 @@ pub struct DebugConfig { #[knuffel(child, unwrap(argument))] pub render_drm_device: Option, #[knuffel(child)] + pub force_pipewire_invalid_modifier: bool, + #[knuffel(child)] pub emulate_zero_presentation_time: bool, #[knuffel(child)] pub disable_resize_throttling: bool, diff --git a/src/niri.rs b/src/niri.rs index b2e17d5d..336446b3 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -1486,6 +1486,8 @@ impl State { #[cfg(feature = "xdp-gnome-screencast")] pub fn on_screen_cast_msg(&mut self, msg: ScreenCastToNiri) { + use smithay::reexports::gbm::Modifier; + use crate::dbus::mutter_screen_cast::StreamTargetId; match msg { @@ -1560,13 +1562,23 @@ impl State { } }; - let render_formats = self + let mut render_formats = self .backend .with_primary_renderer(|renderer| { renderer.egl_context().dmabuf_render_formats().clone() }) .unwrap_or_default(); + { + let config = self.niri.config.borrow(); + if config.debug.force_pipewire_invalid_modifier { + render_formats = render_formats + .into_iter() + .filter(|f| f.modifier == Modifier::Invalid) + .collect(); + } + } + let res = pw.start_cast( gbm, render_formats, diff --git a/wiki/Configuration:-Debug-Options.md b/wiki/Configuration:-Debug-Options.md index ee6691bc..66b449ff 100644 --- a/wiki/Configuration:-Debug-Options.md +++ b/wiki/Configuration:-Debug-Options.md @@ -17,6 +17,7 @@ debug { disable-cursor-plane disable-direct-scanout render-drm-device "/dev/dri/renderD129" + force-pipewire-invalid-modifier dbus-interfaces-in-non-session-instances wait-for-frame-completion-before-queueing emulate-zero-presentation-time @@ -95,6 +96,20 @@ debug { } ``` +### `force-pipewire-invalid-modifier` + +Since: next release + +Forces PipeWire screencasting to use the invalid modifier, even when DRM offers more modifiers. + +Useful for testing the invalid modifier code path that is hit by drivers that don't support modifiers. + +```kdl +debug { + force-pipewire-invalid-modifier +} +``` + ### `dbus-interfaces-in-non-session-instances` Make niri create its D-Bus interfaces even if it's not running as a `--session`. -- cgit