summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Paalanen <pekka.paalanen@collabora.co.uk>2015-02-19 13:59:55 +0200
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>2015-02-26 09:06:47 +0200
commite508ce6a2b4b6c3b4d7b1890afa381856caff600 (patch)
treec61f2825abd2db60387e8739dc7557f3b7b71176
parentfbd00f1293ae23652b0910c30814d3cfa25dfe23 (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.c10
-rw-r--r--src/compositor.h3
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;