From ab8bfb9d5d3a8853b6ad87fc18a3d64a9bba3d90 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Thu, 14 May 2026 15:33:17 +0200 Subject: [PATCH] drivers/graphics/driver-graphics: Report actual planes from MODE_GET_PLANE --- drivers/graphics/driver-graphics/src/lib.rs | 41 ++++++++------------- 1 file changed, 15 insertions(+), 26 deletions(-) diff --git a/drivers/graphics/driver-graphics/src/lib.rs b/drivers/graphics/driver-graphics/src/lib.rs index 6a3357594c..137d6d10ca 100644 --- a/drivers/graphics/driver-graphics/src/lib.rs +++ b/drivers/graphics/driver-graphics/src/lib.rs @@ -474,14 +474,6 @@ impl SchemeSync for GraphicsSchemeInner { ) -> Result { use redox_ioctl::drm as ipc; - fn id_index(id: u32) -> u32 { - id & 0xFF - } - - fn plane_id(i: u32) -> u32 { - id_index(i) | (1 << 13) - } - match self.handles.get_mut(id)? { Handle::SchemeRoot => return Err(Error::new(EOPNOTSUPP)), Handle::V2 { @@ -954,11 +946,12 @@ impl SchemeSync for GraphicsSchemeInner { Ok(0) }), ipc::MODE_GET_PLANE_RES => ipc::DrmModeGetPlaneRes::with(payload, |mut data| { - let count = self.objects.crtc_ids().len(); - let mut ids = Vec::with_capacity(count); - for i in 0..(count as u32) { - ids.push(plane_id(i)); - } + let ids = self + .objects + .plane_ids() + .iter() + .map(|id| id.0) + .collect::>(); data.set_plane_id_ptr(&ids); Ok(0) }), @@ -1017,19 +1010,15 @@ impl SchemeSync for GraphicsSchemeInner { Ok(0) }), ipc::MODE_GET_PLANE => ipc::DrmModeGetPlane::with(payload, |mut data| { - let i = id_index(data.plane_id()); - let crtc_id = self.objects.crtc_ids()[i as usize]; - let crtc = self.objects.get_crtc(crtc_id).unwrap(); - data.set_crtc_id(crtc_id.0); - data.set_fb_id( - crtc.lock() - .unwrap() - .state - .fb_id - .unwrap_or(KmsObjectId::INVALID) - .0, - ); - data.set_possible_crtcs(1 << i); + let plane = self + .objects + .get_plane(KmsObjectId(data.plane_id())) + .unwrap() + .lock() + .unwrap(); + data.set_crtc_id(plane.state.crtc_id.map_or(0, |id| id.0)); + data.set_fb_id(plane.state.fb_id.unwrap_or(KmsObjectId::INVALID).0); + data.set_possible_crtcs(plane.possible_crtcs); data.set_format_type_ptr(&[DrmFourcc::Argb8888 as u32]); Ok(0) }),