forked from enlightenment/efl
wayland_shm: Remove direct access to wl_surface
Querying it through Ecore_Wl2_Window now
This commit is contained in:
parent
8f038b2591
commit
972633e7e8
|
@ -72,7 +72,6 @@ struct _Dmabuf_Surface
|
|||
Surface *surface;
|
||||
struct wl_display *wl_display;
|
||||
struct zwp_linux_dmabuf_v1 *dmabuf;
|
||||
struct wl_surface *wl_surface;
|
||||
int compositor_version;
|
||||
|
||||
Dmabuf_Buffer *current;
|
||||
|
@ -480,6 +479,7 @@ _create_succeeded(void *data,
|
|||
struct zwp_linux_buffer_params_v1 *params,
|
||||
struct wl_buffer *new_buffer)
|
||||
{
|
||||
struct wl_surface *wls;
|
||||
Dmabuf_Buffer *b = data;
|
||||
|
||||
b->wl_buffer = new_buffer;
|
||||
|
@ -500,10 +500,11 @@ _create_succeeded(void *data,
|
|||
if (b != b->surface->pre) return;
|
||||
|
||||
/* This buffer was drawn into before it had a handle */
|
||||
wl_surface_attach(b->surface->wl_surface, b->wl_buffer, 0, 0);
|
||||
_evas_surface_damage(b->surface->wl_surface, b->surface->compositor_version,
|
||||
wls = ecore_wl2_window_surface_get(b->surface->surface->info->info.wl2_win);
|
||||
wl_surface_attach(wls, b->wl_buffer, 0, 0);
|
||||
_evas_surface_damage(wls, b->surface->compositor_version,
|
||||
b->w, b->h, NULL, 0);
|
||||
wl_surface_commit(b->surface->wl_surface);
|
||||
wl_surface_commit(wls);
|
||||
b->surface->pre = NULL;
|
||||
b->busy = EINA_FALSE;
|
||||
}
|
||||
|
@ -668,6 +669,7 @@ _evas_dmabuf_surface_assign(Surface *s)
|
|||
static void
|
||||
_evas_dmabuf_surface_post(Surface *s, Eina_Rectangle *rects, unsigned int count, Eina_Bool hidden)
|
||||
{
|
||||
struct wl_surface *wls;
|
||||
Dmabuf_Surface *surface;
|
||||
Dmabuf_Buffer *b;
|
||||
|
||||
|
@ -694,16 +696,17 @@ _evas_dmabuf_surface_post(Surface *s, Eina_Rectangle *rects, unsigned int count,
|
|||
}
|
||||
surface->pre = NULL;
|
||||
|
||||
wls = ecore_wl2_window_surface_get(s->info->info.wl2_win);
|
||||
if (!hidden)
|
||||
{
|
||||
wl_surface_attach(surface->wl_surface, b->wl_buffer, 0, 0);
|
||||
_evas_surface_damage(surface->wl_surface, surface->compositor_version,
|
||||
wl_surface_attach(wls, b->wl_buffer, 0, 0);
|
||||
_evas_surface_damage(wls, surface->compositor_version,
|
||||
b->w, b->h, rects, count);
|
||||
}
|
||||
else
|
||||
wl_surface_attach(surface->wl_surface, NULL, 0, 0);
|
||||
wl_surface_attach(wls, NULL, 0, 0);
|
||||
|
||||
wl_surface_commit(surface->wl_surface);
|
||||
wl_surface_commit(wls);
|
||||
}
|
||||
|
||||
static Dmabuf_Buffer *
|
||||
|
@ -758,17 +761,16 @@ _evas_dmabuf_surface_destroy(Surface *s)
|
|||
}
|
||||
|
||||
Eina_Bool
|
||||
_evas_dmabuf_surface_surface_set(Surface *s, struct wl_shm *wl_shm EINA_UNUSED, struct zwp_linux_dmabuf_v1 *wl_dmabuf, struct wl_surface *wl_surface)
|
||||
_evas_dmabuf_surface_surface_set(Surface *s, struct wl_shm *wl_shm EINA_UNUSED, struct zwp_linux_dmabuf_v1 *wl_dmabuf)
|
||||
{
|
||||
Dmabuf_Surface *surf;
|
||||
|
||||
surf = s->surf.dmabuf;
|
||||
|
||||
if ((surf->dmabuf == wl_dmabuf) && (surf->wl_surface == wl_surface))
|
||||
if ((surf->dmabuf == wl_dmabuf))
|
||||
return EINA_FALSE;
|
||||
|
||||
surf->dmabuf = wl_dmabuf;
|
||||
surf->wl_surface = wl_surface;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
|
@ -788,7 +790,6 @@ _evas_dmabuf_surface_create(Surface *s, int w, int h, int num_buff)
|
|||
surf->surface = s;
|
||||
surf->wl_display = s->info->info.wl_display;
|
||||
surf->dmabuf = s->info->info.wl_dmabuf;
|
||||
surf->wl_surface = ecore_wl2_window_surface_get(s->info->info.wl2_win);
|
||||
surf->alpha = s->info->info.destination_alpha;
|
||||
surf->compositor_version = s->info->info.compositor_version;
|
||||
|
||||
|
|
|
@ -175,12 +175,10 @@ eng_update(void *engine, void *data, void *info, unsigned int w, unsigned int h)
|
|||
{
|
||||
Evas_Engine_Info_Wayland *einfo = info;
|
||||
Render_Engine *re = data;
|
||||
struct wl_surface *surf;
|
||||
|
||||
surf = ecore_wl2_window_surface_get(einfo->info.wl2_win);
|
||||
if (!surf) return 0;
|
||||
|
||||
_evas_outbuf_surface_set(re->generic.ob, einfo->info.wl_shm, einfo->info.wl_dmabuf, surf);
|
||||
_evas_outbuf_surface_set(re->generic.ob,
|
||||
einfo->info.wl_shm,
|
||||
einfo->info.wl_dmabuf);
|
||||
|
||||
eng_output_resize(engine, data, w, h);
|
||||
|
||||
|
|
|
@ -100,7 +100,7 @@ struct _Surface
|
|||
void *(*data_get)(Surface *surface, int *w, int *h);
|
||||
int (*assign)(Surface *surface);
|
||||
void (*post)(Surface *surface, Eina_Rectangle *rects, unsigned int count, Eina_Bool hidden);
|
||||
Eina_Bool (*surface_set)(Surface *surface, struct wl_shm *wl_shm, struct zwp_linux_dmabuf_v1 *wl_dmabuf, struct wl_surface *wl_surface);
|
||||
Eina_Bool (*surface_set)(Surface *surface, struct wl_shm *wl_shm, struct zwp_linux_dmabuf_v1 *wl_dmabuf);
|
||||
} funcs;
|
||||
};
|
||||
|
||||
|
@ -155,7 +155,7 @@ void _evas_outbuf_update_region_push(Outbuf *ob, RGBA_Image *update, int x, int
|
|||
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);
|
||||
void _evas_outbuf_redraws_clear(Outbuf *ob);
|
||||
void _evas_outbuf_surface_set(Outbuf *ob, struct wl_shm *shm, struct zwp_linux_dmabuf_v1 *dmabuf, struct wl_surface *surface);
|
||||
void _evas_outbuf_surface_set(Outbuf *ob, struct wl_shm *shm, struct zwp_linux_dmabuf_v1 *dmabuf);
|
||||
|
||||
Eina_Bool _evas_surface_init(Surface *s, int w, int h, int num_buf);
|
||||
|
||||
|
|
|
@ -650,8 +650,8 @@ _evas_outbuf_redraws_clear(Outbuf *ob)
|
|||
}
|
||||
|
||||
void
|
||||
_evas_outbuf_surface_set(Outbuf *ob, struct wl_shm *wl_shm, struct zwp_linux_dmabuf_v1 *wl_dmabuf, struct wl_surface *wl_surface)
|
||||
_evas_outbuf_surface_set(Outbuf *ob, struct wl_shm *wl_shm, struct zwp_linux_dmabuf_v1 *wl_dmabuf)
|
||||
{
|
||||
if (ob->surface->funcs.surface_set(ob->surface, wl_shm, wl_dmabuf, wl_surface))
|
||||
if (ob->surface->funcs.surface_set(ob->surface, wl_shm, wl_dmabuf))
|
||||
ob->dirty = EINA_TRUE;
|
||||
}
|
||||
|
|
|
@ -63,7 +63,6 @@ struct _Shm_Surface
|
|||
{
|
||||
struct wl_display *disp;
|
||||
struct wl_shm *shm;
|
||||
struct wl_surface *surface;
|
||||
int w, h;
|
||||
int num_buff;
|
||||
int compositor_version;
|
||||
|
@ -537,6 +536,7 @@ _evas_shm_surface_data_get(Surface *s, int *w, int *h)
|
|||
void
|
||||
_evas_shm_surface_post(Surface *s, Eina_Rectangle *rects, unsigned int count, Eina_Bool hidden)
|
||||
{
|
||||
struct wl_surface *wls;
|
||||
Shm_Surface *surf;
|
||||
Shm_Leaf *leaf;
|
||||
|
||||
|
@ -546,19 +546,19 @@ _evas_shm_surface_post(Surface *s, Eina_Rectangle *rects, unsigned int count, Ei
|
|||
leaf = surf->current;
|
||||
if (!leaf) return;
|
||||
|
||||
if (!surf->surface) return;
|
||||
wls = ecore_wl2_window_surface_get(s->info->info.wl2_win);
|
||||
|
||||
if (!hidden)
|
||||
{
|
||||
wl_surface_attach(surf->surface, leaf->data->buffer, 0, 0);
|
||||
wl_surface_attach(wls, leaf->data->buffer, 0, 0);
|
||||
|
||||
_evas_surface_damage(surf->surface, surf->compositor_version,
|
||||
_evas_surface_damage(wls, surf->compositor_version,
|
||||
leaf->w, leaf->h, rects, count);
|
||||
}
|
||||
else
|
||||
wl_surface_attach(surf->surface, NULL, 0, 0);
|
||||
wl_surface_attach(wls, NULL, 0, 0);
|
||||
|
||||
wl_surface_commit(surf->surface);
|
||||
wl_surface_commit(wls);
|
||||
|
||||
leaf->busy = EINA_TRUE;
|
||||
leaf->drawn = EINA_TRUE;
|
||||
|
@ -567,17 +567,16 @@ _evas_shm_surface_post(Surface *s, Eina_Rectangle *rects, unsigned int count, Ei
|
|||
}
|
||||
|
||||
Eina_Bool
|
||||
_evas_shm_surface_surface_set(Surface *s, struct wl_shm *wl_shm, struct zwp_linux_dmabuf_v1 *wl_dmabuf EINA_UNUSED, struct wl_surface *wl_surface)
|
||||
_evas_shm_surface_surface_set(Surface *s, struct wl_shm *wl_shm, struct zwp_linux_dmabuf_v1 *wl_dmabuf EINA_UNUSED)
|
||||
{
|
||||
Shm_Surface *surf;
|
||||
|
||||
surf = s->surf.shm;
|
||||
|
||||
if ((surf->shm == wl_shm) && (surf->surface == wl_surface))
|
||||
if ((surf->shm == wl_shm))
|
||||
return EINA_FALSE;
|
||||
|
||||
surf->shm = wl_shm;
|
||||
surf->surface = wl_surface;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
|
@ -596,7 +595,6 @@ _evas_shm_surface_create(Surface *s, int w, int h, int num_buff)
|
|||
surf->h = h;
|
||||
surf->disp = s->info->info.wl_display;
|
||||
surf->shm = s->info->info.wl_shm;
|
||||
surf->surface = ecore_wl2_window_surface_get(s->info->info.wl2_win);
|
||||
surf->num_buff = num_buff;
|
||||
surf->alpha = s->info->info.destination_alpha;
|
||||
surf->compositor_version = s->info->info.compositor_version;
|
||||
|
|
Loading…
Reference in New Issue