drm: Remove unnecessary condition in drm_output_render reuse
authorDaniel Stone <daniels@collabora.com>
Fri, 6 Mar 2020 11:03:14 +0000 (11:03 +0000)
committerPekka Paalanen <pq@iki.fi>
Fri, 20 Mar 2020 15:25:24 +0000 (15:25 +0000)
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>
libweston/backend-drm/drm.c

index d495c24c44443985c175447833c17cfbd7b9a551..94729d896e704ec9185bec9df327adc7b8986ec0 100644 (file)
@@ -364,14 +364,16 @@ drm_output_render(struct drm_output_state *state, pixman_region32_t *damage)
        if (scanout_state->fb)
                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) &&
            scanout_plane->state_cur->fb &&
            (scanout_plane->state_cur->fb->type == BUFFER_GBM_SURFACE ||
-            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) {
+            scanout_plane->state_cur->fb->type == BUFFER_PIXMAN_DUMB)) {
                fb = drm_fb_ref(scanout_plane->state_cur->fb);
        } else if (b->use_pixman) {
                fb = drm_output_render_pixman(state, damage);