drivers/graphics/driver-graphics: Add primary plane for every CRTC

This commit is contained in:
bjorn3
2026-05-14 15:28:49 +02:00
parent 835be6f654
commit 76d6398473
5 changed files with 18 additions and 18 deletions
@@ -82,12 +82,22 @@ impl<T: GraphicsAdapter> KmsObjects<T> {
&mut self,
driver_data: T::Crtc,
driver_data_state: <T::Crtc as KmsCrtcDriver>::State,
plane_data: T::Plane,
plane_data_state: <T::Plane as KmsPlaneDriver>::State,
) -> KmsObjectId {
let primary_plane = self.add_plane(
&[],
KmsPlaneType::Primary,
plane_data,
plane_data_state,
);
let crtc_index = self.crtcs.len() as u32;
let id = self.add(Mutex::new(KmsCrtc {
crtc_index,
gamma_size: 0,
properties: KmsCrtc::base_properties(),
primary_plane,
state: KmsCrtcState {
fb_id: None,
mode: None,
@@ -97,6 +107,8 @@ impl<T: GraphicsAdapter> KmsObjects<T> {
}));
self.crtcs.push(id);
self.get_plane(primary_plane).unwrap().lock().unwrap().possible_crtcs = 1 << crtc_index;
id
}
@@ -254,6 +266,7 @@ pub struct KmsCrtc<T: GraphicsAdapter> {
pub crtc_index: u32,
pub gamma_size: u32,
pub properties: Vec<KmsPropertyData<Self>>,
pub primary_plane: KmsObjectId,
pub state: KmsCrtcState<T>,
pub driver_data: T::Crtc,
}
+2 -15
View File
@@ -26,7 +26,7 @@ use syscall::{Error, MapFlags, Result, EACCES, EAGAIN, EINVAL, ENOENT, ENXIO, EO
use crate::kms::connector::{KmsConnectorDriver, KmsConnectorState};
use crate::kms::objects::{
self, KmsCrtc, KmsCrtcDriver, KmsCrtcState, KmsObjectId, KmsObjects, KmsPlane, KmsPlaneDriver,
KmsPlaneState, KmsPlaneType, KmsRect,
KmsPlaneState, KmsRect,
};
use crate::kms::properties::KmsPropertyKind;
@@ -623,20 +623,7 @@ impl<T: GraphicsAdapter> SchemeSync for GraphicsSchemeInner<T> {
None
};
let primary_plane_id = self
.objects
.plane_ids()
.iter()
.copied()
.find(|&pid| {
let plane = self.objects.get_plane(pid).unwrap().lock().unwrap();
plane.plane_type == KmsPlaneType::Primary
&& (plane.state.crtc_id == Some(crtc_id)
|| plane.possible_crtcs
& (1 << crtc.lock().unwrap().crtc_index)
!= 0)
})
.ok_or(Error::new(EINVAL))?;
let primary_plane_id = crtc.lock().unwrap().primary_plane;
let plane = self.objects.get_plane(primary_plane_id)?;
let mut new_crtc_state = crtc.lock().unwrap().state.clone();
new_crtc_state.mode = mode;
+1 -1
View File
@@ -449,7 +449,7 @@ impl Device {
}
fn add_kms_pipe(objects: &mut KmsObjects<Self>, pipe_idx: usize, fb: KmsFramebuffer<Self>) {
let crtc_id = objects.add_crtc(Crtc { pipe_idx }, ());
let crtc_id = objects.add_crtc(Crtc { pipe_idx }, (), (), ());
let (width, height) = (fb.width, fb.height);
+1 -1
View File
@@ -49,7 +49,7 @@ impl GraphicsAdapter for FbAdapter {
fn init(&mut self, objects: &mut KmsObjects<Self>) {
for (framebuffer_id, framebuffer) in self.framebuffers.iter().enumerate() {
let crtc = objects.add_crtc((), ());
let crtc = objects.add_crtc((), (), (), ());
objects.add_connector(
Connector {
+1 -1
View File
@@ -363,7 +363,7 @@ impl<'a> GraphicsAdapter for VirtGpuAdapter<'a> {
});
for display_id in 0..self.config.num_scanouts.get() {
let crtc = objects.add_crtc((), ());
let crtc = objects.add_crtc((), (), (), ());
objects.add_connector(VirtGpuConnector { display_id }, (), &[crtc]);
}