From eb5886ddbebd5280b36fff7a5f4a356231b3dba1 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 8 Dec 2020 00:12:52 +0100 Subject: [PATCH] backend/headless: add support for direct scan-out I was about to add a check to fail instead of crash when the compositor uses direct scan-out, but with renderer v6 it's so simple to just add support for direct scan-out, why bother? Closes: https://github.com/swaywm/wlroots/issues/2523 --- backend/headless/output.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/backend/headless/output.c b/backend/headless/output.c index 8ce7a32b..bb15c23d 100644 --- a/backend/headless/output.c +++ b/backend/headless/output.c @@ -91,17 +91,27 @@ static bool output_commit(struct wlr_output *wlr_output) { } if (wlr_output->pending.committed & WLR_OUTPUT_STATE_BUFFER) { - assert(output->back_buffer != NULL); + struct wlr_buffer *buffer = NULL; + switch (wlr_output->pending.buffer_type) { + case WLR_OUTPUT_STATE_BUFFER_RENDER: + assert(output->back_buffer != NULL); - wlr_renderer_bind_buffer(output->backend->renderer, NULL); - wlr_egl_unset_current(output->backend->egl); + wlr_renderer_bind_buffer(output->backend->renderer, NULL); + wlr_egl_unset_current(output->backend->egl); + + buffer = output->back_buffer; + output->back_buffer = NULL; + break; + case WLR_OUTPUT_STATE_BUFFER_SCANOUT: + buffer = wlr_buffer_lock(wlr_output->pending.buffer); + break; + } + assert(buffer != NULL); wlr_buffer_unlock(output->front_buffer); - output->front_buffer = output->back_buffer; - output->back_buffer = NULL; + output->front_buffer = buffer; - wlr_swapchain_set_buffer_submitted(output->swapchain, - output->front_buffer); + wlr_swapchain_set_buffer_submitted(output->swapchain, buffer); wlr_output_send_present(wlr_output, NULL); }