summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Stone <[email protected]>2017-06-16 17:29:42 +0100
committerDaniel Stone <[email protected]>2017-07-18 22:16:20 +0100
commitc4a1c7a2eb0c7429ffd10cc4aa2b83fe04e92295 (patch)
treeaedfae3ba221b67898cc86b0f0d6207dbd3baca9
parent7f157a21f16296f72d005d73c301c90a98d1e662 (diff)
egl/wayland: Make create_wl_buffer more generic
Remove surface-specific code from create_wl_buffer, so it's now just a generic translation from DRIimage to wl_buffer. Reviewed-by: Lucas Stach <[email protected]> Reviewed-by: Emil Velikov <[email protected]>
-rw-r--r--src/egl/drivers/dri2/platform_wayland.c66
1 files changed, 34 insertions, 32 deletions
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index ee68284217b..1736c4c9fb1 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -637,51 +637,40 @@ static const struct wl_callback_listener throttle_listener = {
.done = wayland_throttle_callback
};
-static void
-create_wl_buffer(struct dri2_egl_surface *dri2_surf)
+static struct wl_buffer *
+create_wl_buffer(struct dri2_egl_display *dri2_dpy,
+ struct dri2_egl_surface *dri2_surf,
+ __DRIimage *image)
{
- struct dri2_egl_display *dri2_dpy =
- dri2_egl_display(dri2_surf->base.Resource.Display);
- __DRIimage *image;
+ struct wl_buffer *ret;
int fd, stride, name;
- if (dri2_surf->current->wl_buffer != NULL)
- return;
-
- if (dri2_dpy->is_different_gpu) {
- image = dri2_surf->current->linear_copy;
- } else {
- image = dri2_surf->current->dri_image;
- }
if (dri2_dpy->capabilities & WL_DRM_CAPABILITY_PRIME) {
dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FD, &fd);
dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE, &stride);
- dri2_surf->current->wl_buffer =
- wl_drm_create_prime_buffer(dri2_surf->wl_drm_wrapper,
- fd,
- dri2_surf->base.Width,
- dri2_surf->base.Height,
- dri2_surf->format,
- 0, stride,
- 0, 0,
- 0, 0);
+ ret = wl_drm_create_prime_buffer(dri2_surf->wl_drm_wrapper,
+ fd,
+ dri2_surf->base.Width,
+ dri2_surf->base.Height,
+ dri2_surf->format,
+ 0, stride,
+ 0, 0,
+ 0, 0);
close(fd);
} else {
dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_NAME, &name);
dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE, &stride);
- dri2_surf->current->wl_buffer =
- wl_drm_create_buffer(dri2_surf->wl_drm_wrapper,
- name,
- dri2_surf->base.Width,
- dri2_surf->base.Height,
- stride,
- dri2_surf->format);
+ ret = wl_drm_create_buffer(dri2_surf->wl_drm_wrapper,
+ name,
+ dri2_surf->base.Width,
+ dri2_surf->base.Height,
+ stride,
+ dri2_surf->format);
}
- wl_buffer_add_listener(dri2_surf->current->wl_buffer,
- &wl_buffer_listener, dri2_surf);
+ return ret;
}
static EGLBoolean
@@ -741,7 +730,20 @@ dri2_wl_swap_buffers_with_damage(_EGLDriver *drv,
dri2_surf->current = dri2_surf->back;
dri2_surf->back = NULL;
- create_wl_buffer(dri2_surf);
+ if (!dri2_surf->current->wl_buffer) {
+ __DRIimage *image;
+
+ if (dri2_dpy->is_different_gpu)
+ image = dri2_surf->current->linear_copy;
+ else
+ image = dri2_surf->current->dri_image;
+
+ dri2_surf->current->wl_buffer =
+ create_wl_buffer(dri2_dpy, dri2_surf, image);
+
+ wl_buffer_add_listener(dri2_surf->current->wl_buffer,
+ &wl_buffer_listener, dri2_surf);
+ }
wl_surface_attach(dri2_surf->wl_surface_wrapper,
dri2_surf->current->wl_buffer,