diff options
author | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2015-02-19 13:59:55 +0200 |
---|---|---|
committer | Pekka Paalanen <pekka.paalanen@collabora.co.uk> | 2015-02-26 09:06:47 +0200 |
commit | e508ce6a2b4b6c3b4d7b1890afa381856caff600 (patch) | |
tree | c61f2825abd2db60387e8739dc7557f3b7b71176 | |
parent | fbd00f1293ae23652b0910c30814d3cfa25dfe23 (diff) |
compositor: note, weston_surface_damage does it wrong
The fix is not trivial, so I want to document the problem before I
forget about it again.
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
-rw-r--r-- | src/compositor.c | 10 | ||||
-rw-r--r-- | src/compositor.h | 3 |
2 files changed, 13 insertions, 0 deletions
diff --git a/src/compositor.c b/src/compositor.c index b22c5d01..b1970cde 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -1357,6 +1357,16 @@ weston_view_schedule_repaint(struct weston_view *view) weston_output_schedule_repaint(output); } +/** + * XXX: This function does it the wrong way. + * surface->damage is the damage from the client, and causes + * surface_flush_damage() to copy pixels. No window management action can + * cause damage to the client-provided content, warranting re-upload! + * + * Instead of surface->damage, this function should record the damage + * with all the views for this surface to avoid extraneous texture + * uploads. + */ WL_EXPORT void weston_surface_damage(struct weston_surface *surface) { diff --git a/src/compositor.h b/src/compositor.h index c942365d..76af4512 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -871,7 +871,10 @@ struct weston_surface { struct wl_resource *resource; struct wl_signal destroy_signal; struct weston_compositor *compositor; + + /** Damage in local coordinates from the client, for tex upload. */ pixman_region32_t damage; + pixman_region32_t opaque; /* part of geometry, see below */ pixman_region32_t input; int32_t width, height; |