smithay/backend/renderer/element/utils/
wayland.rs
1use crate::{
2 backend::renderer::element::{Id, RenderElementPresentationState, RenderElementStates, RenderingReason},
3 wayland::dmabuf::DmabufFeedback,
4};
5
6pub fn select_dmabuf_feedback<'a>(
12 element: impl Into<Id>,
13 render_element_states: &RenderElementStates,
14 default_feedback: &'a DmabufFeedback,
15 scanout_feedback: &'a DmabufFeedback,
16) -> &'a DmabufFeedback {
17 let id = element.into();
18
19 let Some(state) = render_element_states.element_render_state(id) else {
20 return default_feedback;
21 };
22
23 match state.presentation_state {
24 RenderElementPresentationState::Rendering { reason } => match reason {
25 Some(RenderingReason::FormatUnsupported) | Some(RenderingReason::ScanoutFailed) => {
26 scanout_feedback
27 }
28 None => default_feedback,
29 },
30 RenderElementPresentationState::ZeroCopy => scanout_feedback,
31 RenderElementPresentationState::Skipped => default_feedback,
32 }
33}