[Mesa-dev] [PATCH mesa 3/3] egl: Update to Wayland 1.2 server API

Mike Lothian mike at fireburn.co.uk
Fri Aug 9 10:44:00 PDT 2013


Hi

I seem to have a missing symbol wayland_drm_buffer_get in libgbm.so.1

I'm pretty sure its related

Regards

Mike
On 18 Jul 2013 13:15, "Ander Conselvan de Oliveira" <
ander.conselvan.de.oliveira at intel.com> wrote:

> Since Wayland 1.2, struct wl_buffer and a few functions are deprecated.
>
> References to wl_buffer are replaced with wl_resource and some getter
> functions and calls to deprecated functions are replaced with the proper
> new API. The latter changes are related to resource versioning.
>
> Signed-off-by: Ander Conselvan de Oliveira <
> ander.conselvan.de.oliveira at intel.com>
> ---
>  docs/specs/WL_bind_wayland_display.spec            |  8 ++-
>  include/EGL/eglmesaext.h                           |  6 +-
>  src/egl/drivers/dri2/egl_dri2.c                    | 28 +++++----
>  src/egl/drivers/dri2/egl_dri2.h                    |  1 -
>  src/egl/main/eglapi.c                              |  2 +-
>  src/egl/main/eglapi.h                              |  2 +-
>  src/egl/wayland/wayland-drm/wayland-drm.c          | 66
> +++++++++++++---------
>  src/egl/wayland/wayland-drm/wayland-drm.h          | 13 +++--
>  .../state_trackers/egl/common/egl_g3d_api.c        |  2 +-
>  .../state_trackers/egl/common/egl_g3d_image.c      |  4 +-
>  .../egl/common/native_wayland_bufmgr.h             |  6 +-
>  .../egl/common/native_wayland_drm_bufmgr.c         | 25 +++++---
>  src/gbm/backends/dri/gbm_dri.c                     |  5 +-
>  13 files changed, 99 insertions(+), 69 deletions(-)
>
> diff --git a/docs/specs/WL_bind_wayland_display.spec
> b/docs/specs/WL_bind_wayland_display.spec
> index 02bd6ea..8f0083c 100644
> --- a/docs/specs/WL_bind_wayland_display.spec
> +++ b/docs/specs/WL_bind_wayland_display.spec
> @@ -17,7 +17,7 @@ Status
>
>  Version
>
> -    Version 1, March 1, 2011
> +    Version 5, July 16, 2013
>
>  Number
>
> @@ -57,7 +57,7 @@ New Procedures and Functions
>                                           struct wl_display *display);
>
>      EGLBoolean eglQueryWaylandBufferWL(EGLDisplay dpy,
> -                                       struct wl_buffer *buffer,
> +                                       struct wl_resource *buffer,
>                                         EGLint attribute, EGLint *value);
>
>  New Tokens
> @@ -173,3 +173,7 @@ Revision History
>          Use EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB, and EGL_TEXTURE_RGBA,
>          and just define the new YUV texture formats.  Add support for
>          EGL_WIDTH and EGL_HEIGHT in the query attributes (Kristian
> Høgsberg)
> +    Version 5, July 16, 2013
> +        Change eglQueryWaylandBufferWL to take a resource pointer to the
> +        buffer instead of a pointer to a struct wl_buffer, as the latter
> has
> +        been deprecated. (Ander Conselvan de Oliveira)
> diff --git a/include/EGL/eglmesaext.h b/include/EGL/eglmesaext.h
> index d476d18..e0eae28 100644
> --- a/include/EGL/eglmesaext.h
> +++ b/include/EGL/eglmesaext.h
> @@ -120,15 +120,15 @@ typedef EGLDisplay (EGLAPIENTRYP
> PFNEGLGETDRMDISPLAYMESA) (int fd);
>  #define EGL_TEXTURE_Y_XUXV_WL           0x31D9
>
>  struct wl_display;
> -struct wl_buffer;
> +struct wl_resource;
>  #ifdef EGL_EGLEXT_PROTOTYPES
>  EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL(EGLDisplay dpy,
> struct wl_display *display);
>  EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL(EGLDisplay dpy,
> struct wl_display *display);
> -EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL(EGLDisplay dpy,
> struct wl_buffer *buffer, EGLint attribute, EGLint *value);
> +EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL(EGLDisplay dpy,
> struct wl_resource *buffer, EGLint attribute, EGLint *value);
>  #endif
>  typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWL) (EGLDisplay
> dpy, struct wl_display *display);
>  typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWL)
> (EGLDisplay dpy, struct wl_display *display);
> -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay
> dpy, struct wl_buffer *buffer, EGLint attribute, EGLint *value);
> +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay
> dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
>
>  #endif
>
> diff --git a/src/egl/drivers/dri2/egl_dri2.c
> b/src/egl/drivers/dri2/egl_dri2.c
> index 1bce314..44fd8a8 100644
> --- a/src/egl/drivers/dri2/egl_dri2.c
> +++ b/src/egl/drivers/dri2/egl_dri2.c
> @@ -41,6 +41,10 @@
>
>  #include "egl_dri2.h"
>
> +#ifdef HAVE_WAYLAND_PLATFORM
> +#include "wayland-drm.h"
> +#endif
> +
>  const __DRIuseInvalidateExtension use_invalidate = {
>     { __DRI_USE_INVALIDATE, 1 }
>  };
> @@ -1195,7 +1199,7 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay
> *disp, _EGLContext *ctx,
>                                     EGLClientBuffer _buffer,
>                                     const EGLint *attr_list)
>  {
> -   struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
> +   struct wl_drm_buffer *buffer;
>     struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
>     const struct wl_drm_components_descriptor *f;
>     __DRIimage *dri_image;
> @@ -1203,7 +1207,8 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay
> *disp, _EGLContext *ctx,
>     EGLint err;
>     int32_t plane;
>
> -   if (!wayland_buffer_is_drm(&buffer->buffer))
> +   buffer = wayland_drm_buffer_get((struct wl_resource *) _buffer);
> +   if (!buffer)
>         return NULL;
>
>     err = _eglParseImageAttribList(&attrs, disp, attr_list);
> @@ -1508,8 +1513,8 @@ dri2_wl_reference_buffer(void *user_data, uint32_t
> name, int fd,
>
>     if (fd == -1)
>        img = dri2_dpy->image->createImageFromNames(dri2_dpy->dri_screen,
> -                                                  buffer->buffer.width,
> -                                                  buffer->buffer.height,
> +                                                  buffer->width,
> +                                                  buffer->height,
>                                                    buffer->format,
>                                                    (int*)&name, 1,
>                                                    buffer->stride,
> @@ -1517,8 +1522,8 @@ dri2_wl_reference_buffer(void *user_data, uint32_t
> name, int fd,
>                                                    NULL);
>     else
>        img = dri2_dpy->image->createImageFromFds(dri2_dpy->dri_screen,
> -                                                buffer->buffer.width,
> -                                                buffer->buffer.height,
> +                                                buffer->width,
> +                                                buffer->height,
>                                                  buffer->format,
>                                                  &fd, 1,
>                                                  buffer->stride,
> @@ -1607,13 +1612,14 @@ dri2_unbind_wayland_display_wl(_EGLDriver *drv,
> _EGLDisplay *disp,
>
>  static EGLBoolean
>  dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp,
> -                             struct wl_buffer *_buffer,
> +                             struct wl_resource *buffer_resource,
>                               EGLint attribute, EGLint *value)
>  {
> -   struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
> +   struct wl_drm_buffer *buffer;
>     const struct wl_drm_components_descriptor *format;
>
> -   if (!wayland_buffer_is_drm(&buffer->buffer))
> +   buffer = wayland_drm_buffer_get(buffer_resource);
> +   if (!buffer)
>        return EGL_FALSE;
>
>     format = buffer->driver_format;
> @@ -1622,10 +1628,10 @@ dri2_query_wayland_buffer_wl(_EGLDriver *drv,
> _EGLDisplay *disp,
>        *value = format->components;
>        return EGL_TRUE;
>     case EGL_WIDTH:
> -      *value = buffer->buffer.width;
> +      *value = buffer->width;
>        return EGL_TRUE;
>     case EGL_HEIGHT:
> -      *value = buffer->buffer.height;
> +      *value = buffer->height;
>        return EGL_TRUE;
>     }
>
> diff --git a/src/egl/drivers/dri2/egl_dri2.h
> b/src/egl/drivers/dri2/egl_dri2.h
> index 6dfdf94..fba5f81 100644
> --- a/src/egl/drivers/dri2/egl_dri2.h
> +++ b/src/egl/drivers/dri2/egl_dri2.h
> @@ -37,7 +37,6 @@
>
>  #ifdef HAVE_WAYLAND_PLATFORM
>  #include <wayland-client.h>
> -#include "wayland-drm.h"
>  #include "wayland-egl-priv.h"
>  #endif
>
> diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
> index 4a9831b..a788295 100644
> --- a/src/egl/main/eglapi.c
> +++ b/src/egl/main/eglapi.c
> @@ -1571,7 +1571,7 @@ eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct
> wl_display *display)
>  }
>
>  EGLBoolean EGLAPIENTRY
> -eglQueryWaylandBufferWL(EGLDisplay dpy,struct wl_buffer *buffer,
> +eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer,
>                          EGLint attribute, EGLint *value)
>  {
>     _EGLDisplay *disp = _eglLockDisplay(dpy);
> diff --git a/src/egl/main/eglapi.h b/src/egl/main/eglapi.h
> index ee382d0..4a4f976 100644
> --- a/src/egl/main/eglapi.h
> +++ b/src/egl/main/eglapi.h
> @@ -123,7 +123,7 @@ typedef EGLBoolean (*ExportDRMImageMESA_t)(_EGLDriver
> *drv, _EGLDisplay *disp, _
>  struct wl_display;
>  typedef EGLBoolean (*BindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay
> *disp, struct wl_display *display);
>  typedef EGLBoolean (*UnbindWaylandDisplayWL_t)(_EGLDriver *drv,
> _EGLDisplay *disp, struct wl_display *display);
> -typedef EGLBoolean (*QueryWaylandBufferWL_t)(_EGLDriver *drv, _EGLDisplay
> *displ, struct wl_buffer *buffer, EGLint attribute, EGLint *value);
> +typedef EGLBoolean (*QueryWaylandBufferWL_t)(_EGLDriver *drv, _EGLDisplay
> *displ, struct wl_resource *buffer, EGLint attribute, EGLint *value);
>  #endif
>
>  typedef EGLBoolean (*PostSubBufferNV_t)(_EGLDriver *drv, _EGLDisplay
> *disp, _EGLSurface *surface, EGLint x, EGLint y, EGLint width, EGLint
> height);
> diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c
> b/src/egl/wayland/wayland-drm/wayland-drm.c
> index 7e2073a..d317c5e 100644
> --- a/src/egl/wayland/wayland-drm/wayland-drm.c
> +++ b/src/egl/wayland/wayland-drm/wayland-drm.c
> @@ -37,6 +37,8 @@
>  #include "wayland-drm.h"
>  #include "wayland-drm-server-protocol.h"
>
> +#define MIN(x,y) (((x)<(y))?(x):(y))
> +
>  struct wl_drm {
>         struct wl_display *display;
>
> @@ -86,8 +88,8 @@ create_buffer(struct wl_client *client, struct
> wl_resource *resource,
>         }
>
>         buffer->drm = drm;
> -       buffer->buffer.width = width;
> -       buffer->buffer.height = height;
> +       buffer->width = width;
> +       buffer->height = height;
>         buffer->format = format;
>         buffer->offset[0] = offset0;
>         buffer->stride[0] = stride0;
> @@ -104,16 +106,17 @@ create_buffer(struct wl_client *client, struct
> wl_resource *resource,
>                 return;
>         }
>
> -       buffer->buffer.resource.object.id = id;
> -       buffer->buffer.resource.object.interface = &wl_buffer_interface;
> -       buffer->buffer.resource.object.implementation =
> -               (void (**)(void)) &drm_buffer_interface;
> -       buffer->buffer.resource.data = buffer;
> -
> -       buffer->buffer.resource.destroy = destroy_buffer;
> -       buffer->buffer.resource.client = resource->client;
> +       buffer->resource =
> +               wl_resource_create(client, &wl_buffer_interface, 1, id);
> +       if (!buffer->resource) {
> +               wl_resource_post_no_memory(resource);
> +               free(buffer);
> +               return;
> +       }
>
> -       wl_client_add_resource(resource->client, &buffer->buffer.resource);
> +       wl_resource_set_implementation(buffer->resource,
> +                                      (void (**)(void))
> &drm_buffer_interface,
> +                                      buffer, destroy_buffer);
>  }
>
>  static void
> @@ -208,8 +211,15 @@ bind_drm(struct wl_client *client, void *data,
> uint32_t version, uint32_t id)
>         struct wl_resource *resource;
>          uint32_t capabilities;
>
> -       resource = wl_client_add_object(client, &wl_drm_interface,
> -                                       &drm_interface, id, data);
> +       resource = wl_resource_create(client, &wl_drm_interface,
> +                                     MIN(version, 2), id);
> +       if (!resource) {
> +               wl_client_post_no_memory(client);
> +               return;
> +       }
> +
> +       wl_resource_set_implementation(resource, &drm_interface, data,
> NULL);
> +
>         wl_resource_post_event(resource, WL_DRM_DEVICE, drm->device_name);
>         wl_resource_post_event(resource, WL_DRM_FORMAT,
>                                WL_DRM_FORMAT_ARGB8888);
> @@ -232,6 +242,19 @@ bind_drm(struct wl_client *client, void *data,
> uint32_t version, uint32_t id)
>             wl_resource_post_event(resource, WL_DRM_CAPABILITIES,
> capabilities);
>  }
>
> +struct wl_drm_buffer *
> +wayland_drm_buffer_get(struct wl_resource *resource)
> +{
> +       if (resource == NULL)
> +               return NULL;
> +
> +       if (wl_resource_instance_of(resource, &wl_buffer_interface,
> +                                   &drm_buffer_interface))
> +               return wl_resource_get_user_data(resource);
> +       else
> +               return NULL;
> +}
> +
>  struct wl_drm *
>  wayland_drm_init(struct wl_display *display, char *device_name,
>                   struct wayland_drm_callbacks *callbacks, void *user_data,
> @@ -247,7 +270,7 @@ wayland_drm_init(struct wl_display *display, char
> *device_name,
>         drm->user_data = user_data;
>          drm->flags = flags;
>
> -       wl_display_add_global(display, &wl_drm_interface, drm, bind_drm);
> +       wl_global_create(display, &wl_drm_interface, 2, drm, bind_drm);
>
>         return drm;
>  }
> @@ -262,25 +285,14 @@ wayland_drm_uninit(struct wl_drm *drm)
>         free(drm);
>  }
>
> -int
> -wayland_buffer_is_drm(struct wl_buffer *buffer)
> -{
> -       return buffer->resource.object.implementation ==
> -               (void (**)(void)) &drm_buffer_interface;
> -}
> -
>  uint32_t
> -wayland_drm_buffer_get_format(struct wl_buffer *buffer_base)
> +wayland_drm_buffer_get_format(struct wl_drm_buffer *buffer)
>  {
> -       struct wl_drm_buffer *buffer = (struct wl_drm_buffer *)
> buffer_base;
> -
>         return buffer->format;
>  }
>
>  void *
> -wayland_drm_buffer_get_buffer(struct wl_buffer *buffer_base)
> +wayland_drm_buffer_get_buffer(struct wl_drm_buffer *buffer)
>  {
> -       struct wl_drm_buffer *buffer = (struct wl_drm_buffer *)
> buffer_base;
> -
>         return buffer->driver_buffer;
>  }
> diff --git a/src/egl/wayland/wayland-drm/wayland-drm.h
> b/src/egl/wayland/wayland-drm/wayland-drm.h
> index 335073a..ca04882 100644
> --- a/src/egl/wayland/wayland-drm/wayland-drm.h
> +++ b/src/egl/wayland/wayland-drm/wayland-drm.h
> @@ -70,8 +70,9 @@ enum wl_drm_format {
>  struct wl_drm;
>
>  struct wl_drm_buffer {
> -       struct wl_buffer buffer;
> +       struct wl_resource *resource;
>         struct wl_drm *drm;
> +       int32_t width, height;
>         uint32_t format;
>          const void *driver_format;
>          int32_t offset[3];
> @@ -90,6 +91,9 @@ struct wayland_drm_callbacks {
>
>  enum { WAYLAND_DRM_PRIME = 0x01 };
>
> +struct wl_drm_buffer *
> +wayland_drm_buffer_get(struct wl_resource *resource);
> +
>  struct wl_drm *
>  wayland_drm_init(struct wl_display *display, char *device_name,
>                  struct wayland_drm_callbacks *callbacks, void *user_data,
> @@ -98,13 +102,10 @@ wayland_drm_init(struct wl_display *display, char
> *device_name,
>  void
>  wayland_drm_uninit(struct wl_drm *drm);
>
> -int
> -wayland_buffer_is_drm(struct wl_buffer *buffer);
> -
>  uint32_t
> -wayland_drm_buffer_get_format(struct wl_buffer *buffer_base);
> +wayland_drm_buffer_get_format(struct wl_drm_buffer *buffer);
>
>  void *
> -wayland_drm_buffer_get_buffer(struct wl_buffer *buffer);
> +wayland_drm_buffer_get_buffer(struct wl_drm_buffer *buffer);
>
>  #endif
> diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_api.c
> b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
> index 2e5424e..3ee0d67 100644
> --- a/src/gallium/state_trackers/egl/common/egl_g3d_api.c
> +++ b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
> @@ -874,7 +874,7 @@ egl_g3d_unbind_wayland_display_wl(_EGLDriver *drv,
> _EGLDisplay *dpy,
>
>  static EGLBoolean
>  egl_g3d_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *dpy,
> -                                struct wl_buffer *buffer,
> +                                struct wl_resource *buffer,
>                                  EGLint attribute, EGLint *value)
>  {
>     struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
> diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_image.c
> b/src/gallium/state_trackers/egl/common/egl_g3d_image.c
> index aa1980b..c459dc3 100644
> --- a/src/gallium/state_trackers/egl/common/egl_g3d_image.c
> +++ b/src/gallium/state_trackers/egl/common/egl_g3d_image.c
> @@ -183,7 +183,7 @@ egl_g3d_reference_drm_buffer(_EGLDisplay *dpy, EGLint
> name,
>  #ifdef EGL_WL_bind_wayland_display
>
>  static struct pipe_resource *
> -egl_g3d_reference_wl_buffer(_EGLDisplay *dpy, struct wl_buffer *buffer,
> +egl_g3d_reference_wl_buffer(_EGLDisplay *dpy, struct wl_resource *buffer,
>                              _EGLImage *img, const EGLint *attribs)
>  {
>     struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
> @@ -253,7 +253,7 @@ egl_g3d_create_image(_EGLDriver *drv, _EGLDisplay
> *dpy, _EGLContext *ctx,
>  #ifdef EGL_WL_bind_wayland_display
>     case EGL_WAYLAND_BUFFER_WL:
>        ptex = egl_g3d_reference_wl_buffer(dpy,
> -            (struct wl_buffer *) buffer, &gimg->base, attribs);
> +            (struct wl_resource *) buffer, &gimg->base, attribs);
>        break;
>  #endif
>  #ifdef EGL_ANDROID_image_native_buffer
> diff --git a/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
> b/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
> index dd27828..eb324bf 100644
> --- a/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
> +++ b/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
> @@ -27,7 +27,7 @@
>
>  struct native_display;
>  struct wl_display;
> -struct wl_buffer;
> +struct wl_resource;
>  struct pipe_resource;
>
>  struct native_display_wayland_bufmgr {
> @@ -38,11 +38,11 @@ struct native_display_wayland_bufmgr {
>                               struct wl_display *wl_dpy);
>
>     struct pipe_resource *(*buffer_get_resource)(struct native_display
> *ndpy,
> -                                                struct wl_buffer *buffer);
> +                                                struct wl_resource
> *buffer);
>
>
>     boolean (*query_buffer)(struct native_display *ndpy,
> -                           struct wl_buffer *buffer,
> +                           struct wl_resource *buffer,
>                             int attribute, int *value);
>  };
>
> diff --git
> a/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr.c
> b/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr.c
> index 1603a3a..9b69cb9 100644
> --- a/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr.c
> +++ b/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr.c
> @@ -70,8 +70,8 @@ wayland_drm_bufmgr_reference_buffer(void *user_data,
> uint32_t name, int fd,
>     templ.target = PIPE_TEXTURE_2D;
>     templ.format = pf;
>     templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
> -   templ.width0 = buffer->buffer.width;
> -   templ.height0 = buffer->buffer.height;
> +   templ.width0 = buffer->width;
> +   templ.height0 = buffer->height;
>     templ.depth0 = 1;
>     templ.array_size = 1;
>
> @@ -137,22 +137,29 @@ wayland_drm_bufmgr_unbind_display(struct
> native_display *ndpy,
>
>  static struct pipe_resource *
>  wayland_drm_bufmgr_wl_buffer_get_resource(struct native_display *ndpy,
> -                                          struct wl_buffer *buffer)
> +                                          struct wl_resource
> *buffer_resource)
>  {
> +   struct wl_drm_buffer *buffer = wayland_drm_buffer_get(buffer_resource);
> +
> +   if (!buffer)
> +      return NULL;
> +
>     return wayland_drm_buffer_get_buffer(buffer);
>  }
>
>  static EGLBoolean
>  wayland_drm_bufmgr_query_buffer(struct native_display *ndpy,
> -                                struct wl_buffer *_buffer,
> +                                struct wl_resource *buffer_resource,
>                                  EGLint attribute, EGLint *value)
>  {
> -   struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
> -   struct pipe_resource *resource = buffer->driver_buffer;
> +   struct wl_drm_buffer *buffer = wayland_drm_buffer_get(buffer_resource);
> +   struct pipe_resource *resource;
>
> -   if (!wayland_buffer_is_drm(&buffer->buffer))
> +   if (!buffer)
>        return EGL_FALSE;
>
> +   resource = buffer->driver_buffer;
> +
>     switch (attribute) {
>     case EGL_TEXTURE_FORMAT:
>        switch (resource->format) {
> @@ -166,10 +173,10 @@ wayland_drm_bufmgr_query_buffer(struct
> native_display *ndpy,
>           return EGL_FALSE;
>        }
>     case EGL_WIDTH:
> -      *value = buffer->buffer.width;
> +      *value = buffer->width;
>        return EGL_TRUE;
>     case EGL_HEIGHT:
> -      *value = buffer->buffer.height;
> +      *value = buffer->height;
>        return EGL_TRUE;
>     default:
>        return EGL_FALSE;
> diff --git a/src/gbm/backends/dri/gbm_dri.c
> b/src/gbm/backends/dri/gbm_dri.c
> index a3a0530..f7da79c 100644
> --- a/src/gbm/backends/dri/gbm_dri.c
> +++ b/src/gbm/backends/dri/gbm_dri.c
> @@ -374,9 +374,10 @@ gbm_dri_bo_import(struct gbm_device *gbm,
>  #if HAVE_WAYLAND_PLATFORM
>     case GBM_BO_IMPORT_WL_BUFFER:
>     {
> -      struct wl_drm_buffer *wb = (struct wl_drm_buffer *) buffer;
> +      struct wl_drm_buffer *wb;
>
> -      if (!wayland_buffer_is_drm(buffer))
> +      wb = wayland_drm_buffer_get((struct wl_resource *) buffer);
> +      if (!wb)
>           return NULL;
>
>        image = wb->driver_buffer;
> --
> 1.8.1.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20130809/78a3067a/attachment-0001.html>


More information about the mesa-dev mailing list