diff --git a/src/backend/kms/device.rs b/src/backend/kms/device.rs index 2fde397c..a1d89bae 100644 --- a/src/backend/kms/device.rs +++ b/src/backend/kms/device.rs @@ -237,7 +237,7 @@ impl State { let gbm = GbmDevice::new(fd) .with_context(|| format!("Failed to initialize GBM device for {}", path.display()))?; - let (render_node, render_formats) = { + let (render_node, render_formats, is_software) = { let egl = init_egl(&gbm)?; let render_node = egl @@ -248,7 +248,7 @@ impl State { .unwrap_or(drm_node); let render_formats = egl.context.dmabuf_texture_formats().clone(); - (render_node, render_formats) + (render_node, render_formats, egl.device.is_software()) }; let token = self @@ -271,8 +271,11 @@ impl State { ) .with_context(|| format!("Failed to add drm device to event loop: {}", dev))?; - let socket = match self.create_socket(dh, render_node, render_formats.clone()) { - Ok(socket) => Some(socket), + let socket = match (!is_software) + .then(|| self.create_socket(dh, render_node, render_formats.clone())) + .transpose() + { + Ok(socket) => socket, Err(err) => { warn!( ?err, @@ -282,6 +285,21 @@ impl State { } }; + let leasing_global = match (!is_software) + .then(|| DrmLeaseState::new::(dh, &drm_node)) + .transpose() + { + Ok(global) => global, + Err(err) => { + // TODO: replace with inspect_err, once stable + warn!( + ?err, + "Failed to initialize drm lease global for: {}", drm_node + ); + None + } + }; + let drm = GbmDrmOutputManager::new( drm, GbmAllocator::new( @@ -311,16 +329,7 @@ impl State { gbm, leased_connectors: Vec::new(), - leasing_global: DrmLeaseState::new::(dh, &drm_node) - .map_err(|err| { - // TODO: replace with inspect_err, once stable - warn!( - ?err, - "Failed to initialize drm lease global for: {}", drm_node - ); - err - }) - .ok(), + leasing_global, active_leases: Vec::new(), active_buffers: HashSet::new(), },