aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBB <bbedward@gmail.com>2025-08-07 14:06:11 -0400
committerGitHub <noreply@github.com>2025-08-07 11:06:11 -0700
commitf74d83dccaa6e8fffb38c304dd5d1eae07b87d24 (patch)
treed8870facb2123c3de3898989208a333e0e8ed2df
parent055a94de3d3b792adfb6842bdddd8eab6384164f (diff)
downloadniri-f74d83dccaa6e8fffb38c304dd5d1eae07b87d24.tar.gz
niri-f74d83dccaa6e8fffb38c304dd5d1eae07b87d24.tar.bz2
niri-f74d83dccaa6e8fffb38c304dd5d1eae07b87d24.zip
niri-config: add keep-max-bpc-unchanged option (#2195)
* niri-config: add disable-set-bpc option setting bpc to 8 bricks some OLED displays driven by amdgpu * change to keep-max-bpc-unchanged and add to wiki * fmt * Update wiki/Configuration:-Debug-Options.md --------- Co-authored-by: Ivan Molodetskikh <yalterz@gmail.com>
-rw-r--r--niri-config/src/lib.rs3
-rw-r--r--src/backend/tty.rs11
-rw-r--r--wiki/Configuration:-Debug-Options.md18
3 files changed, 28 insertions, 4 deletions
diff --git a/niri-config/src/lib.rs b/niri-config/src/lib.rs
index 6adc9732..220f6be5 100644
--- a/niri-config/src/lib.rs
+++ b/niri-config/src/lib.rs
@@ -2339,6 +2339,8 @@ pub struct DebugConfig {
#[knuffel(child)]
pub disable_direct_scanout: bool,
#[knuffel(child)]
+ pub keep_max_bpc_unchanged: bool,
+ #[knuffel(child)]
pub restrict_primary_scanout_to_matching_format: bool,
#[knuffel(child, unwrap(argument))]
pub render_drm_device: Option<PathBuf>,
@@ -5434,6 +5436,7 @@ mod tests {
enable_overlay_planes: false,
disable_cursor_plane: false,
disable_direct_scanout: false,
+ keep_max_bpc_unchanged: false,
restrict_primary_scanout_to_matching_format: false,
render_drm_device: Some(
"/dev/dri/renderD129",
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index 7b0303fd..3c7f512a 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -857,10 +857,13 @@ impl Tty {
}
debug!("picking mode: {mode:?}");
- // We only use 8888 RGB formats, so set max bpc to 8 to allow more types of links to run.
- match set_max_bpc(&device.drm, connector.handle(), 8) {
- Ok(bpc) => debug!("set max bpc to {bpc}"),
- Err(err) => debug!("error setting max bpc: {err:?}"),
+ if !niri.config.borrow().debug.keep_max_bpc_unchanged {
+ // We only use 8888 RGB formats, so set max bpc to 8 to allow more types of links to
+ // run.
+ match set_max_bpc(&device.drm, connector.handle(), 8) {
+ Ok(bpc) => debug!("set max bpc to {bpc}"),
+ Err(err) => debug!("error setting max bpc: {err:?}"),
+ }
}
let mut gamma_props = GammaProps::new(&device.drm, crtc)
diff --git a/wiki/Configuration:-Debug-Options.md b/wiki/Configuration:-Debug-Options.md
index ad74dba7..f2d38de0 100644
--- a/wiki/Configuration:-Debug-Options.md
+++ b/wiki/Configuration:-Debug-Options.md
@@ -30,6 +30,7 @@ debug {
honor-xdg-activation-with-invalid-serial
skip-cursor-only-updates-during-vrr
deactivate-unfocused-windows
+ keep-max-bpc-unchanged
}
binds {
@@ -292,6 +293,23 @@ debug {
}
```
+### `keep-max-bpc-unchanged`
+
+<sup>Since: next release</sup>
+
+When connecting monitors, niri sets their max bpc to 8 in order to reduce display bandwidth and to potentially allow more monitors to be connected at once.
+Restricting bpc to 8 is not a problem since we don't support HDR or color management yet and can't really make use of higher bpc.
+
+Apparently, setting max bpc to 8 breaks some displays driven by AMDGPU.
+If this happens to you, set this debug flag, which will prevent niri from changing max bpc.
+AMDGPU bug report: https://gitlab.freedesktop.org/drm/amd/-/issues/4487.
+
+```kdl
+debug {
+ keep-max-bpc-unchanged
+}
+```
+
### Key Bindings
These are not debug options, but rather key bindings.