[Mesa-dev] [PATCH v3 8/8] egl/wayland: Use linux-dmabuf interface for buffers
Mike Lothian
mike at fireburn.co.uk
Tue Jul 18 22:49:38 UTC 2017
Hi
I'm currently getting a build failure with this patch in an out of tree
build
Making all in egl
make[3]: Entering directory
'/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999-abi_x86_32.x86/src/egl'
/usr/bin/wayland-scanner code <
/usr/share/wayland-protocols/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml
> drivers/dri2/linux-dmabuf-unstable-v1-protocol.c
/usr/bin/wayland-scanner client-header <
/usr/share/wayland-protocols/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml
> drivers/dri2/linux-dmabuf-unstable-v1-client-protocol.h
/usr/bin/python2.7
/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/egl/generate/gen_egl_dispatch.py
source \
/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/egl/generate/eglFunctionList.py
\
/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/egl/generate/egl.xml
\
/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/egl/generate/egl_other.xml
> g_egldispatchstubs.c
/usr/bin/python2.7
/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/egl/generate/gen_egl_dispatch.py
header \
/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/egl/generate/eglFunctionList.py
\
/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/egl/generate/egl.xml
\
/var/tmp/portage/media-libs/mesa-9999/work/mesa-9999/src/egl/generate/egl_other.xml
> g_egldispatchstubs.h
/bin/sh: drivers/dri2/linux-dmabuf-unstable-v1-protocol.c: No such file or
directory
make[3]: *** [Makefile:1609:
drivers/dri2/linux-dmabuf-unstable-v1-protocol.c] Error 1
make[3]: *** Waiting for unfinished jobs....
/bin/sh: drivers/dri2/linux-dmabuf-unstable-v1-client-protocol.h: No such
file or directory
make[3]: *** [Makefile:1613:
drivers/dri2/linux-dmabuf-unstable-v1-client-protocol.h] Error 1
I've checked and
/usr/share/wayland-protocols/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml
does exist on my system
Cheers
Mike
On Fri, 14 Jul 2017 at 14:36 Daniel Stone <daniels at collabora.com> wrote:
> When available, use the zwp_linux_dambuf_v1 interface to create buffers,
> which allows multiple planes and buffer modifiers to be used.
>
> Reviewed-by: Emil Velikov <emil.velikov at collabora.com>
> Signed-off-by: Daniel Stone <daniels at collabora.com>
> ---
> configure.ac | 5 +-
> src/egl/Makefile.am | 23 +++-
> src/egl/drivers/dri2/.gitignore | 2 +
> src/egl/drivers/dri2/egl_dri2.c | 7 ++
> src/egl/drivers/dri2/egl_dri2.h | 10 ++
> src/egl/drivers/dri2/platform_wayland.c | 195
> +++++++++++++++++++++++++++++---
> 6 files changed, 221 insertions(+), 21 deletions(-)
> create mode 100644 src/egl/drivers/dri2/.gitignore
>
> diff --git a/configure.ac b/configure.ac
> index 46fcd8f3fe..c5803e0f6e 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -88,6 +88,7 @@ LIBOMXIL_BELLAGIO_REQUIRED=0.0
> LIBVA_REQUIRED=0.38.0
> VDPAU_REQUIRED=1.1
> WAYLAND_REQUIRED=1.11
> +WAYLAND_PROTOCOLS_REQUIRED=1.8
> XCB_REQUIRED=1.9.3
> XCBDRI2_REQUIRED=1.8
> XCBGLX_REQUIRED=1.8.1
> @@ -1686,7 +1687,9 @@ for plat in $platforms; do
> case "$plat" in
> wayland)
>
> - PKG_CHECK_MODULES([WAYLAND], [wayland-client >=
> $WAYLAND_REQUIRED wayland-server >= $WAYLAND_REQUIRED])
> + PKG_CHECK_MODULES([WAYLAND], [wayland-client >=
> $WAYLAND_REQUIRED wayland-server >= $WAYLAND_REQUIRED wayland-protocols >=
> $WAYLAND_PROTOCOLS_REQUIRED])
> + ac_wayland_protocols_pkgdatadir=`$PKG_CONFIG
> --variable=pkgdatadir wayland-protocols`
> + AC_SUBST(WAYLAND_PROTOCOLS_DATADIR,
> $ac_wayland_protocols_pkgdatadir)
>
> if test "x$WAYLAND_SCANNER" = "x:"; then
> AC_MSG_ERROR([wayland-scanner is needed to compile
> the wayland platform])
> diff --git a/src/egl/Makefile.am b/src/egl/Makefile.am
> index 81090387b5..19295de3ed 100644
> --- a/src/egl/Makefile.am
> +++ b/src/egl/Makefile.am
> @@ -21,6 +21,8 @@
>
> include Makefile.sources
>
> +BUILT_SOURCES =
> +
> AM_CFLAGS = \
> -I$(top_srcdir)/include \
> -I$(top_srcdir)/src/egl/main \
> @@ -61,11 +63,27 @@ endif
> endif
>
> if HAVE_PLATFORM_WAYLAND
> +WL_DMABUF_XML =
> $(WAYLAND_PROTOCOLS_DATADIR)/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml
> +
> +drivers/dri2/linux-dmabuf-unstable-v1-protocol.c: $(WL_DMABUF_XML)
> + $(MKDIR_GEN)
> + $(AM_V_GEN)$(WAYLAND_SCANNER) code < $< > $@
> +
> +drivers/dri2/linux-dmabuf-unstable-v1-client-protocol.h: $(WL_DMABUF_XML)
> + $(MKDIR_GEN)
> + $(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@
> +
> +BUILT_SOURCES += \
> + drivers/dri2/linux-dmabuf-unstable-v1-protocol.c \
> + drivers/dri2/linux-dmabuf-unstable-v1-client-protocol.h
> +
> AM_CFLAGS += $(WAYLAND_CFLAGS)
> libEGL_common_la_LIBADD += $(WAYLAND_LIBS)
> libEGL_common_la_LIBADD += $(LIBDRM_LIBS)
> libEGL_common_la_LIBADD += $(top_builddir)/src/egl/wayland/wayland-drm/
> libwayland-drm.la
> -dri2_backend_FILES += drivers/dri2/platform_wayland.c
> +libEGL_common_la_LIBADD += $(top_builddir)/src/util/libmesautil.la
> +dri2_backend_FILES += drivers/dri2/platform_wayland.c \
> + drivers/dri2/linux-dmabuf-unstable-v1-protocol.c
> endif
>
> if HAVE_PLATFORM_DRM
> @@ -85,6 +103,7 @@ endif
>
> AM_CFLAGS += \
> -I$(top_srcdir)/src/loader \
> + -I$(top_builddir)/src/egl/drivers/dri2 \
> -I$(top_srcdir)/src/egl/drivers/dri2 \
> -I$(top_srcdir)/src/gbm/backends/dri \
> -I$(top_srcdir)/src/egl/wayland/wayland-egl \
> @@ -118,7 +137,7 @@ g_egldispatchstubs.h: $(GLVND_GEN_DEPS)
> $(top_srcdir)/src/egl/generate/egl.xml \
> $(top_srcdir)/src/egl/generate/egl_other.xml > $@
>
> -BUILT_SOURCES = g_egldispatchstubs.c g_egldispatchstubs.h
> +BUILT_SOURCES += g_egldispatchstubs.c g_egldispatchstubs.h
> CLEANFILES = $(BUILT_SOURCES)
>
> if USE_LIBGLVND
> diff --git a/src/egl/drivers/dri2/.gitignore
> b/src/egl/drivers/dri2/.gitignore
> new file mode 100644
> index 0000000000..e96becbb54
> --- /dev/null
> +++ b/src/egl/drivers/dri2/.gitignore
> @@ -0,0 +1,2 @@
> +linux-dmabuf-unstable-v1-client-protocol.h
> +linux-dmabuf-unstable-v1-protocol.c
> diff --git a/src/egl/drivers/dri2/egl_dri2.c
> b/src/egl/drivers/dri2/egl_dri2.c
> index 5bf36bf309..e16aefff3c 100644
> --- a/src/egl/drivers/dri2/egl_dri2.c
> +++ b/src/egl/drivers/dri2/egl_dri2.c
> @@ -53,6 +53,7 @@
> #ifdef HAVE_WAYLAND_PLATFORM
> #include "wayland-drm.h"
> #include "wayland-drm-client-protocol.h"
> +#include "linux-dmabuf-unstable-v1-client-protocol.h"
> #endif
>
> #ifdef HAVE_X11_PLATFORM
> @@ -62,6 +63,7 @@
> #include "egl_dri2.h"
> #include "loader/loader.h"
> #include "util/u_atomic.h"
> +#include "util/u_vector.h"
>
> /* The kernel header drm_fourcc.h defines the DRM formats below. We
> duplicate
> * some of the definitions here so that building Mesa won't bleeding-edge
> @@ -934,11 +936,16 @@ dri2_display_destroy(_EGLDisplay *disp)
> case _EGL_PLATFORM_WAYLAND:
> if (dri2_dpy->wl_drm)
> wl_drm_destroy(dri2_dpy->wl_drm);
> + if (dri2_dpy->wl_dmabuf)
> + zwp_linux_dmabuf_v1_destroy(dri2_dpy->wl_dmabuf);
> if (dri2_dpy->wl_shm)
> wl_shm_destroy(dri2_dpy->wl_shm);
> wl_registry_destroy(dri2_dpy->wl_registry);
> wl_event_queue_destroy(dri2_dpy->wl_queue);
> wl_proxy_wrapper_destroy(dri2_dpy->wl_dpy_wrapper);
> + u_vector_finish(&dri2_dpy->wl_modifiers.argb8888);
> + u_vector_finish(&dri2_dpy->wl_modifiers.xrgb8888);
> + u_vector_finish(&dri2_dpy->wl_modifiers.rgb565);
> if (dri2_dpy->own_device) {
> wl_display_disconnect(dri2_dpy->wl_dpy);
> }
> diff --git a/src/egl/drivers/dri2/egl_dri2.h
> b/src/egl/drivers/dri2/egl_dri2.h
> index 4a5cf8e4ef..db19bb7809 100644
> --- a/src/egl/drivers/dri2/egl_dri2.h
> +++ b/src/egl/drivers/dri2/egl_dri2.h
> @@ -45,6 +45,8 @@
> #ifdef HAVE_WAYLAND_PLATFORM
> #include <wayland-client.h>
> #include "wayland-egl-priv.h"
> +/* forward declarations of protocol elements */
> +struct zwp_linux_dmabuf_v1;
> #endif
>
> #include <GL/gl.h>
> @@ -73,6 +75,8 @@
> #include "eglimage.h"
> #include "eglsync.h"
>
> +#include "util/u_vector.h"
> +
> struct wl_buffer;
>
> struct dri2_egl_driver
> @@ -211,6 +215,12 @@ struct dri2_egl_display
> struct wl_drm *wl_drm;
> struct wl_shm *wl_shm;
> struct wl_event_queue *wl_queue;
> + struct zwp_linux_dmabuf_v1 *wl_dmabuf;
> + struct {
> + struct u_vector xrgb8888;
> + struct u_vector argb8888;
> + struct u_vector rgb565;
> + } wl_modifiers;
> bool authenticated;
> int formats;
> uint32_t capabilities;
> diff --git a/src/egl/drivers/dri2/platform_wayland.c
> b/src/egl/drivers/dri2/platform_wayland.c
> index 4f941a16aa..211036f45f 100644
> --- a/src/egl/drivers/dri2/platform_wayland.c
> +++ b/src/egl/drivers/dri2/platform_wayland.c
> @@ -36,14 +36,25 @@
> #include <unistd.h>
> #include <fcntl.h>
> #include <xf86drm.h>
> +#include <drm_fourcc.h>
> #include <sys/mman.h>
>
> #include "egl_dri2.h"
> #include "egl_dri2_fallbacks.h"
> #include "loader.h"
> +#include "util/u_vector.h"
>
> #include <wayland-client.h>
> #include "wayland-drm-client-protocol.h"
> +#include "linux-dmabuf-unstable-v1-client-protocol.h"
> +
> +#ifndef DRM_FORMAT_MOD_INVALID
> +#define DRM_FORMAT_MOD_INVALID ((1ULL << 56) - 1)
> +#endif
> +
> +#ifndef DRM_FORMAT_MOD_LINEAR
> +#define DRM_FORMAT_MOD_LINEAR 0
> +#endif
>
> enum wl_drm_format_flags {
> HAS_ARGB8888 = 1,
> @@ -331,6 +342,8 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
> dri2_egl_display(dri2_surf->base.Resource.Display);
> int use_flags;
> unsigned int dri_image_format;
> + uint64_t *modifiers;
> + int num_modifiers;
>
> /* currently supports three WL DRM formats,
> * WL_DRM_FORMAT_ARGB8888, WL_DRM_FORMAT_XRGB8888,
> @@ -339,12 +352,18 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
> switch (dri2_surf->format) {
> case WL_DRM_FORMAT_ARGB8888:
> dri_image_format = __DRI_IMAGE_FORMAT_ARGB8888;
> + modifiers = u_vector_tail(&dri2_dpy->wl_modifiers.argb8888);
> + num_modifiers = u_vector_length(&dri2_dpy->wl_modifiers.argb8888);
> break;
> case WL_DRM_FORMAT_XRGB8888:
> dri_image_format = __DRI_IMAGE_FORMAT_XRGB8888;
> + modifiers = u_vector_tail(&dri2_dpy->wl_modifiers.xrgb8888);
> + num_modifiers = u_vector_length(&dri2_dpy->wl_modifiers.xrgb8888);
> break;
> case WL_DRM_FORMAT_RGB565:
> dri_image_format = __DRI_IMAGE_FORMAT_RGB565;
> + modifiers = u_vector_tail(&dri2_dpy->wl_modifiers.rgb565);
> + num_modifiers = u_vector_length(&dri2_dpy->wl_modifiers.rgb565);
> break;
> default:
> /* format is not supported */
> @@ -382,27 +401,60 @@ get_back_bo(struct dri2_egl_surface *dri2_surf)
>
> if (dri2_dpy->is_different_gpu &&
> dri2_surf->back->linear_copy == NULL) {
> - dri2_surf->back->linear_copy =
> - dri2_dpy->image->createImage(dri2_dpy->dri_screen,
> - dri2_surf->base.Width,
> - dri2_surf->base.Height,
> - dri_image_format,
> - use_flags |
> - __DRI_IMAGE_USE_LINEAR,
> - NULL);
> + /* The LINEAR modifier should be a perfect alias of the LINEAR use
> + * flag; try the new interface first before the old, then fall
> back. */
> + if (dri2_dpy->image->base.version >= 15 &&
> + dri2_dpy->image->createImageWithModifiers) {
> + uint64_t linear_mod = DRM_FORMAT_MOD_LINEAR;
> +
> + dri2_surf->back->linear_copy =
> +
> dri2_dpy->image->createImageWithModifiers(dri2_dpy->dri_screen,
> +
> dri2_surf->base.Width,
> +
> dri2_surf->base.Height,
> + dri_image_format,
> + &linear_mod,
> + 1,
> + NULL);
> + } else {
> + dri2_surf->back->linear_copy =
> + dri2_dpy->image->createImage(dri2_dpy->dri_screen,
> + dri2_surf->base.Width,
> + dri2_surf->base.Height,
> + dri_image_format,
> + use_flags |
> + __DRI_IMAGE_USE_LINEAR,
> + NULL);
> + }
> if (dri2_surf->back->linear_copy == NULL)
> return -1;
> }
>
> if (dri2_surf->back->dri_image == NULL) {
> - dri2_surf->back->dri_image =
> - dri2_dpy->image->createImage(dri2_dpy->dri_screen,
> - dri2_surf->base.Width,
> - dri2_surf->base.Height,
> - dri_image_format,
> - dri2_dpy->is_different_gpu ?
> - 0 : use_flags,
> - NULL);
> + /* If our DRIImage implementation does not support
> + * createImageWithModifiers, then fall back to the old createImage,
> + * and hope it allocates an image which is acceptable to the winsys.
> + */
> + if (num_modifiers && dri2_dpy->image->base.version >= 15 &&
> + dri2_dpy->image->createImageWithModifiers) {
> + dri2_surf->back->dri_image =
> + dri2_dpy->image->createImageWithModifiers(dri2_dpy->dri_screen,
> +
> dri2_surf->base.Width,
> +
> dri2_surf->base.Height,
> + dri_image_format,
> + modifiers,
> + num_modifiers,
> + NULL);
> + } else {
> + dri2_surf->back->dri_image =
> + dri2_dpy->image->createImage(dri2_dpy->dri_screen,
> + dri2_surf->base.Width,
> + dri2_surf->base.Height,
> + dri_image_format,
> + dri2_dpy->is_different_gpu ?
> + 0 : use_flags,
> + NULL);
> + }
> +
> dri2_surf->back->age = 0;
> }
> if (dri2_surf->back->dri_image == NULL)
> @@ -643,17 +695,68 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
> __DRIimage *image)
> {
> struct wl_buffer *ret;
> - int width, height, fourcc;
> + int width, height, fourcc, num_planes;
>
> dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_WIDTH, &width);
> dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_HEIGHT, &height);
> dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FOURCC, &fourcc);
> + dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_NUM_PLANES,
> + &num_planes);
> +
> + if (dri2_dpy->wl_dmabuf && dri2_dpy->image->base.version >= 15) {
> + struct zwp_linux_buffer_params_v1 *params;
> + int mod_hi, mod_lo;
> + int i;
> +
> + dri2_dpy->image->queryImage(image,
> __DRI_IMAGE_ATTRIB_MODIFIER_UPPER,
> + &mod_hi);
> + dri2_dpy->image->queryImage(image,
> __DRI_IMAGE_ATTRIB_MODIFIER_LOWER,
> + &mod_lo);
> +
> + /* We don't need a wrapper for wl_dmabuf objects, because we have to
> + * create the intermediate params object; we can set the queue on
> this,
> + * and the wl_buffer inherits it race-free. */
> + params = zwp_linux_dmabuf_v1_create_params(dri2_dpy->wl_dmabuf);
> + if (dri2_surf)
> + wl_proxy_set_queue((struct wl_proxy *) params,
> dri2_surf->wl_queue);
> +
> + for (i = 0; i < num_planes; i++) {
> + __DRIimage *p_image;
> + int stride, offset, fd;
> +
> + if (i == 0)
> + p_image = image;
> + else
> + p_image = dri2_dpy->image->fromPlanar(image, i, NULL);
> + if (!p_image) {
> + zwp_linux_buffer_params_v1_destroy(params);
> + return NULL;
> + }
>
> - if (dri2_dpy->capabilities & WL_DRM_CAPABILITY_PRIME) {
> + dri2_dpy->image->queryImage(p_image, __DRI_IMAGE_ATTRIB_FD, &fd);
> + dri2_dpy->image->queryImage(p_image, __DRI_IMAGE_ATTRIB_STRIDE,
> + &stride);
> + dri2_dpy->image->queryImage(p_image, __DRI_IMAGE_ATTRIB_OFFSET,
> + &offset);
> + if (image != p_image)
> + dri2_dpy->image->destroyImage(p_image);
> +
> + zwp_linux_buffer_params_v1_add(params, fd, i, offset, stride,
> + mod_hi, mod_lo);
> + close(fd);
> + }
> +
> + ret = zwp_linux_buffer_params_v1_create_immed(params, width, height,
> + fourcc, 0);
> + zwp_linux_buffer_params_v1_destroy(params);
> + } else if (dri2_dpy->capabilities & WL_DRM_CAPABILITY_PRIME) {
> struct wl_drm *wl_drm =
> dri2_surf ? dri2_surf->wl_drm_wrapper : dri2_dpy->wl_drm;
> int fd, stride;
>
> + if (num_planes > 1)
> + return NULL;
> +
> dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FD, &fd);
> dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE,
> &stride);
> ret = wl_drm_create_prime_buffer(wl_drm, fd, width, height, fourcc,
> 0,
> @@ -664,6 +767,9 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
> dri2_surf ? dri2_surf->wl_drm_wrapper : dri2_dpy->wl_drm;
> int name, stride;
>
> + if (num_planes > 1)
> + return NULL;
> +
> dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_NAME, &name);
> dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE,
> &stride);
> ret = wl_drm_create_buffer(wl_drm, name, width, height, stride,
> fourcc);
> @@ -949,6 +1055,47 @@ static const struct wl_drm_listener drm_listener = {
> };
>
> static void
> +dmabuf_ignore_format(void *data, struct zwp_linux_dmabuf_v1 *dmabuf,
> + uint32_t format)
> +{
> + /* formats are implicitly advertised by the 'modifier' event, so
> ignore */
> +}
> +
> +static void
> +dmabuf_handle_modifier(void *data, struct zwp_linux_dmabuf_v1 *dmabuf,
> + uint32_t format, uint32_t modifier_hi,
> + uint32_t modifier_lo)
> +{
> + struct dri2_egl_display *dri2_dpy = data;
> + uint64_t *mod = NULL;
> +
> + switch (format) {
> + case WL_DRM_FORMAT_ARGB8888:
> + mod = u_vector_add(&dri2_dpy->wl_modifiers.argb8888);
> + break;
> + case WL_DRM_FORMAT_XRGB8888:
> + mod = u_vector_add(&dri2_dpy->wl_modifiers.xrgb8888);
> + break;
> + case WL_DRM_FORMAT_RGB565:
> + mod = u_vector_add(&dri2_dpy->wl_modifiers.rgb565);
> + break;
> + default:
> + break;
> + }
> +
> + if (!mod)
> + return;
> +
> + *mod = (uint64_t) modifier_hi << 32;
> + *mod |= (uint64_t) (modifier_lo & 0xffffffff);
> +}
> +
> +static const struct zwp_linux_dmabuf_v1_listener dmabuf_listener = {
> + .format = dmabuf_ignore_format,
> + .modifier = dmabuf_handle_modifier,
> +};
> +
> +static void
> registry_handle_global_drm(void *data, struct wl_registry *registry,
> uint32_t name, const char *interface,
> uint32_t version)
> @@ -959,6 +1106,12 @@ registry_handle_global_drm(void *data, struct
> wl_registry *registry,
> dri2_dpy->wl_drm =
> wl_registry_bind(registry, name, &wl_drm_interface,
> MIN2(version, 2));
> wl_drm_add_listener(dri2_dpy->wl_drm, &drm_listener, dri2_dpy);
> + } else if (strcmp(interface, "zwp_linux_dmabuf_v1") == 0 && version >=
> 3) {
> + dri2_dpy->wl_dmabuf =
> + wl_registry_bind(registry, name, &zwp_linux_dmabuf_v1_interface,
> + MIN2(version, 3));
> + zwp_linux_dmabuf_v1_add_listener(dri2_dpy->wl_dmabuf,
> &dmabuf_listener,
> + dri2_dpy);
> }
> }
>
> @@ -1127,6 +1280,12 @@ dri2_initialize_wayland_drm(_EGLDriver *drv,
> _EGLDisplay *disp)
> dri2_dpy->wl_dpy = disp->PlatformDisplay;
> }
>
> + if (!u_vector_init(&dri2_dpy->wl_modifiers.xrgb8888, sizeof(uint64_t),
> 32) ||
> + !u_vector_init(&dri2_dpy->wl_modifiers.argb8888, sizeof(uint64_t),
> 32) ||
> + !u_vector_init(&dri2_dpy->wl_modifiers.rgb565, sizeof(uint64_t),
> 32)) {
> + goto cleanup;
> + }
> +
> dri2_dpy->wl_queue = wl_display_create_queue(dri2_dpy->wl_dpy);
>
> dri2_dpy->wl_dpy_wrapper = wl_proxy_create_wrapper(dri2_dpy->wl_dpy);
> --
> 2.13.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170718/6d33bec8/attachment-0001.html>
More information about the mesa-dev
mailing list