drm-backend: do not skip renderer if capturing screen

The renderer must be called for any pending screen capture to complete.
Previously this was guaranteed by weston_screenshooter_shoot() forcing
full output damage, so damage was never empty. If the future,
screenshooting stops inflicting damage, and the damage on the primary
plane even after disabling hardware planes may be empty.

This patch ensures that screenshots do not get stuck until damage
occurs.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
dev
Pekka Paalanen 4 years ago
parent 0f7da612eb
commit 7f1a113c89
  1. 4
      libweston/backend-drm/drm.c

@ -366,9 +366,11 @@ drm_output_render(struct drm_output_state *state, pixman_region32_t *damage)
* If we don't have any damage on the primary plane, and we already * If we don't have any damage on the primary plane, and we already
* have a renderer buffer active, we can reuse it; else we pass * have a renderer buffer active, we can reuse it; else we pass
* the damaged region into the renderer to re-render the affected * the damaged region into the renderer to re-render the affected
* area. * area. But, we still have to call the renderer anyway if any screen
* capture is pending, otherwise the capture will not complete.
*/ */
if (!pixman_region32_not_empty(damage) && if (!pixman_region32_not_empty(damage) &&
wl_list_empty(&output->base.frame_signal.listener_list) &&
scanout_plane->state_cur->fb && scanout_plane->state_cur->fb &&
(scanout_plane->state_cur->fb->type == BUFFER_GBM_SURFACE || (scanout_plane->state_cur->fb->type == BUFFER_GBM_SURFACE ||
scanout_plane->state_cur->fb->type == BUFFER_PIXMAN_DUMB)) { scanout_plane->state_cur->fb->type == BUFFER_PIXMAN_DUMB)) {

Loading…
Cancel
Save