From 5079000e49d57ef4087167404fe9091252401b35 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sun, 26 Feb 2023 18:42:31 +0100 Subject: [PATCH] output: allow modeset with buffer while frame is pending Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3600 --- types/output/output.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/types/output/output.c b/types/output/output.c index c6b90a1d7..75defcc22 100644 --- a/types/output/output.c +++ b/types/output/output.c @@ -576,7 +576,10 @@ static uint32_t output_compare_state(struct wlr_output *output, static bool output_basic_test(struct wlr_output *output, const struct wlr_output_state *state) { if (state->committed & WLR_OUTPUT_STATE_BUFFER) { - if (output->frame_pending) { + // Modesets will block for the previous frame to complete. Regular + // page-flips are non-blocking and require the compositor to wait. + if (output->frame_pending && + !(state->committed & (WLR_OUTPUT_STATE_ENABLED | WLR_OUTPUT_STATE_MODE))) { wlr_log(WLR_DEBUG, "Tried to commit a buffer while a frame is pending"); return false; }