On Wed, Aug 7, 2013 at 1:27 PM, Ian Romanick <i...@freedesktop.org> wrote: > On 08/07/2013 10:39 AM, Kristian Høgsberg wrote: >> >> On Thu, Jul 18, 2013 at 03:11:25PM +0300, Ander Conselvan de Oliveira >> 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.olive...@intel.com> >> >> >> Thanks Ander, this and the two previous patches pushed. > > > If any patches need to be picked back to the 9.2 branch (or 9.1 branch), > please send them to mesa-stable. I don't follow the Wayland work very > closely, so I defer to Kristian's guidance.
Thanks Ian - no, that shouldn't be necessary. The 1.2 release didn't break API or ABI used by mesa, but we did deprecate certain parts. Kristian >> Kristian >> >>> --- >>> 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@lists.freedesktop.org >> http://lists.freedesktop.org/mailman/listinfo/mesa-dev >> > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev