aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-01-06 09:14:48 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-01-06 09:14:48 +0400
commit3d5de921cd79cd951cc09bf47b908163aa56b276 (patch)
tree170e1621a8f78204ea546facc288d52621efe33b /src
parent8703feedee755353269306c65cdb78384dcc97e8 (diff)
downloadniri-3d5de921cd79cd951cc09bf47b908163aa56b276.tar.gz
niri-3d5de921cd79cd951cc09bf47b908163aa56b276.tar.bz2
niri-3d5de921cd79cd951cc09bf47b908163aa56b276.zip
Add render-drm-device debug config option
Diffstat (limited to 'src')
-rw-r--r--src/backend/tty.rs45
-rw-r--r--src/config.rs5
2 files changed, 44 insertions, 6 deletions
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index cabce8b7..ab7a7e84 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -190,12 +190,16 @@ impl Tty {
let api = GbmGlesBackend::with_factory(Box::new(create_renderer));
let gpu_manager = GpuManager::new(api).unwrap();
- let primary_gpu_path = udev::primary_gpu(&seat_name).unwrap().unwrap();
- let primary_node = DrmNode::from_path(primary_gpu_path).unwrap();
- let primary_render_node = primary_node
- .node_with_type(NodeType::Render)
- .unwrap()
- .unwrap();
+ let (primary_node, primary_render_node) = primary_node_from_config(&config.borrow())
+ .unwrap_or_else(|| {
+ let primary_gpu_path = udev::primary_gpu(&seat_name).unwrap().unwrap();
+ let primary_node = DrmNode::from_path(primary_gpu_path).unwrap();
+ let primary_render_node = primary_node
+ .node_with_type(NodeType::Render)
+ .unwrap()
+ .unwrap();
+ (primary_node, primary_render_node)
+ });
let mut node_path = String::new();
if let Some(path) = primary_render_node.dev_path() {
@@ -1224,6 +1228,35 @@ impl Tty {
}
}
+fn primary_node_from_config(config: &Config) -> Option<(DrmNode, DrmNode)> {
+ let path = config.debug.render_drm_device.as_ref()?;
+ debug!("attempting to use render node from config: {path:?}");
+
+ match DrmNode::from_path(path) {
+ Ok(node) => {
+ if node.ty() == NodeType::Render {
+ match node.node_with_type(NodeType::Primary) {
+ Some(Ok(primary_node)) => {
+ return Some((primary_node, node));
+ }
+ Some(Err(err)) => {
+ warn!("error opening primary node for render node {path:?}: {err:?}");
+ }
+ None => {
+ warn!("error opening primary node for render node {path:?}");
+ }
+ }
+ } else {
+ warn!("DRM node {path:?} is not a render node");
+ }
+ }
+ Err(err) => {
+ warn!("error opening {path:?} as DRM node: {err:?}");
+ }
+ }
+ None
+}
+
fn surface_dmabuf_feedback(
compositor: &GbmDrmCompositor,
primary_formats: HashSet<Format>,
diff --git a/src/config.rs b/src/config.rs
index 8127d9bb..b6397a34 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -381,6 +381,8 @@ pub struct DebugConfig {
pub enable_overlay_planes: bool,
#[knuffel(child)]
pub disable_cursor_plane: bool,
+ #[knuffel(child, unwrap(argument))]
+ pub render_drm_device: Option<PathBuf>,
}
impl Default for DebugConfig {
@@ -392,6 +394,7 @@ impl Default for DebugConfig {
enable_color_transformations_capability: false,
enable_overlay_planes: false,
disable_cursor_plane: false,
+ render_drm_device: None,
}
}
}
@@ -655,6 +658,7 @@ mod tests {
debug {
animation-slowdown 2.0
+ render-drm-device "/dev/dri/renderD129"
}
"#,
Config {
@@ -791,6 +795,7 @@ mod tests {
]),
debug: DebugConfig {
animation_slowdown: 2.,
+ render_drm_device: Some(PathBuf::from("/dev/dri/renderD129")),
..Default::default()
},
},