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.
master
Simon Ser 3 years ago committed by Simon Zeni
parent c2bd63c186
commit a48e569d38

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

Loading…
Cancel
Save