aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--niri-config/src/lib.rs2
-rw-r--r--src/niri.rs14
-rw-r--r--wiki/Configuration:-Debug-Options.md15
3 files changed, 30 insertions, 1 deletions
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<PathBuf>,
#[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`
+
+<sup>Since: next release</sup>
+
+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`.