mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-24 02:01:18 +07:00
tty: Set max bpc to 8
This commit is contained in:
+42
-1
@@ -8,7 +8,7 @@ use std::sync::{Arc, Mutex};
|
|||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::{io, mem};
|
use std::{io, mem};
|
||||||
|
|
||||||
use anyhow::{anyhow, Context};
|
use anyhow::{anyhow, bail, Context};
|
||||||
use libc::dev_t;
|
use libc::dev_t;
|
||||||
use niri_config::Config;
|
use niri_config::Config;
|
||||||
use smithay::backend::allocator::dmabuf::Dmabuf;
|
use smithay::backend::allocator::dmabuf::Dmabuf;
|
||||||
@@ -694,6 +694,12 @@ impl Tty {
|
|||||||
}
|
}
|
||||||
debug!("picking mode: {mode:?}");
|
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:?}"),
|
||||||
|
}
|
||||||
|
|
||||||
let surface = device
|
let surface = device
|
||||||
.drm
|
.drm
|
||||||
.create_surface(crtc, mode, &[connector.handle()])?;
|
.create_surface(crtc, mode, &[connector.handle()])?;
|
||||||
@@ -1768,6 +1774,41 @@ fn get_edid_info(device: &DrmDevice, connector: connector::Handle) -> Option<Edi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_max_bpc(device: &DrmDevice, connector: connector::Handle, bpc: u64) -> anyhow::Result<u64> {
|
||||||
|
let props = device
|
||||||
|
.get_properties(connector)
|
||||||
|
.context("error getting properties")?;
|
||||||
|
for (prop, value) in props {
|
||||||
|
let info = device
|
||||||
|
.get_property(prop)
|
||||||
|
.context("error getting property")?;
|
||||||
|
if info.name().to_str() != Ok("max bpc") {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let property::ValueType::UnsignedRange(min, max) = info.value_type() else {
|
||||||
|
bail!("wrong property type")
|
||||||
|
};
|
||||||
|
|
||||||
|
let bpc = bpc.clamp(min, max);
|
||||||
|
|
||||||
|
let property::Value::UnsignedRange(value) = info.value_type().convert_value(value) else {
|
||||||
|
bail!("wrong property type")
|
||||||
|
};
|
||||||
|
if value == bpc {
|
||||||
|
return Ok(bpc);
|
||||||
|
}
|
||||||
|
|
||||||
|
device
|
||||||
|
.set_property(connector, prop, property::Value::UnsignedRange(bpc).into())
|
||||||
|
.context("error setting property")?;
|
||||||
|
|
||||||
|
return Ok(bpc);
|
||||||
|
}
|
||||||
|
|
||||||
|
Err(anyhow!("couldn't find max bpc property"))
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|||||||
Reference in New Issue
Block a user