From a48e569d3860e91428c74e876a5d886314767c7b Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 7 Jul 2021 17:36:36 +0200 Subject: [PATCH] output-damage: fix output swapchain handling When wlr_output.swapchain is used instead of the backend's, the buffer_type will be set to SCANOUT even if wlr_output_attach_render has been called. This tricks wlr_output_damage into thinking the whole output needs to be repainted. Workaround this issue by forcing buffer_type to RENDER when the output has a back-buffer set. Will clean all of that up when removing the precommit event handler altogether. This commit fixes damage tracking on the Wayland, X11 and headless backends. --- types/wlr_output_damage.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/types/wlr_output_damage.c b/types/wlr_output_damage.c index b0655a65..e49df016 100644 --- a/types/wlr_output_damage.c +++ b/types/wlr_output_damage.c @@ -52,7 +52,11 @@ static void output_handle_precommit(struct wl_listener *listener, void *data) { if (output->pending.committed & WLR_OUTPUT_STATE_BUFFER) { // TODO: find a better way to access this info without a precommit // handler - output_damage->pending_buffer_type = output->pending.buffer_type; + if (output->back_buffer != NULL) { + output_damage->pending_buffer_type = WLR_OUTPUT_STATE_BUFFER_RENDER; + } else { + output_damage->pending_buffer_type = output->pending.buffer_type; + } } }