diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-04 07:49:50 +0400 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2023-09-04 07:49:50 +0400 |
| commit | b54e1522ff47001763aed97158ed7da202706fd7 (patch) | |
| tree | 76d8cd87318636c38d94390d791c161000ecc631 /src/backend | |
| parent | 1b9e9a15c88f87e08f114a7c6ecf3625afc11459 (diff) | |
| download | niri-b54e1522ff47001763aed97158ed7da202706fd7.tar.gz niri-b54e1522ff47001763aed97158ed7da202706fd7.tar.bz2 niri-b54e1522ff47001763aed97158ed7da202706fd7.zip | |
tty: Add Surface state struct
Diffstat (limited to 'src/backend')
| -rw-r--r-- | src/backend/tty.rs | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/backend/tty.rs b/src/backend/tty.rs index f7db2d2e..39b480aa 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -60,7 +60,7 @@ struct OutputDevice { gles: GlesRenderer, formats: HashSet<DrmFormat>, drm_scanner: DrmScanner, - surfaces: HashMap<crtc::Handle, (GbmDrmCompositor, DmabufFeedback)>, + surfaces: HashMap<crtc::Handle, Surface>, dmabuf_state: DmabufState, // dmabuf_global: DmabufGlobal, } @@ -71,6 +71,11 @@ struct TtyOutputState { crtc: crtc::Handle, } +struct Surface { + compositor: GbmDrmCompositor, + dmabuf_feedback: DmabufFeedback, +} + impl Tty { pub fn new(event_loop: LoopHandle<'static, LoopData>) -> Self { let (session, notifier) = LibSeatSession::new().unwrap(); @@ -275,7 +280,8 @@ impl Tty { trace!("vblank {metadata:?}"); let device = tty.output_device.as_mut().unwrap(); - let drm_compositor = &mut device.surfaces.get_mut(&crtc).unwrap().0; + let drm_compositor = + &mut device.surfaces.get_mut(&crtc).unwrap().compositor; let presentation_time = match metadata.as_mut().unwrap().time { DrmEventTime::Monotonic(time) => time, @@ -513,7 +519,11 @@ impl Tty { .build() .unwrap(); - let res = device.surfaces.insert(crtc, (compositor, dmabuf_feedback)); + let surface = Surface { + compositor, + dmabuf_feedback, + }; + let res = device.surfaces.insert(crtc, surface); assert!(res.is_none(), "crtc must not have already existed"); niri.add_output(output.clone(), Some(refresh_interval(*mode))); @@ -567,7 +577,8 @@ impl Tty { let device = self.output_device.as_mut().unwrap(); let tty_state: &TtyOutputState = output.user_data().get().unwrap(); - let (drm_compositor, dmabuf_feedback) = device.surfaces.get_mut(&tty_state.crtc).unwrap(); + let surface = device.surfaces.get_mut(&tty_state.crtc).unwrap(); + let drm_compositor = &mut surface.compositor; match drm_compositor.render_frame::<_, _, GlesTexture>( &mut device.gles, @@ -587,7 +598,7 @@ impl Tty { .unwrap() .waiting_for_vblank = true; - return Some(dmabuf_feedback); + return Some(&surface.dmabuf_feedback); } Err(err) => { error!("error queueing frame: {err}"); @@ -618,7 +629,8 @@ impl Tty { pub fn toggle_debug_tint(&mut self) { if let Some(device) = self.output_device.as_mut() { - for (_, (compositor, _)) in &mut device.surfaces { + for surface in device.surfaces.values_mut() { + let compositor = &mut surface.compositor; compositor.set_debug_flags(compositor.debug_flags() ^ DebugFlags::TINT); } } |
