Add render-drm-device debug config option

This commit is contained in:
Ivan Molodetskikh
2024-01-06 09:14:48 +04:00
parent 8703feedee
commit 3d5de921cd
2 changed files with 44 additions and 6 deletions
+39 -6
View File
@@ -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>,
+5
View File
@@ -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()
},
},