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.
This commit is contained in:
Simon Ser 2021-07-07 17:36:36 +02:00 committed by Simon Zeni
parent c2bd63c186
commit a48e569d38

View file

@ -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;
}
}
}