Do not flush damage if swapping buffers failed

This should solve issues with multiple outputs on DRM backend.
This commit is contained in:
emersion 2018-01-28 22:39:24 +01:00
parent 7881d039b6
commit 20e6861021
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
2 changed files with 7 additions and 3 deletions

View file

@ -210,7 +210,7 @@ static bool wlr_drm_connector_swap_buffers(struct wlr_output *output) {
if (conn->pageflip_pending) { if (conn->pageflip_pending) {
wlr_log(L_ERROR, "Skipping pageflip"); wlr_log(L_ERROR, "Skipping pageflip");
return true; return false;
} }
if (drm->iface->crtc_pageflip(drm, conn, crtc, fb_id, NULL)) { if (drm->iface->crtc_pageflip(drm, conn, crtc, fb_id, NULL)) {

View file

@ -387,7 +387,9 @@ static void render_output(struct roots_output *output) {
} }
int buffer_age = -1; int buffer_age = -1;
wlr_output_make_current(wlr_output, &buffer_age); if (!wlr_output_make_current(wlr_output, &buffer_age)) {
return;
}
int width, height; int width, height;
output_get_transformed_size(output->wlr_output, &width, &height); output_get_transformed_size(output->wlr_output, &width, &height);
@ -482,7 +484,9 @@ static void render_output(struct roots_output *output) {
renderer_end: renderer_end:
wlr_renderer_scissor(output->desktop->server->renderer, NULL); wlr_renderer_scissor(output->desktop->server->renderer, NULL);
wlr_renderer_end(server->renderer); wlr_renderer_end(server->renderer);
wlr_output_swap_buffers(wlr_output, &now, &damage); if (!wlr_output_swap_buffers(wlr_output, &now, &damage)) {
goto damage_finish;
}
// same as decrementing, but works on unsigned integers // same as decrementing, but works on unsigned integers
output->previous_damage_idx += ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN - 1; output->previous_damage_idx += ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN - 1;
output->previous_damage_idx %= ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN; output->previous_damage_idx %= ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN;