mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-23 02:05:33 +07:00
Re-enable dmabufs but without overlay planes
This commit is contained in:
+19
-18
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user