drm: Remove unnecessary condition in drm_output_render reuse

This condition inside drm_output_render() checks if we can reuse the
existing renderer buffer for the primary plane; this occurs in
mixed-mode composition where a client buffer promoted to a plane has
changed, but the primary plane is unchanged.

We accomplish this by checking if there is no damage on the
primary/renderer plane, and then if there is already a renderer buffer
active on the primary plane: in that case, we can reuse the buffer we
already have.

There was a further condition checking if the width and height were
identical. This was designed to prevent against issues on mode changes.
However, runtime mode changes are already quite broken, and a mode
change will also cause damage on the full plane. We can simply remove
this condition.

Signed-off-by: Daniel Stone <daniels@collabora.com>
dev
Daniel Stone 5 years ago committed by Pekka Paalanen
parent 7fa97e66eb
commit 98d75e1b23
  1. 12
      libweston/backend-drm/drm.c

@ -364,14 +364,16 @@ drm_output_render(struct drm_output_state *state, pixman_region32_t *damage)
if (scanout_state->fb) if (scanout_state->fb)
return; return;
/*
* 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
* the damaged region into the renderer to re-render the affected
* area.
*/
if (!pixman_region32_not_empty(damage) && if (!pixman_region32_not_empty(damage) &&
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)) {
scanout_plane->state_cur->fb->width ==
output->base.current_mode->width &&
scanout_plane->state_cur->fb->height ==
output->base.current_mode->height) {
fb = drm_fb_ref(scanout_plane->state_cur->fb); fb = drm_fb_ref(scanout_plane->state_cur->fb);
} else if (b->use_pixman) { } else if (b->use_pixman) {
fb = drm_output_render_pixman(state, damage); fb = drm_output_render_pixman(state, damage);

Loading…
Cancel
Save