Skip to content
This repository has been archived by the owner on Nov 1, 2021. It is now read-only.

Commit

Permalink
backend/headless: add support for direct scan-out
Browse files Browse the repository at this point in the history
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: #2523
  • Loading branch information
emersion committed Dec 8, 2020
1 parent b790e5e commit eb5886d
Showing 1 changed file with 18 additions and 8 deletions.
26 changes: 18 additions & 8 deletions backend/headless/output.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

wlr_renderer_bind_buffer(output->backend->renderer, NULL);
wlr_egl_unset_current(output->backend->egl);
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);

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);
}
Expand Down

0 comments on commit eb5886d

Please sign in to comment.