Merge branch 'present-v3' into 'master'

presentation-time: implement support for presentation-time v3

See merge request wlroots/wlroots!5207
This commit is contained in:
llyyr 2026-01-16 02:46:05 +05:30
commit a4620dde80
3 changed files with 15 additions and 1 deletions

View file

@ -2037,6 +2037,12 @@ static void handle_page_flip(int fd, unsigned seq,
present_flags |= WLR_OUTPUT_PRESENT_ZERO_COPY;
}
if (conn->output.adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) {
present_flags |= WLR_OUTPUT_PRESENT_VARIABLE_RATE;
} else {
present_flags |= WLR_OUTPUT_PRESENT_FIXED_RATE;
}
struct wlr_output_event_present present_event = {
/* The DRM backend guarantees that the presentation event will be for
* the last submitted frame. */

View file

@ -303,6 +303,10 @@ enum wlr_output_present_flag {
WLR_OUTPUT_PRESENT_HW_COMPLETION = 0x4,
// The presentation of this update was done zero-copy.
WLR_OUTPUT_PRESENT_ZERO_COPY = 0x8,
// The display hardware is operating at a fixed refresh rate.
WLR_OUTPUT_PRESENT_FIXED_RATE = 0x10,
// The display hardware is operating at a variable refresh rate.
WLR_OUTPUT_PRESENT_VARIABLE_RATE = 0x20,
};
struct wlr_output_event_present {

View file

@ -7,7 +7,7 @@
#include <wlr/util/addon.h>
#include "presentation-time-protocol.h"
#define PRESENTATION_VERSION 2
#define PRESENTATION_VERSION 3
struct wlr_presentation_surface_state {
struct wlr_presentation_feedback *feedback;
@ -293,6 +293,10 @@ static void feedback_handle_output_present(struct wl_listener *listener,
event.output->adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) {
event.refresh = 0;
}
if (wl_resource_get_version(resource) < 3) {
event.flags &= ~WLR_OUTPUT_PRESENT_VARIABLE_RATE;
event.flags &= ~WLR_OUTPUT_PRESENT_FIXED_RATE;
}
if (!feedback->zero_copy) {
event.flags &= ~WP_PRESENTATION_FEEDBACK_KIND_ZERO_COPY;
}