wayland-backend: Fully damage initial SHM buffer
authorDaniel Stone <daniels@collabora.com>
Tue, 17 Mar 2020 21:52:28 +0000 (21:52 +0000)
committerDaniel Stone <daniels@collabora.com>
Wed, 18 Mar 2020 11:33:52 +0000 (11:33 +0000)
In order to start the repaint loop, the Wayland backend tries to damage
the full SHM buffer, but doesn't actually damage the full area if we
have a frame.

Store the buffer's width and height alongside the buffer itself, so we
can damage the full area when required.

Signed-off-by: Daniel Stone <daniels@collabora.com>
libweston/backend-wayland/wayland.c

index 42af0c801a3eede9e5b2de54cb9df34a1eeb9048..83145c936ee366ab87caf7ae18d6f2d3714e24e1 100644 (file)
@@ -180,6 +180,8 @@ struct wayland_shm_buffer {
        struct wl_buffer *buffer;
        void *data;
        size_t size;
+       int width;
+       int height;
        pixman_region32_t damage;               /**< in global coords */
        int frame_damaged;
 
@@ -339,6 +341,8 @@ wayland_output_get_shm_buffer(struct wayland_output *output)
        sb->frame_damaged = 1;
 
        sb->data = data;
+       sb->width = width;
+       sb->height = height;
        sb->size = height * stride;
 
        pool = wl_shm_create_pool(shm, fd, sb->size);
@@ -410,8 +414,7 @@ draw_initial_frame(struct wayland_output *output)
 
        wl_surface_attach(output->parent.surface, sb->buffer, 0, 0);
        wl_surface_damage(output->parent.surface, 0, 0,
-                         output->base.current_mode->width,
-                         output->base.current_mode->height);
+                         sb->width, sb->height);
 }
 
 #ifdef ENABLE_EGL