From 70f96cca0a2b985dcc7298b4a87a2f0819991878 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Fri, 13 Dec 2024 10:28:25 +0300 Subject: Update Smithay (presentation-time v2) --- src/backend/headless.rs | 3 ++- src/backend/tty.rs | 16 ++++++++++++---- src/backend/winit.rs | 6 ++---- src/pw_utils.rs | 2 +- 4 files changed, 17 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/backend/headless.rs b/src/backend/headless.rs index 5b8c7428..3c96f731 100644 --- a/src/backend/headless.rs +++ b/src/backend/headless.rs @@ -13,6 +13,7 @@ use smithay::backend::renderer::gles::GlesRenderer; use smithay::output::{Mode, Output, PhysicalProperties, Subpixel}; use smithay::reexports::wayland_protocols::wp::presentation_time::server::wp_presentation_feedback; use smithay::utils::Size; +use smithay::wayland::presentation::Refresh; use super::{IpcOutputMap, OutputId, RenderResult}; use crate::niri::{Niri, RedrawState}; @@ -102,7 +103,7 @@ impl Headless { let mut presentation_feedbacks = niri.take_presentation_feedbacks(output, &states); presentation_feedbacks.presented::<_, smithay::utils::Monotonic>( get_monotonic_time(), - std::time::Duration::ZERO, + Refresh::Unknown, 0, wp_presentation_feedback::Kind::empty(), ); diff --git a/src/backend/tty.rs b/src/backend/tty.rs index b5991d3f..f9b9d33c 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -50,6 +50,7 @@ use smithay::wayland::dmabuf::{DmabufFeedback, DmabufFeedbackBuilder, DmabufGlob use smithay::wayland::drm_lease::{ DrmLease, DrmLeaseBuilder, DrmLeaseRequest, DrmLeaseState, LeaseRejected, }; +use smithay::wayland::presentation::Refresh; use smithay_drm_extras::drm_scanner::{DrmScanEvent, DrmScanner}; use wayland_protocols::wp::linux_dmabuf::zv1::server::zwp_linux_dmabuf_feedback_v1::TrancheFlags; use wayland_protocols::wp::presentation_time::server::wp_presentation_feedback; @@ -1233,10 +1234,17 @@ impl Tty { // Mark the last frame as submitted. match surface.compositor.frame_submitted() { Ok(Some((mut feedback, target_presentation_time))) => { - let refresh = output_state - .frame_clock - .refresh_interval() - .unwrap_or(Duration::ZERO); + let refresh = match output_state.frame_clock.refresh_interval() { + Some(refresh) => { + if output_state.frame_clock.vrr() { + Refresh::Variable(refresh) + } else { + Refresh::Fixed(refresh) + } + } + None => Refresh::Unknown, + }; + // FIXME: ideally should be monotonically increasing for a surface. let seq = meta.sequence as u64; let mut flags = wp_presentation_feedback::Kind::Vsync diff --git a/src/backend/winit.rs b/src/backend/winit.rs index 500215f7..3472ff3e 100644 --- a/src/backend/winit.rs +++ b/src/backend/winit.rs @@ -3,7 +3,6 @@ use std::collections::HashMap; use std::mem; use std::rc::Rc; use std::sync::{Arc, Mutex}; -use std::time::Duration; use niri_config::{Config, OutputName}; use smithay::backend::allocator::dmabuf::Dmabuf; @@ -16,6 +15,7 @@ use smithay::reexports::calloop::LoopHandle; use smithay::reexports::wayland_protocols::wp::presentation_time::server::wp_presentation_feedback; use smithay::reexports::winit::dpi::LogicalSize; use smithay::reexports::winit::window::Window; +use smithay::wayland::presentation::Refresh; use super::{IpcOutputMap, OutputId, RenderResult}; use crate::niri::{Niri, RedrawState, State}; @@ -216,11 +216,9 @@ impl Winit { self.backend.submit(Some(damage)).unwrap(); let mut presentation_feedbacks = niri.take_presentation_feedbacks(output, &res.states); - let mode = output.current_mode().unwrap(); - let refresh = Duration::from_secs_f64(1_000f64 / mode.refresh as f64); presentation_feedbacks.presented::<_, smithay::utils::Monotonic>( get_monotonic_time(), - refresh, + Refresh::Unknown, 0, wp_presentation_feedback::Kind::empty(), ); diff --git a/src/pw_utils.rs b/src/pw_utils.rs index a68ba9fe..95b7e9c0 100644 --- a/src/pw_utils.rs +++ b/src/pw_utils.rs @@ -1027,7 +1027,7 @@ fn allocate_buffer( .create_buffer_object_with_modifiers2::<()>(w, h, fourcc, modifiers, flags) .context("error creating GBM buffer object")?; - let modifier = bo.modifier().unwrap(); + let modifier = bo.modifier(); let buffer = GbmBuffer::from_bo(bo, false); Ok((buffer, modifier)) } -- cgit