feat: upgrade smithay

This commit is contained in:
Nova
2023-11-17 08:59:10 -05:00
parent 2450411e21
commit 5cd92f2c03
5 changed files with 65 additions and 117 deletions

View File

@@ -19,7 +19,6 @@ use self::core::eventloop::EventLoop;
use clap::Parser;
use directories::ProjectDirs;
use once_cell::sync::OnceCell;
use smithay::reexports::nix;
use stardust_xr::server;
use std::os::unix::process::CommandExt;
use std::path::PathBuf;

View File

@@ -24,6 +24,7 @@ use smithay::backend::renderer::ImportDma;
use smithay::reexports::wayland_server::backend::ClientId;
use smithay::reexports::wayland_server::DisplayHandle;
use smithay::reexports::wayland_server::{Display, ListeningSocket};
use smithay::wayland::dmabuf;
use std::ffi::OsStr;
use std::os::fd::OwnedFd;
use std::os::unix::prelude::AsRawFd;
@@ -86,7 +87,7 @@ pub struct Wayland {
pub socket_name: Option<String>,
join_handle: JoinHandle<Result<()>>,
renderer: GlesRenderer,
dmabuf_rx: UnboundedReceiver<Dmabuf>,
dmabuf_rx: UnboundedReceiver<(Dmabuf, dmabuf::ImportNotifier)>,
wayland_state: Arc<Mutex<WaylandState>>,
#[cfg(feature = "xwayland")]
pub xwayland_state: xwayland::XWaylandState,
@@ -180,8 +181,10 @@ impl Wayland {
#[instrument(level = "debug", name = "Wayland frame", skip(self, sk))]
pub fn update(&mut self, sk: &impl StereoKitDraw) {
while let Ok(dmabuf) = self.dmabuf_rx.try_recv() {
let _ = self.renderer.import_dmabuf(&dmabuf, None);
while let Ok((dmabuf, notifier)) = self.dmabuf_rx.try_recv() {
if self.renderer.import_dmabuf(&dmabuf, None).is_err() {
notifier.failed();
}
}
for core_surface in CORE_SURFACES.get_valid_contents() {
core_surface.process(sk, &mut self.renderer);

View File

@@ -23,7 +23,6 @@ use smithay::{
compositor::{CompositorClientState, CompositorState},
dmabuf::{
self, DmabufFeedback, DmabufFeedbackBuilder, DmabufGlobal, DmabufHandler, DmabufState,
ImportError,
},
shell::kde::decoration::KdeDecorationState,
shm::{ShmHandler, ShmState},
@@ -43,7 +42,9 @@ pub struct ClientState {
}
impl ClientState {
pub fn flush(&self) {
let Some(display) = self.display.upgrade() else {return};
let Some(display) = self.display.upgrade() else {
return;
};
let _ = display.flush_clients(self.id.get().cloned());
}
}
@@ -70,7 +71,7 @@ pub struct WaylandState {
pub kde_decoration_state: KdeDecorationState,
pub shm_state: ShmState,
dmabuf_state: (DmabufState, DmabufGlobal, Option<DmabufFeedback>),
dmabuf_tx: UnboundedSender<Dmabuf>,
dmabuf_tx: UnboundedSender<(Dmabuf, dmabuf::ImportNotifier)>,
pub output: Output,
}
@@ -78,7 +79,7 @@ impl WaylandState {
pub fn new(
display_handle: DisplayHandle,
renderer: &GlesRenderer,
dmabuf_tx: UnboundedSender<Dmabuf>,
dmabuf_tx: UnboundedSender<(Dmabuf, dmabuf::ImportNotifier)>,
) -> Arc<Mutex<Self>> {
let compositor_state = CompositorState::new::<Self>(&display_handle);
// let xdg_activation_state = XdgActivationState::new::<Self, _>(&display_handle);
@@ -188,8 +189,9 @@ impl DmabufHandler for WaylandState {
&mut self,
_global: &DmabufGlobal,
dmabuf: Dmabuf,
) -> Result<(), dmabuf::ImportError> {
self.dmabuf_tx.send(dmabuf).map_err(|_| ImportError::Failed)
notifier: dmabuf::ImportNotifier,
) {
self.dmabuf_tx.send((dmabuf, notifier)).unwrap();
}
}
delegate_dmabuf!(WaylandState);