diff --git a/src/backends/metal.rs b/src/backends/metal.rs index dcbf2f91..11d1574e 100644 --- a/src/backends/metal.rs +++ b/src/backends/metal.rs @@ -164,7 +164,7 @@ async fn run_(state: Rc) -> Result<(), MetalError> { struct MetalInputDevice { slot: usize, id: InputDeviceId, - devnum: c::dev_t, + _devnum: c::dev_t, fd: CloneCell>>, inputdev: Cell>, devnode: CString, diff --git a/src/backends/metal/monitor.rs b/src/backends/metal/monitor.rs index b5060c31..c80b63a7 100644 --- a/src/backends/metal/monitor.rs +++ b/src/backends/metal/monitor.rs @@ -6,12 +6,12 @@ use crate::metal::video::PendingDrmDevice; use crate::metal::{MetalBackend, MetalDevice, MetalDrmDevice, MetalError, MetalInputDevice}; use crate::org::freedesktop::login1::session::{PauseDevice, ResumeDevice}; use crate::udev::UdevDevice; +use crate::utils::nonblock::set_nonblock; use crate::ErrorFmt; use bstr::ByteSlice; use std::cell::Cell; use std::rc::Rc; use uapi::{c, OwnedFd}; -use crate::utils::nonblock::set_nonblock; const DRM: &[u8] = b"drm"; const INPUT: &[u8] = b"input"; @@ -82,7 +82,7 @@ impl MetalBackend { } } - fn handle_drm_device_resume(self: &Rc, dev: &Rc, fd: Rc) { + fn handle_drm_device_resume(self: &Rc, dev: &Rc, _fd: Rc) { log::info!("Device resumed: {}", dev.dev.devnode.to_bytes().as_bstr()); } @@ -224,7 +224,7 @@ impl MetalBackend { } } - fn handle_drm_change(self: &Rc, dev: UdevDevice) -> Option<()> { + fn handle_drm_change(self: &Rc, _dev: UdevDevice) -> Option<()> { None } @@ -266,7 +266,7 @@ impl MetalBackend { let dev = Rc::new(MetalInputDevice { slot, id: device_id, - devnum, + _devnum: devnum, fd: Default::default(), inputdev: Default::default(), devnode: devnode.to_owned(), diff --git a/src/backends/metal/video.rs b/src/backends/metal/video.rs index 849f7e4e..ac7b1acf 100644 --- a/src/backends/metal/video.rs +++ b/src/backends/metal/video.rs @@ -1,5 +1,11 @@ +use crate::async_engine::{AsyncFd, SpawnedFuture}; use crate::backend::{BackendEvent, Output, OutputId}; -use crate::drm::drm::{ConnectorStatus, ConnectorType, DrmBlob, DrmConnector, DrmCrtc, DrmEncoder, DrmError, DrmFb, DrmFramebuffer, DrmMaster, DrmModeInfo, DrmObject, DrmPlane, DrmProperty, DrmPropertyDefinition, DrmPropertyType, PropBlob, DRM_CLIENT_CAP_ATOMIC, DRM_MODE_ATOMIC_ALLOW_MODESET, DRM_MODE_ATOMIC_NONBLOCK, DRM_MODE_PAGE_FLIP_EVENT, DrmEvent}; +use crate::drm::drm::{ + ConnectorStatus, ConnectorType, DrmBlob, DrmConnector, DrmCrtc, DrmEncoder, DrmError, DrmEvent, + DrmFb, DrmFramebuffer, DrmMaster, DrmModeInfo, DrmObject, DrmPlane, DrmProperty, + DrmPropertyDefinition, DrmPropertyType, PropBlob, DRM_CLIENT_CAP_ATOMIC, + DRM_MODE_ATOMIC_ALLOW_MODESET, DRM_MODE_ATOMIC_NONBLOCK, DRM_MODE_PAGE_FLIP_EVENT, +}; use crate::drm::gbm::{GbmDevice, GBM_BO_USE_RENDERING, GBM_BO_USE_SCANOUT}; use crate::drm::{ModifiedFormat, INVALID_MODIFIER}; use crate::format::{Format, XRGB8888}; @@ -14,7 +20,6 @@ use std::ffi::CString; use std::fmt::{Debug, Formatter}; use std::rc::Rc; use uapi::c; -use crate::async_engine::{AsyncFd, SpawnedFuture}; pub struct PendingDrmDevice { pub id: DrmId, @@ -462,14 +467,14 @@ impl MetalBackend { let connectors = get_connectors(&self.state, &dev, &resources.connectors)?; - let slf = Rc::new(MetalDrmDevice { - dev, - connectors, - }); + let slf = Rc::new(MetalDrmDevice { dev, connectors }); self.reset_drm_device(&slf)?; - let handler = self.state.eng.spawn(self.clone().handle_drm_events(slf.clone())); + let handler = self + .state + .eng + .spawn(self.clone().handle_drm_events(slf.clone())); slf.dev.handle_events.handle_events.set(Some(handler)); self.state.render_ctx.set(Some(egl)); @@ -498,13 +503,23 @@ impl MetalBackend { fn handle_drm_event(self: &Rc, event: DrmEvent, dev: &Rc) { match event { - DrmEvent::FlipComplete { tv_sec, tv_usec, sequence, crtc_id } => self.handle_drm_flip_event( - dev, crtc_id, tv_sec, tv_usec, sequence - ), + DrmEvent::FlipComplete { + tv_sec, + tv_usec, + sequence, + crtc_id, + } => self.handle_drm_flip_event(dev, crtc_id, tv_sec, tv_usec, sequence), } } - fn handle_drm_flip_event(self: &Rc, dev: &Rc, crtc_id: DrmCrtc, _tv_sec: u32, _tv_usec: u32, _sequence: u32) { + fn handle_drm_flip_event( + self: &Rc, + dev: &Rc, + crtc_id: DrmCrtc, + _tv_sec: u32, + _tv_usec: u32, + _sequence: u32, + ) { let crtc = match dev.dev.crtcs.get(&crtc_id) { Some(c) => c, _ => return, @@ -559,15 +574,26 @@ impl MetalBackend { } } - fn create_scanout_buffers(&self, dev: &Rc, connector: &Rc, format: &ModifiedFormat, width: i32, height: i32) -> Result<[RenderBuffer; 2], MetalError> { + fn create_scanout_buffers( + &self, + dev: &Rc, + connector: &Rc, + format: &ModifiedFormat, + width: i32, + height: i32, + ) -> Result<[RenderBuffer; 2], MetalError> { let create = || self.create_scanout_buffer(dev, connector, format, width, height); - Ok([ - create()?, - create()?, - ]) + Ok([create()?, create()?]) } - fn create_scanout_buffer(&self, dev: &Rc, connector: &Rc, format: &ModifiedFormat, width: i32, height: i32) -> Result { + fn create_scanout_buffer( + &self, + dev: &Rc, + connector: &Rc, + format: &ModifiedFormat, + width: i32, + height: i32, + ) -> Result { let bo = dev.dev.gbm.create_bo( width, height, @@ -628,7 +654,13 @@ impl MetalBackend { format: XRGB8888, modifier: INVALID_MODIFIER, }; - let buffers = self.create_scanout_buffers(dev, connector, &format, mode.hdisplay as _, mode.vdisplay as _)?; + let buffers = self.create_scanout_buffers( + dev, + connector, + &format, + mode.hdisplay as _, + mode.vdisplay as _, + )?; let mut changes = connector.master.change(DRM_MODE_ATOMIC_ALLOW_MODESET); changes.change_object(connector.id, |c| { c.change(connector.crtc_id.id, crtc.id.0 as _); @@ -694,9 +726,13 @@ impl MetalBackend { }; let buffer = &buffers[connector.next_buffer.fetch_add(1) % buffers.len()]; if let Some(node) = self.state.root.outputs.get(&connector.output_id) { - buffer.egl.render(&*node, &self.state, Some(node.position.get())); + buffer + .egl + .render(&*node, &self.state, Some(node.position.get())); } - let mut changes = connector.master.change(DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_PAGE_FLIP_EVENT); + let mut changes = connector + .master + .change(DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_PAGE_FLIP_EVENT); changes.change_object(plane.id, |c| { c.change(plane.fb_id.id, buffer.drm.id().0 as _); }); diff --git a/src/drm/drm.rs b/src/drm/drm.rs index 274aadf3..446d561e 100644 --- a/src/drm/drm.rs +++ b/src/drm/drm.rs @@ -1,10 +1,19 @@ mod sys; -use std::cell::RefCell; -use crate::drm::drm::sys::{create_lease, drm_mode_modeinfo, get_cap, get_device_name_from_fd2, get_minor_name_from_fd, get_node_type_from_fd, get_nodes, is_master, mode_addfb2, mode_atomic, mode_create_blob, mode_destroy_blob, mode_get_resources, mode_getconnector, mode_getencoder, mode_getplane, mode_getplaneresources, mode_getproperty, mode_obj_getproperties, mode_rmfb, set_client_cap, DRM_DISPLAY_MODE_LEN, DRM_MODE_ATOMIC_TEST_ONLY, DRM_MODE_FB_MODIFIERS, DRM_MODE_OBJECT_BLOB, DRM_MODE_OBJECT_CONNECTOR, DRM_MODE_OBJECT_CRTC, DRM_MODE_OBJECT_ENCODER, DRM_MODE_OBJECT_FB, DRM_MODE_OBJECT_MODE, DRM_MODE_OBJECT_PLANE, DRM_MODE_OBJECT_PROPERTY, gem_close, prime_fd_to_handle, drm_event, drm_event_vblank}; +use crate::drm::drm::sys::{ + create_lease, drm_event, drm_event_vblank, drm_mode_modeinfo, gem_close, get_cap, + get_device_name_from_fd2, get_minor_name_from_fd, get_node_type_from_fd, get_nodes, is_master, + mode_addfb2, mode_atomic, mode_create_blob, mode_destroy_blob, mode_get_resources, + mode_getconnector, mode_getencoder, mode_getplane, mode_getplaneresources, mode_getproperty, + mode_obj_getproperties, mode_rmfb, prime_fd_to_handle, set_client_cap, DRM_DISPLAY_MODE_LEN, + DRM_MODE_ATOMIC_TEST_ONLY, DRM_MODE_FB_MODIFIERS, DRM_MODE_OBJECT_BLOB, + DRM_MODE_OBJECT_CONNECTOR, DRM_MODE_OBJECT_CRTC, DRM_MODE_OBJECT_ENCODER, DRM_MODE_OBJECT_FB, + DRM_MODE_OBJECT_MODE, DRM_MODE_OBJECT_PLANE, DRM_MODE_OBJECT_PROPERTY, +}; use crate::utils::oserror::OsError; use ahash::AHashMap; use bstr::{BString, ByteSlice}; +use std::cell::RefCell; use std::ffi::CString; use std::fmt::{Debug, Display, Formatter}; use std::mem; @@ -17,12 +26,12 @@ use uapi::{c, Errno, OwnedFd, Ustring}; use crate::drm::gbm::GbmBo; use crate::drm::INVALID_MODIFIER; use crate::utils::stack::Stack; +use crate::utils::syncqueue::SyncQueue; use crate::ErrorFmt; pub use sys::{ DRM_CLIENT_CAP_ATOMIC, DRM_MODE_ATOMIC_ALLOW_MODESET, DRM_MODE_ATOMIC_NONBLOCK, DRM_MODE_PAGE_FLIP_EVENT, }; -use crate::utils::syncqueue::SyncQueue; #[derive(Debug, Error)] pub enum DrmError { @@ -188,6 +197,7 @@ impl DrmMaster { mode_get_resources(self.raw()) } + #[allow(dead_code)] pub fn get_cap(&self, cap: u64) -> Result { get_cap(self.raw(), cap) } @@ -329,7 +339,7 @@ impl DrmMaster { crtc_id: DrmCrtc(event.crtc_id), }); } - _ => { }, + _ => {} } buf = &mut buf[len as usize..]; } @@ -586,6 +596,7 @@ pub struct ObjectChange<'a> { } impl Change { + #[allow(dead_code)] pub fn test(&self) -> Result<(), DrmError> { mode_atomic( self.master.raw(), diff --git a/src/drm/drm/sys.rs b/src/drm/drm/sys.rs index 4a86a765..f1de584b 100644 --- a/src/drm/drm/sys.rs +++ b/src/drm/drm/sys.rs @@ -212,6 +212,7 @@ struct drm_mode_get_property { const DRM_IOCTL_MODE_GETPROPERTY: u64 = drm_iowr::(0xaa); +#[allow(dead_code)] const DRM_MODE_PROP_PENDING: u32 = 1 << 0; const DRM_MODE_PROP_RANGE: u32 = 1 << 1; const DRM_MODE_PROP_IMMUTABLE: u32 = 1 << 2; @@ -397,8 +398,10 @@ pub const DRM_MODE_OBJECT_PROPERTY: u32 = 0xb0b0b0b0; pub const DRM_MODE_OBJECT_FB: u32 = 0xfbfbfbfb; pub const DRM_MODE_OBJECT_BLOB: u32 = 0xbbbbbbbb; pub const DRM_MODE_OBJECT_PLANE: u32 = 0xeeeeeeee; +#[allow(dead_code)] pub const DRM_MODE_OBJECT_ANY: u32 = 0; +#[allow(dead_code)] pub const DRM_MODE_CONNECTOR_Unknown: u32 = 0; pub const DRM_MODE_CONNECTOR_VGA: u32 = 1; pub const DRM_MODE_CONNECTOR_DVII: u32 = 2; @@ -948,6 +951,7 @@ struct drm_mode_fb_cmd2 { modifier: [u64; 4], } +#[allow(dead_code)] pub const DRM_MODE_FB_INTERLACED: u32 = 1 << 0; pub const DRM_MODE_FB_MODIFIERS: u32 = 1 << 1; @@ -1023,19 +1027,18 @@ struct drm_gem_close { const DRM_IOCTL_GEM_CLOSE: u64 = drm_iow::(0x09); pub fn gem_close(fd: c::c_int, handle: u32) -> Result<(), OsError> { - let mut res = drm_gem_close { - handle, - pad: 0, - }; + let mut res = drm_gem_close { handle, pad: 0 }; unsafe { ioctl(fd, DRM_IOCTL_GEM_CLOSE, &mut res)?; } Ok(()) } -pub const DRM_EVENT_VBLANK : u32 = 0x01; -pub const DRM_EVENT_FLIP_COMPLETE : u32 = 0x02; -pub const DRM_EVENT_CRTC_SEQUENCE : u32 = 0x03; +#[allow(dead_code)] +pub const DRM_EVENT_VBLANK: u32 = 0x01; +pub const DRM_EVENT_FLIP_COMPLETE: u32 = 0x02; +#[allow(dead_code)] +pub const DRM_EVENT_CRTC_SEQUENCE: u32 = 0x03; #[repr(C)] pub struct drm_event { @@ -1043,7 +1046,7 @@ pub struct drm_event { pub length: u32, } -unsafe impl Pod for drm_event { } +unsafe impl Pod for drm_event {} #[repr(C)] pub struct drm_event_vblank { @@ -1055,4 +1058,4 @@ pub struct drm_event_vblank { pub crtc_id: u32, } -unsafe impl Pod for drm_event_vblank { } +unsafe impl Pod for drm_event_vblank {} diff --git a/src/drm/gbm.rs b/src/drm/gbm.rs index 8fedaf3b..9a38b9a5 100644 --- a/src/drm/gbm.rs +++ b/src/drm/gbm.rs @@ -2,12 +2,11 @@ use crate::drm::dma::{DmaBuf, DmaBufPlane}; use crate::drm::drm::{Drm, DrmError}; use crate::drm::{ModifiedFormat, INVALID_MODIFIER}; use crate::format::formats; -use crate::utils::oserror::OsError; use std::fmt::{Debug, Formatter}; use std::ptr; use std::rc::Rc; use thiserror::Error; -use uapi::{c, Errno, OwnedFd}; +use uapi::{c, OwnedFd}; #[derive(Debug, Error)] pub enum GbmError { @@ -21,8 +20,6 @@ pub enum GbmError { UnknownFormat, #[error("Could not retrieve a drm-buf fd")] DrmFd, - #[error("Could not retrieve a GEM handle")] - GemHandle(#[source] OsError), } type Device = u8; @@ -39,16 +36,6 @@ pub const GBM_BO_USE_LINEAR: u32 = 1 << 4; #[allow(dead_code)] pub const GBM_BO_USE_PROTECTED: u32 = 1 << 5; -#[allow(non_camel_case_types)] -#[repr(C)] -union gbm_bo_handle { - ptr: *mut u8, - s32: i32, - u32: u32, - s64: i64, - u64: u64, -} - #[link(name = "gbm")] extern "C" { fn gbm_create_device(fd: c::c_int) -> *mut Device; @@ -72,7 +59,6 @@ extern "C" { fn gbm_bo_get_modifier(bo: *mut Bo) -> u64; fn gbm_bo_get_stride_for_plane(bo: *mut Bo, plane: c::c_int) -> u32; fn gbm_bo_get_fd_for_plane(bo: *mut Bo, plane: c::c_int) -> c::c_int; - fn gbm_bo_get_handle_for_plane(bo: *mut Bo, plane: c::c_int) -> gbm_bo_handle; fn gbm_bo_get_offset(bo: *mut Bo, plane: c::c_int) -> u32; fn gbm_bo_get_format(bo: *mut Bo) -> u32; #[allow(dead_code)] @@ -97,7 +83,6 @@ struct BoHolder { pub struct GbmBo { _bo: BoHolder, dma: DmaBuf, - handles: Vec, } unsafe fn export_bo(bo: *mut Bo) -> Result { @@ -132,18 +117,6 @@ unsafe fn export_bo(bo: *mut Bo) -> Result { }) } -unsafe fn export_handles(bo: *mut Bo) -> Result, GbmError> { - let mut planes = vec![]; - for plane in 0..gbm_bo_get_plane_count(bo) { - let handle = gbm_bo_get_handle_for_plane(bo, plane); - if handle.s32 < 0 { - return Err(GbmError::GemHandle(Errno::default().into())); - } - planes.push(handle.u32); - } - Ok(planes) -} - impl GbmDevice { pub fn new(drm: &Drm) -> Result { let drm = drm.dup_unprivileged()?; @@ -182,11 +155,9 @@ impl GbmDevice { } let bo = BoHolder { bo }; let dma = export_bo(bo.bo)?; - let handles = export_handles(bo.bo)?; Ok(GbmBo { _bo: bo, dma, - handles, }) } } @@ -204,10 +175,6 @@ impl GbmBo { pub fn dma(&self) -> &DmaBuf { &self.dma } - - pub fn gem(&self) -> &[u32] { - &self.handles - } } impl Drop for BoHolder { diff --git a/src/format.rs b/src/format.rs index ab64fa6f..9864d3a7 100644 --- a/src/format.rs +++ b/src/format.rs @@ -29,11 +29,11 @@ pub fn formats() -> &'static AHashMap { &*FORMATS_MAP } -#[allow(dead_code)] const fn fourcc_code(a: char, b: char, c: char, d: char) -> u32 { (a as u32) | ((b as u32) << 8) | ((c as u32) << 16) | ((d as u32) << 24) } +#[allow(dead_code)] pub fn debug(fourcc: u32) -> impl Debug { debug_fn(move |fmt| { fmt.write_char(fourcc as u8 as char)?; diff --git a/src/udev.rs b/src/udev.rs index b0663801..fbb75a8f 100644 --- a/src/udev.rs +++ b/src/udev.rs @@ -284,6 +284,7 @@ impl<'a> UdevListEntry<'a> { macro_rules! strfn { ($f:ident, $raw:ident) => { + #[allow(dead_code)] pub fn $f(&self) -> Option<&CStr> { let res = unsafe { $raw(self.device) }; if res.is_null() { diff --git a/src/utils/mod.rs b/src/utils/mod.rs index 01584b71..4f30b22a 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -9,6 +9,7 @@ pub mod debug_fn; pub mod errorfmt; pub mod hex; pub mod linkedlist; +pub mod nonblock; pub mod numcell; pub mod oserror; pub mod ptr_ext; @@ -21,4 +22,3 @@ pub mod tri; pub mod vasprintf; pub mod vec_ext; pub mod vecstorage; -pub mod nonblock; diff --git a/src/utils/nonblock.rs b/src/utils/nonblock.rs index 059280b8..26828bb4 100644 --- a/src/utils/nonblock.rs +++ b/src/utils/nonblock.rs @@ -1,5 +1,5 @@ -use uapi::{c}; use crate::utils::oserror::OsError; +use uapi::c; pub fn set_nonblock(fd: c::c_int) -> Result<(), OsError> { let fl = uapi::fcntl_getfl(fd)?;