summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Foreman <derekf@osg.samsung.com>2017-11-06 13:31:25 -0600
committerDerek Foreman <derekf@osg.samsung.com>2017-11-08 15:12:37 -0600
commitef1279465fb61a01ff39a474c5d0cb47ba9475a3 (patch)
treecbcd1b99dc857d20f79a6414dcaf27811a158042
parent7e1805ada13cf9e851e02ab1cf34b24886db7e4a (diff)
downloadefl-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.
-rw-r--r--src/modules/evas/engines/wayland_shm/evas_dmabuf.c12
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;