kms: Change awkward new trait to InnerDevice

This commit is contained in:
Victoria Brekenfeld 2025-07-23 17:25:16 +02:00 • committed by Victoria Brekenfeld
parent 87742c1e0c
commit 6492629f90
8 changed files with 274 additions and 251 deletions

View file

@ -1,9 +1,6 @@
// SPDX-License-Identifier: GPL-3.0-only
use crate::{
backend::kms::MaybeLockedDevice,
state::{BackendData, State},
};
use crate::state::{BackendData, State};
use smithay::{
reexports::wayland_server::{protocol::wl_buffer::WlBuffer, Resource},
wayland::buffer::BufferHandler,
@ -14,8 +11,11 @@ impl BufferHandler for State {
fn buffer_destroyed(&mut self, buffer: &WlBuffer) {
if let BackendData::Kms(kms_state) = &mut self.backend {
for device in kms_state.drm_devices.values_mut() {
if device.active_buffers.remove(&buffer.downgrade()) {
if !device.in_use(kms_state.primary_node.read().unwrap().as_ref()) {
if device.inner.active_buffers.remove(&buffer.downgrade()) {
if !device
.inner
.in_use(kms_state.primary_node.read().unwrap().as_ref())
{
if let Err(err) = kms_state.refresh_used_devices() {
warn!(?err, "Failed to init devices.");
};

View file

@ -38,9 +38,9 @@ impl DmabufHandler for State {
if let Some(device) = kms_state
.drm_devices
.values_mut()
.find(|dev| dev.render_node == node)
.find(|dev| dev.inner.render_node == node)
{
device.active_buffers.insert(buffer.downgrade());
device.inner.active_buffers.insert(buffer.downgrade());
}
if let Err(err) = kms_state.refresh_used_devices() {
warn!(?err, "Failed to init devices.");

View file

@ -29,9 +29,9 @@ impl DrmHandler<Option<DrmNode>> for State {
if let Some(device) = kms_state
.drm_devices
.values_mut()
.find(|device| device.render_node == node)
.find(|device| device.inner.render_node == node)
{
device.active_buffers.insert(buffer.downgrade());
device.inner.active_buffers.insert(buffer.downgrade());
}
if let Err(err) = kms_state.refresh_used_devices() {

View file

@ -16,6 +16,7 @@ impl DrmLeaseHandler for State {
.drm_devices
.get_mut(&node)
.unwrap()
.inner
.leasing_global
.as_mut()
.unwrap()
@ -32,7 +33,7 @@ impl DrmLeaseHandler for State {
.get_mut(&node)
.ok_or(LeaseRejected::default())?
.lock();
let mut renderer = match kms.api.single_renderer(&backend.render_node) {
let mut renderer = match kms.api.single_renderer(&backend.inner.render_node) {
Ok(renderer) => renderer,
Err(err) => {
tracing::warn!(
@ -55,6 +56,7 @@ impl DrmLeaseHandler for State {
let mut builder = DrmLeaseBuilder::new(backend.drm.device());
for conn in request.connectors {
if let Some((_, crtc)) = backend
.inner
.leased_connectors
.iter()
.find(|(handle, _)| *handle == conn)
@ -101,7 +103,7 @@ impl DrmLeaseHandler for State {
fn new_active_lease(&mut self, node: DrmNode, lease: DrmLease) {
if let Some(backend) = self.backend.kms().drm_devices.get_mut(&node) {
backend.active_leases.push(lease);
backend.inner.active_leases.push(lease);
}
// else the backend is gone, drop the lease
}
@ -110,10 +112,10 @@ impl DrmLeaseHandler for State {
let kms = self.backend.kms();
if let Some(backend) = kms.drm_devices.get_mut(&node) {
let mut backend = backend.lock();
backend.active_leases.retain(|l| l.id() != lease);
backend.inner.active_leases.retain(|l| l.id() != lease);
if backend.active_leases.is_empty() {
let mut renderer = match kms.api.single_renderer(&backend.render_node) {
if backend.inner.active_leases.is_empty() {
let mut renderer = match kms.api.single_renderer(&backend.inner.render_node) {
Ok(renderer) => renderer,
Err(err) => {
tracing::warn!(?err, "Failed to create renderer to enable direct scanout.");

View file

@ -31,7 +31,7 @@ fn kms_surfaces(state: &mut State) -> impl Iterator<Item = &mut Surface> {
kms_state
.drm_devices
.values_mut()
.flat_map(|device| device.surfaces.values_mut()),
.flat_map(|device| device.inner.surfaces.values_mut()),
)
} else {
None