diff options
author | Derek Foreman <derekf@osg.samsung.com> | 2017-11-06 13:31:25 -0600 |
---|---|---|
committer | Derek Foreman <derekf@osg.samsung.com> | 2017-11-08 15:12:37 -0600 |
commit | ef1279465fb61a01ff39a474c5d0cb47ba9475a3 (patch) | |
tree | cbcd1b99dc857d20f79a6414dcaf27811a158042 /src | |
parent | 7e1805ada13cf9e851e02ab1cf34b24886db7e4a (diff) | |
download | efl-ef1279465fb61a01ff39a474c5d0cb47ba9475a3.tar.gz |
wayland_shm: make creating a wayland buffer back end specific
This way we can have shm and dmabuf share the same framework.
Diffstat (limited to 'src')
-rw-r--r-- | src/modules/evas/engines/wayland_shm/evas_dmabuf.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/modules/evas/engines/wayland_shm/evas_dmabuf.c b/src/modules/evas/engines/wayland_shm/evas_dmabuf.c index 0194b62133..5f9de0e7e4 100644 --- a/src/modules/evas/engines/wayland_shm/evas_dmabuf.c +++ b/src/modules/evas/engines/wayland_shm/evas_dmabuf.c @@ -36,6 +36,7 @@ typedef struct _Buffer_Manager Buffer_Manager; struct _Buffer_Manager { Buffer_Handle *(*alloc)(Buffer_Manager *self, const char *name, int w, int h, unsigned long *stride, int32_t *fd); + struct wl_buffer *(*to_buffer)(Ecore_Wl2_Display *ewd, Dmabuf_Buffer *db); void *(*map)(Dmabuf_Buffer *buf); void (*unmap)(Dmabuf_Buffer *buf); void (*discard)(Dmabuf_Buffer *buf); @@ -187,6 +188,7 @@ _intel_buffer_manager_setup(int fd) if (!buffer_manager->priv) goto err; buffer_manager->alloc = _intel_alloc; + buffer_manager->to_buffer = _evas_dmabuf_wl_buffer_from_dmabuf; buffer_manager->map = _intel_map; buffer_manager->unmap = _intel_unmap; buffer_manager->discard = _intel_discard; @@ -292,6 +294,7 @@ _exynos_buffer_manager_setup(int fd) sym_exynos_bo_destroy(bo); buffer_manager->alloc = _exynos_alloc; + buffer_manager->to_buffer = _evas_dmabuf_wl_buffer_from_dmabuf; buffer_manager->map = _exynos_map; buffer_manager->unmap = _exynos_unmap; buffer_manager->discard = _exynos_discard; @@ -377,6 +380,12 @@ _buffer_manager_alloc(const char *name, int w, int h, unsigned long *stride, int return out; } +static struct wl_buffer * +_buffer_manager_buf_to_wl_buffer(Ecore_Wl2_Display *ewd, Dmabuf_Buffer *buf) +{ + return buffer_manager->to_buffer(ewd, buf); +} + static void * _buffer_manager_map(Dmabuf_Buffer *buf) { @@ -686,8 +695,7 @@ _evas_dmabuf_buffer_init(Dmabuf_Surface *s, int w, int h) out->w = w; out->h = h; - out->wl_buffer = _evas_dmabuf_wl_buffer_from_dmabuf(s->surface->ob->ewd, - out); + out->wl_buffer = _buffer_manager_buf_to_wl_buffer(s->surface->ob->ewd, out); ecore_wl2_display_flush(s->surface->info->info.wl2_display); return out; |