Re-enable dmabufs but without overlay planes

This commit is contained in:
Ivan Molodetskikh
2023-09-04 10:24:23 +04:00
parent 8df48c05ca
commit 786e0fa4f0
+19 -18
View File
@@ -12,7 +12,7 @@ use smithay::backend::drm::{DrmDevice, DrmDeviceFd, DrmEvent, DrmEventTime};
use smithay::backend::egl::{EGLContext, EGLDisplay}; use smithay::backend::egl::{EGLContext, EGLDisplay};
use smithay::backend::libinput::{LibinputInputBackend, LibinputSessionInterface}; use smithay::backend::libinput::{LibinputInputBackend, LibinputSessionInterface};
use smithay::backend::renderer::gles::{GlesRenderer, GlesTexture}; use smithay::backend::renderer::gles::{GlesRenderer, GlesTexture};
use smithay::backend::renderer::{Bind, DebugFlags, ImportEgl}; use smithay::backend::renderer::{Bind, DebugFlags, ImportDma, ImportEgl};
use smithay::backend::session::libseat::LibSeatSession; use smithay::backend::session::libseat::LibSeatSession;
use smithay::backend::session::{Event as SessionEvent, Session}; use smithay::backend::session::{Event as SessionEvent, Session};
use smithay::backend::udev::{self, UdevBackend, UdevEvent}; use smithay::backend::udev::{self, UdevBackend, UdevEvent};
@@ -28,11 +28,11 @@ use smithay::reexports::nix::libc::dev_t;
use smithay::reexports::wayland_protocols::wp::linux_dmabuf::zv1::server::zwp_linux_dmabuf_feedback_v1::TrancheFlags; use smithay::reexports::wayland_protocols::wp::linux_dmabuf::zv1::server::zwp_linux_dmabuf_feedback_v1::TrancheFlags;
use smithay::reexports::wayland_protocols::wp::presentation_time::server::wp_presentation_feedback; use smithay::reexports::wayland_protocols::wp::presentation_time::server::wp_presentation_feedback;
use smithay::utils::DeviceFd; use smithay::utils::DeviceFd;
use smithay::wayland::dmabuf::{DmabufFeedbackBuilder, DmabufState, DmabufFeedback}; use smithay::wayland::dmabuf::{DmabufFeedbackBuilder, DmabufGlobal, DmabufState, DmabufFeedback};
use smithay_drm_extras::drm_scanner::{DrmScanEvent, DrmScanner}; use smithay_drm_extras::drm_scanner::{DrmScanEvent, DrmScanner};
use smithay_drm_extras::edid::EdidInfo; use smithay_drm_extras::edid::EdidInfo;
use crate::niri::OutputRenderElements; use crate::niri::{OutputRenderElements, State};
use crate::utils::get_monotonic_time; use crate::utils::get_monotonic_time;
use crate::{LoopData, Niri}; use crate::{LoopData, Niri};
@@ -63,7 +63,7 @@ struct OutputDevice {
drm_scanner: DrmScanner, drm_scanner: DrmScanner,
surfaces: HashMap<crtc::Handle, Surface>, surfaces: HashMap<crtc::Handle, Surface>,
dmabuf_state: DmabufState, dmabuf_state: DmabufState,
// dmabuf_global: DmabufGlobal, dmabuf_global: DmabufGlobal,
} }
#[derive(Debug, Clone, Copy)] #[derive(Debug, Clone, Copy)]
@@ -368,13 +368,12 @@ impl Tty {
let formats = Bind::<Dmabuf>::supported_formats(&gles).unwrap_or_default(); let formats = Bind::<Dmabuf>::supported_formats(&gles).unwrap_or_default();
let dmabuf_state = DmabufState::new(); let mut dmabuf_state = DmabufState::new();
// let default_feedback = DmabufFeedbackBuilder::new(device_id, gles.dmabuf_formats()) let default_feedback = DmabufFeedbackBuilder::new(device_id, gles.dmabuf_formats())
// .build() .build()
// .unwrap(); .unwrap();
// let dmabuf_global = dmabuf_state let dmabuf_global = dmabuf_state
// .create_global_with_default_feedback::<State>(&niri.display_handle, .create_global_with_default_feedback::<State>(&niri.display_handle, &default_feedback);
// &default_feedback);
self.output_device = Some(OutputDevice { self.output_device = Some(OutputDevice {
id: device_id, id: device_id,
@@ -386,7 +385,7 @@ impl Tty {
drm_scanner: DrmScanner::new(), drm_scanner: DrmScanner::new(),
surfaces: HashMap::new(), surfaces: HashMap::new(),
dmabuf_state, dmabuf_state,
// dmabuf_global, dmabuf_global,
}); });
self.device_changed(device_id, niri); self.device_changed(device_id, niri);
@@ -441,9 +440,9 @@ impl Tty {
} }
let mut device = self.output_device.take().unwrap(); let mut device = self.output_device.take().unwrap();
// device device
// .dmabuf_state .dmabuf_state
// .destroy_global::<State>(&niri.display_handle, device.dmabuf_global); .destroy_global::<State>(&niri.display_handle, device.dmabuf_global);
device.gles.unbind_wl_display(); device.gles.unbind_wl_display();
niri.event_loop.remove(device.token); niri.event_loop.remove(device.token);
@@ -514,7 +513,9 @@ impl Tty {
crtc, crtc,
}); });
let planes = surface.planes().unwrap(); let mut planes = surface.planes().unwrap();
// Disable overlay planes as they cause weird performance issues on my system.
planes.overlay.clear();
let scanout_formats = surface let scanout_formats = surface
.supported_formats(planes.primary.handle) .supported_formats(planes.primary.handle)
.unwrap() .unwrap()
@@ -522,7 +523,7 @@ impl Tty {
.chain( .chain(
planes planes
.overlay .overlay
.into_iter() .iter()
.flat_map(|p| surface.supported_formats(p.handle).unwrap()), .flat_map(|p| surface.supported_formats(p.handle).unwrap()),
) )
.collect::<HashSet<_>>(); .collect::<HashSet<_>>();
@@ -532,7 +533,7 @@ impl Tty {
let compositor = DrmCompositor::new( let compositor = DrmCompositor::new(
OutputModeSource::Auto(output.clone()), OutputModeSource::Auto(output.clone()),
surface, surface,
None, Some(planes),
allocator, allocator,
device.gbm.clone(), device.gbm.clone(),
SUPPORTED_COLOR_FORMATS, SUPPORTED_COLOR_FORMATS,