cosmic-comp/src/wayland/handlers/dmabuf.rs
Victoria Brekenfeld 469a366207 kms: New backend
New backend utilizing a thread per surface for precise frame
scheduling.
2024-06-26 12:59:33 +02:00

54 lines
1.6 KiB
Rust

// SPDX-License-Identifier: GPL-3.0-only
use crate::state::{BackendData, State};
use smithay::{
backend::allocator::dmabuf::Dmabuf,
delegate_dmabuf,
reexports::wayland_server::Resource,
wayland::dmabuf::{DmabufGlobal, DmabufHandler, DmabufState, ImportNotifier},
};
impl DmabufHandler for State {
fn dmabuf_state(&mut self) -> &mut DmabufState {
&mut self.common.dmabuf_state
}
fn dmabuf_imported(
&mut self,
global: &DmabufGlobal,
dmabuf: Dmabuf,
import_notifier: ImportNotifier,
) {
match self
.backend
.dmabuf_imported(import_notifier.client(), global, dmabuf)
{
Err(err) => {
tracing::debug!(?err, "dmabuf import failed");
import_notifier.failed()
}
Ok(Some(node)) => {
// kms backend
let Ok(buffer) = import_notifier.successful::<State>() else {
return;
};
if let BackendData::Kms(kms_state) = &mut self.backend {
if let Some(device) = kms_state
.drm_devices
.values_mut()
.find(|dev| dev.render_node == node)
{
device.active_buffers.insert(buffer.downgrade());
}
kms_state.refresh_used_devices();
}
}
Ok(None) => {
let _ = import_notifier.successful::<State>();
}
}
}
}
delegate_dmabuf!(State);