discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=0ada4d3d56e5b5ed447ba7fc89d40cbddfb95ad0
commit 0ada4d3d56e5b5ed447ba7fc89d40cbddfb95ad0 Author: Derek Foreman <der...@osg.samsung.com> Date: Fri Apr 15 10:29:14 2016 -0500 wayland_shm: Pull the damage stuff out of evas_shm This doesn't really care what the buffers were allocated with, so let's make this chunk of code useful to both the shm method and the upcoming dmabuf one --- src/modules/evas/engines/wayland_shm/evas_engine.h | 1 + src/modules/evas/engines/wayland_shm/evas_outbuf.c | 18 ++++++++++++++++++ src/modules/evas/engines/wayland_shm/evas_shm.c | 15 ++------------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/modules/evas/engines/wayland_shm/evas_engine.h b/src/modules/evas/engines/wayland_shm/evas_engine.h index 75342e9..6b3f56e 100644 --- a/src/modules/evas/engines/wayland_shm/evas_engine.h +++ b/src/modules/evas/engines/wayland_shm/evas_engine.h @@ -138,5 +138,6 @@ void _evas_outbuf_reconfigure(Outbuf *ob, int w, int h, int rot, Outbuf_Depth de void *_evas_outbuf_update_region_new(Outbuf *ob, int x, int y, int w, int h, int *cx, int *cy, int *cw, int *ch); void _evas_outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int y, int w, int h); void _evas_outbuf_update_region_free(Outbuf *ob, RGBA_Image *update); +void _evas_surface_damage(struct wl_surface *s, int compositor_version, int w, int h, Eina_Rectangle *rects, unsigned int count); #endif diff --git a/src/modules/evas/engines/wayland_shm/evas_outbuf.c b/src/modules/evas/engines/wayland_shm/evas_outbuf.c index 7473e33..f68901a 100644 --- a/src/modules/evas/engines/wayland_shm/evas_outbuf.c +++ b/src/modules/evas/engines/wayland_shm/evas_outbuf.c @@ -153,6 +153,24 @@ _evas_outbuf_idle_flush(Outbuf *ob) } } +void +_evas_surface_damage(struct wl_surface *s, int compositor_version, int w, int h, Eina_Rectangle *rects, unsigned int count) +{ + void (*damage)(struct wl_surface *, int32_t, int32_t, int32_t, int32_t); + unsigned int k; + + if (compositor_version >= WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION) + damage = wl_surface_damage_buffer; + else + damage = wl_surface_damage; + + if ((rects) && (count > 0)) + for (k = 0; k < count; k++) + damage(s, rects[k].x, rects[k].y, rects[k].w, rects[k].h); + else + damage(s, 0, 0, w, h); +} + void _evas_outbuf_flush(Outbuf *ob, Tilebuf_Rect *rects EINA_UNUSED, Evas_Render_Mode render_mode) { diff --git a/src/modules/evas/engines/wayland_shm/evas_shm.c b/src/modules/evas/engines/wayland_shm/evas_shm.c index 8b5e15f..d2c02f5 100644 --- a/src/modules/evas/engines/wayland_shm/evas_shm.c +++ b/src/modules/evas/engines/wayland_shm/evas_shm.c @@ -541,11 +541,9 @@ _evas_shm_surface_data_get(Surface *s, int *w, int *h) void _evas_shm_surface_post(Surface *s, Eina_Rectangle *rects, unsigned int count) { - void (*damage)(struct wl_surface *, int32_t, int32_t, int32_t, int32_t); /* struct wl_callback *frame_cb; */ Shm_Surface *surf; Shm_Leaf *leaf; - unsigned int k; LOGFN(__FILE__, __LINE__, __FUNCTION__); @@ -557,17 +555,8 @@ _evas_shm_surface_post(Surface *s, Eina_Rectangle *rects, unsigned int count) wl_surface_attach(surf->surface, leaf->data->buffer, 0, 0); - if (surf->compositor_version >= WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION) - damage = wl_surface_damage_buffer; - else - damage = wl_surface_damage; - - if ((rects) && (count > 0)) - for (k = 0; k < count; k++) - damage(surf->surface, rects[k].x, rects[k].y, rects[k].w, rects[k].h); - else - damage(surf->surface, 0, 0, leaf->w, leaf->h); - + _evas_surface_damage(surf->surface, surf->compositor_version, + leaf->w, leaf->h, rects, count); /* frame_cb = wl_surface_frame(surface->surface); */ /* wl_callback_add_listener(frame_cb, &_shm_frame_listener, surface); */ --