]> git.pld-linux.org Git - packages/Mesa.git/blob - 0003-egl-Update-to-Wayland-1.2-server-API.patch
- updated to 9.2.4
[packages/Mesa.git] / 0003-egl-Update-to-Wayland-1.2-server-API.patch
1 From 29c760d8bb6338679abaf8a30549341bd181cc51 Mon Sep 17 00:00:00 2001
2 From: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
3 Date: Thu, 18 Jul 2013 15:11:25 +0300
4 Subject: [PATCH 3/4] egl: Update to Wayland 1.2 server API
5
6 Since Wayland 1.2, struct wl_buffer and a few functions are deprecated.
7
8 References to wl_buffer are replaced with wl_resource and some getter
9 functions and calls to deprecated functions are replaced with the proper
10 new API. The latter changes are related to resource versioning.
11
12 Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
13 ---
14  docs/specs/WL_bind_wayland_display.spec            |  8 ++-
15  include/EGL/eglmesaext.h                           |  6 +-
16  src/egl/drivers/dri2/egl_dri2.c                    | 28 +++++----
17  src/egl/drivers/dri2/egl_dri2.h                    |  1 -
18  src/egl/main/eglapi.c                              |  2 +-
19  src/egl/main/eglapi.h                              |  2 +-
20  src/egl/wayland/wayland-drm/wayland-drm.c          | 66 +++++++++++++---------
21  src/egl/wayland/wayland-drm/wayland-drm.h          | 13 +++--
22  .../state_trackers/egl/common/egl_g3d_api.c        |  2 +-
23  .../state_trackers/egl/common/egl_g3d_image.c      |  4 +-
24  .../egl/common/native_wayland_bufmgr.h             |  6 +-
25  .../egl/common/native_wayland_drm_bufmgr.c         | 25 +++++---
26  src/gbm/backends/dri/gbm_dri.c                     |  5 +-
27  13 files changed, 99 insertions(+), 69 deletions(-)
28
29 diff --git a/docs/specs/WL_bind_wayland_display.spec b/docs/specs/WL_bind_wayland_display.spec
30 index 02bd6ea..8f0083c 100644
31 --- a/docs/specs/WL_bind_wayland_display.spec
32 +++ b/docs/specs/WL_bind_wayland_display.spec
33 @@ -17,7 +17,7 @@ Status
34  
35  Version
36  
37 -    Version 1, March 1, 2011
38 +    Version 5, July 16, 2013
39  
40  Number
41  
42 @@ -57,7 +57,7 @@ New Procedures and Functions
43                                           struct wl_display *display);
44  
45      EGLBoolean eglQueryWaylandBufferWL(EGLDisplay dpy,
46 -                                       struct wl_buffer *buffer,
47 +                                       struct wl_resource *buffer,
48                                         EGLint attribute, EGLint *value);
49  
50  New Tokens
51 @@ -173,3 +173,7 @@ Revision History
52          Use EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB, and EGL_TEXTURE_RGBA,
53          and just define the new YUV texture formats.  Add support for
54          EGL_WIDTH and EGL_HEIGHT in the query attributes (Kristian Høgsberg)
55 +    Version 5, July 16, 2013
56 +        Change eglQueryWaylandBufferWL to take a resource pointer to the
57 +        buffer instead of a pointer to a struct wl_buffer, as the latter has
58 +        been deprecated. (Ander Conselvan de Oliveira)
59 diff --git a/include/EGL/eglmesaext.h b/include/EGL/eglmesaext.h
60 index d476d18..e0eae28 100644
61 --- a/include/EGL/eglmesaext.h
62 +++ b/include/EGL/eglmesaext.h
63 @@ -120,15 +120,15 @@ typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETDRMDISPLAYMESA) (int fd);
64  #define EGL_TEXTURE_Y_XUXV_WL           0x31D9
65  
66  struct wl_display;
67 -struct wl_buffer;
68 +struct wl_resource;
69  #ifdef EGL_EGLEXT_PROTOTYPES
70  EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display);
71  EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display);
72 -EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_buffer *buffer, EGLint attribute, EGLint *value);
73 +EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
74  #endif
75  typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display);
76  typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWL) (EGLDisplay dpy, struct wl_display *display);
77 -typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay dpy, struct wl_buffer *buffer, EGLint attribute, EGLint *value);
78 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
79  
80  #endif
81  
82 diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
83 index 52fcb3f..bdbb450 100644
84 --- a/src/egl/drivers/dri2/egl_dri2.c
85 +++ b/src/egl/drivers/dri2/egl_dri2.c
86 @@ -41,6 +41,10 @@
87  
88  #include "egl_dri2.h"
89  
90 +#ifdef HAVE_WAYLAND_PLATFORM
91 +#include "wayland-drm.h"
92 +#endif
93 +
94  const __DRIuseInvalidateExtension use_invalidate = {
95     { __DRI_USE_INVALIDATE, 1 }
96  };
97 @@ -1195,7 +1199,7 @@ dri2_create_image_wayland_wl_buffer(_EGL
98                                     EGLClientBuffer _buffer,
99                                     const EGLint *attr_list)
100  {
101 -   struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
102 +   struct wl_drm_buffer *buffer;
103     struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
104     const struct wl_drm_components_descriptor *f;
105     __DRIimage *dri_image;
106 @@ -1203,7 +1207,8 @@ dri2_create_image_wayland_wl_buffer(_EGL
107     EGLint err;
108     int32_t plane;
109  
110 -   if (!wayland_buffer_is_drm(dri2_dpy->wl_server_drm, &buffer->buffer))
111 +   buffer = wayland_drm_buffer_get(dri2_dpy->wl_server_drm, (struct wl_resource *) _buffer);
112 +   if (!buffer)
113         return NULL;
114  
115     err = _eglParseImageAttribList(&attrs, disp, attr_list);
116 @@ -1508,8 +1513,8 @@ dri2_wl_reference_buffer(void *user_data
117  
118     if (fd == -1)
119        img = dri2_dpy->image->createImageFromNames(dri2_dpy->dri_screen,
120 -                                                  buffer->buffer.width,
121 -                                                  buffer->buffer.height,
122 +                                                  buffer->width,
123 +                                                  buffer->height,
124                                                    buffer->format,
125                                                    (int*)&name, 1,
126                                                    buffer->stride,
127 @@ -1517,8 +1522,8 @@ dri2_wl_reference_buffer(void *user_data
128                                                    NULL);
129     else
130        img = dri2_dpy->image->createImageFromFds(dri2_dpy->dri_screen,
131 -                                                buffer->buffer.width,
132 -                                                buffer->buffer.height,
133 +                                                buffer->width,
134 +                                                buffer->height,
135                                                  buffer->format,
136                                                  &fd, 1,
137                                                  buffer->stride,
138 @@ -1612,14 +1617,15 @@ dri2_unbind_wayland_display_wl(_EGLDrive
139  
140  static EGLBoolean
141  dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp,
142 -                             struct wl_buffer *_buffer,
143 +                             struct wl_resource *buffer_resource,
144                               EGLint attribute, EGLint *value)
145  {
146 -   struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
147 +   struct wl_drm_buffer *buffer;
148     struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
149     const struct wl_drm_components_descriptor *format;
150  
151 -   if (!wayland_buffer_is_drm(dri2_dpy->wl_server_drm, &buffer->buffer))
152 +   buffer = wayland_drm_buffer_get(dri2_dpy->wl_server_drm, buffer_resource);
153 +   if (!buffer)
154        return EGL_FALSE;
155  
156     format = buffer->driver_format;
157 @@ -1628,10 +1634,10 @@ dri2_query_wayland_buffer_wl(_EGLDriver
158        *value = format->components;
159        return EGL_TRUE;
160     case EGL_WIDTH:
161 -      *value = buffer->buffer.width;
162 +      *value = buffer->width;
163        return EGL_TRUE;
164     case EGL_HEIGHT:
165 -      *value = buffer->buffer.height;
166 +      *value = buffer->height;
167        return EGL_TRUE;
168     }
169  
170 diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
171 index 6dfdf94..fba5f81 100644
172 --- a/src/egl/drivers/dri2/egl_dri2.h
173 +++ b/src/egl/drivers/dri2/egl_dri2.h
174 @@ -37,7 +37,6 @@
175  
176  #ifdef HAVE_WAYLAND_PLATFORM
177  #include <wayland-client.h>
178 -#include "wayland-drm.h"
179  #include "wayland-egl-priv.h"
180  #endif
181  
182 diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
183 index 4a9831b..a788295 100644
184 --- a/src/egl/main/eglapi.c
185 +++ b/src/egl/main/eglapi.c
186 @@ -1571,7 +1571,7 @@ eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display)
187  }
188  
189  EGLBoolean EGLAPIENTRY
190 -eglQueryWaylandBufferWL(EGLDisplay dpy,struct wl_buffer *buffer,
191 +eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer,
192                          EGLint attribute, EGLint *value)
193  {
194     _EGLDisplay *disp = _eglLockDisplay(dpy);
195 diff --git a/src/egl/main/eglapi.h b/src/egl/main/eglapi.h
196 index ee382d0..4a4f976 100644
197 --- a/src/egl/main/eglapi.h
198 +++ b/src/egl/main/eglapi.h
199 @@ -123,7 +123,7 @@ typedef EGLBoolean (*ExportDRMImageMESA_t)(_EGLDriver *drv, _EGLDisplay *disp, _
200  struct wl_display;
201  typedef EGLBoolean (*BindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp, struct wl_display *display);
202  typedef EGLBoolean (*UnbindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp, struct wl_display *display);
203 -typedef EGLBoolean (*QueryWaylandBufferWL_t)(_EGLDriver *drv, _EGLDisplay *displ, struct wl_buffer *buffer, EGLint attribute, EGLint *value);
204 +typedef EGLBoolean (*QueryWaylandBufferWL_t)(_EGLDriver *drv, _EGLDisplay *displ, struct wl_resource *buffer, EGLint attribute, EGLint *value);
205  #endif
206  
207  typedef EGLBoolean (*PostSubBufferNV_t)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surface, EGLint x, EGLint y, EGLint width, EGLint height);
208 diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c b/src/egl/wayland/wayland-drm/wayland-drm.c
209 index 7e2073a..d317c5e 100644
210 --- a/src/egl/wayland/wayland-drm/wayland-drm.c
211 +++ b/src/egl/wayland/wayland-drm/wayland-drm.c
212 @@ -37,6 +37,8 @@
213  #include "wayland-drm.h"
214  #include "wayland-drm-server-protocol.h"
215  
216 +#define MIN(x,y) (((x)<(y))?(x):(y))
217 +
218  struct wl_drm {
219         struct wl_display *display;
220  
221 @@ -83,8 +85,8 @@ create_buffer(struct wl_client *client,
222         }
223  
224         buffer->drm = drm;
225 -       buffer->buffer.width = width;
226 -       buffer->buffer.height = height;
227 +       buffer->width = width;
228 +       buffer->height = height;
229         buffer->format = format;
230         buffer->offset[0] = offset0;
231         buffer->stride[0] = stride0;
232 @@ -101,16 +103,17 @@ create_buffer(struct wl_client *client,
233                 return;
234         }
235  
236 -       buffer->buffer.resource.object.id = id;
237 -       buffer->buffer.resource.object.interface = &wl_buffer_interface;
238 -       buffer->buffer.resource.object.implementation =
239 -               (void (**)(void)) &drm->buffer_interface;
240 -       buffer->buffer.resource.data = buffer;
241 -
242 -       buffer->buffer.resource.destroy = destroy_buffer;
243 -       buffer->buffer.resource.client = resource->client;
244 +       buffer->resource =
245 +               wl_resource_create(client, &wl_buffer_interface, 1, id);
246 +       if (!buffer->resource) {
247 +               wl_resource_post_no_memory(resource);
248 +               free(buffer);
249 +               return;
250 +       }
251  
252 -       wl_client_add_resource(resource->client, &buffer->buffer.resource);
253 +       wl_resource_set_implementation(buffer->resource,
254 +                                      (void (**)(void)) &drm->buffer_interface,
255 +                                      buffer, destroy_buffer);
256  }
257  
258  static void
259 @@ -205,8 +208,15 @@ bind_drm(struct wl_client *client, void
260         struct wl_resource *resource;
261          uint32_t capabilities;
262  
263 -       resource = wl_client_add_object(client, &wl_drm_interface,
264 -                                       &drm_interface, id, data);
265 +       resource = wl_resource_create(client, &wl_drm_interface,
266 +                                     MIN(version, 2), id);
267 +       if (!resource) {
268 +               wl_client_post_no_memory(client);
269 +               return;
270 +       }
271 +
272 +       wl_resource_set_implementation(resource, &drm_interface, data, NULL);
273 +
274         wl_resource_post_event(resource, WL_DRM_DEVICE, drm->device_name);
275         wl_resource_post_event(resource, WL_DRM_FORMAT,
276                                WL_DRM_FORMAT_ARGB8888);
277 @@ -229,6 +239,21 @@ bind_drm(struct wl_client *client, void
278             wl_resource_post_event(resource, WL_DRM_CAPABILITIES, capabilities);
279  }
280  
281 +struct wl_drm_buffer *
282 +wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource)
283 +{
284 +       struct wl_drm_buffer *buffer;
285 +
286 +       if (resource == NULL)
287 +               return NULL;
288 +
289 +       if (wl_resource_instance_of(resource, &wl_buffer_interface,
290 +                                   &drm->buffer_interface))
291 +               return wl_resource_get_user_data(resource);
292 +       else
293 +               return NULL;
294 +}
295 +
296  struct wl_drm *
297  wayland_drm_init(struct wl_display *display, char *device_name,
298                   struct wayland_drm_callbacks *callbacks, void *user_data,
299 @@ -245,7 +270,7 @@ wayland_drm_init(struct wl_display *disp
300          drm->flags = flags;
301          drm->buffer_interface.destroy = buffer_destroy;
302  
303 -       wl_display_add_global(display, &wl_drm_interface, drm, bind_drm);
304 +       wl_global_create(display, &wl_drm_interface, 2, drm, bind_drm);
305  
306         return drm;
307  }
308 @@ -260,25 +285,14 @@ wayland_drm_uninit(struct wl_drm *drm)
309         free(drm);
310  }
311  
312 -int
313 -wayland_buffer_is_drm(struct wl_drm *drm, struct wl_buffer *buffer)
314 -{
315 -       return buffer->resource.object.implementation == 
316 -               (void (**)(void)) &drm->buffer_interface;
317 -}
318 -
319  uint32_t
320 -wayland_drm_buffer_get_format(struct wl_buffer *buffer_base)
321 +wayland_drm_buffer_get_format(struct wl_drm_buffer *buffer)
322  {
323 -       struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) buffer_base;
324 -
325         return buffer->format;
326  }
327  
328  void *
329 -wayland_drm_buffer_get_buffer(struct wl_buffer *buffer_base)
330 +wayland_drm_buffer_get_buffer(struct wl_drm_buffer *buffer)
331  {
332 -       struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) buffer_base;
333 -
334         return buffer->driver_buffer;
335  }
336 diff --git a/src/egl/wayland/wayland-drm/wayland-drm.h b/src/egl/wayland/wayland-drm/wayland-drm.h
337 index 335073a..ca04882 100644
338 --- a/src/egl/wayland/wayland-drm/wayland-drm.h
339 +++ b/src/egl/wayland/wayland-drm/wayland-drm.h
340 @@ -70,8 +70,9 @@ enum wl_drm_format {
341  struct wl_drm;
342  
343  struct wl_drm_buffer {
344 -       struct wl_buffer buffer;
345 +       struct wl_resource *resource;
346         struct wl_drm *drm;
347 +       int32_t width, height;
348         uint32_t format;
349          const void *driver_format;
350          int32_t offset[3];
351 @@ -90,6 +91,9 @@ struct wayland_drm_callbacks {
352  
353  enum { WAYLAND_DRM_PRIME = 0x01 };
354  
355 +struct wl_drm_buffer *
356 +wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource);
357 +
358  struct wl_drm *
359  wayland_drm_init(struct wl_display *display, char *device_name,
360                  struct wayland_drm_callbacks *callbacks, void *user_data,
361 @@ -98,13 +102,10 @@ wayland_drm_init(struct wl_display *disp
362  void
363  wayland_drm_uninit(struct wl_drm *drm);
364  
365 -int
366 -wayland_buffer_is_drm(struct wl_drm *drm, struct wl_buffer *buffer);
367 -
368  uint32_t
369 -wayland_drm_buffer_get_format(struct wl_buffer *buffer_base);
370 +wayland_drm_buffer_get_format(struct wl_drm_buffer *buffer);
371  
372  void *
373 -wayland_drm_buffer_get_buffer(struct wl_buffer *buffer);
374 +wayland_drm_buffer_get_buffer(struct wl_drm_buffer *buffer);
375  
376  #endif
377 diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_api.c b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
378 index 59187a9..46a3245 100644
379 --- a/src/gallium/state_trackers/egl/common/egl_g3d_api.c
380 +++ b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
381 @@ -874,7 +874,7 @@ egl_g3d_unbind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *dpy,
382  
383  static EGLBoolean
384  egl_g3d_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *dpy,
385 -                                struct wl_buffer *buffer,
386 +                                struct wl_resource *buffer,
387                                  EGLint attribute, EGLint *value)
388  {
389     struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
390 diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_image.c b/src/gallium/state_trackers/egl/common/egl_g3d_image.c
391 index aa1980b..c459dc3 100644
392 --- a/src/gallium/state_trackers/egl/common/egl_g3d_image.c
393 +++ b/src/gallium/state_trackers/egl/common/egl_g3d_image.c
394 @@ -183,7 +183,7 @@ egl_g3d_reference_drm_buffer(_EGLDisplay *dpy, EGLint name,
395  #ifdef EGL_WL_bind_wayland_display
396  
397  static struct pipe_resource *
398 -egl_g3d_reference_wl_buffer(_EGLDisplay *dpy, struct wl_buffer *buffer,
399 +egl_g3d_reference_wl_buffer(_EGLDisplay *dpy, struct wl_resource *buffer,
400                              _EGLImage *img, const EGLint *attribs)
401  {
402     struct egl_g3d_display *gdpy = egl_g3d_display(dpy);
403 @@ -253,7 +253,7 @@ egl_g3d_create_image(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx,
404  #ifdef EGL_WL_bind_wayland_display
405     case EGL_WAYLAND_BUFFER_WL:
406        ptex = egl_g3d_reference_wl_buffer(dpy,
407 -            (struct wl_buffer *) buffer, &gimg->base, attribs);
408 +            (struct wl_resource *) buffer, &gimg->base, attribs);
409        break;
410  #endif
411  #ifdef EGL_ANDROID_image_native_buffer
412 diff --git a/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h b/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
413 index dd27828..eb324bf 100644
414 --- a/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
415 +++ b/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
416 @@ -27,7 +27,7 @@
417  
418  struct native_display;
419  struct wl_display;
420 -struct wl_buffer;
421 +struct wl_resource;
422  struct pipe_resource;
423  
424  struct native_display_wayland_bufmgr {
425 @@ -38,11 +38,11 @@ struct native_display_wayland_bufmgr {
426                               struct wl_display *wl_dpy);
427  
428     struct pipe_resource *(*buffer_get_resource)(struct native_display *ndpy,
429 -                                                struct wl_buffer *buffer);
430 +                                                struct wl_resource *buffer);
431                               
432  
433     boolean (*query_buffer)(struct native_display *ndpy,
434 -                           struct wl_buffer *buffer,
435 +                           struct wl_resource *buffer,
436                             int attribute, int *value);
437  };
438  
439 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
440 index 1603a3a..9b69cb9 100644
441 --- a/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr.c
442 +++ b/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr.c
443 @@ -70,8 +70,8 @@ wayland_drm_bufmgr_reference_buffer(void
444     templ.target = PIPE_TEXTURE_2D;
445     templ.format = pf;
446     templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
447 -   templ.width0 = buffer->buffer.width;
448 -   templ.height0 = buffer->buffer.height;
449 +   templ.width0 = buffer->width;
450 +   templ.height0 = buffer->height;
451     templ.depth0 = 1;
452     templ.array_size = 1;
453  
454 @@ -137,22 +137,31 @@ wayland_drm_bufmgr_unbind_display(struct
455  
456  static struct pipe_resource *
457  wayland_drm_bufmgr_wl_buffer_get_resource(struct native_display *ndpy,
458 -                                          struct wl_buffer *buffer)
459 +                                          struct wl_resourcer *buffer_resource)
460  {
461 +   struct wayland_drm_bufmgr *bufmgr = wayland_drm_bufmgr(ndpy->wayland_bufmgr);
462 +   struct wl_drm_buffer *buffer = wayland_drm_buffer_get(bufmgr->wl_server_drm, buffer_resource);
463 +
464 +   if (!buffer)
465 +      return NULL;
466 +
467     return wayland_drm_buffer_get_buffer(buffer);
468  }
469  
470  static EGLBoolean
471  wayland_drm_bufmgr_query_buffer(struct native_display *ndpy,
472 -                                struct wl_buffer *_buffer,
473 +                                struct wl_resource *buffer_resource,
474                                  EGLint attribute, EGLint *value)
475  {
476 -   struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer;
477 -   struct pipe_resource *resource = buffer->driver_buffer;
478 +   struct wayland_drm_bufmgr *bufmgr = wayland_drm_bufmgr(ndpy->wayland_bufmgr);
479 +   struct wl_drm_buffer *buffer = wayland_drm_buffer_get(bufmgr->wl_server_drm, buffer_resource);
480 +   struct pipe_resource *resource;
481  
482 -   if (!wayland_buffer_is_drm(wayland_drm_bufmgr(ndpy->wayland_bufmgr)->wl_server_drm, &buffer->buffer))
483 +   if (!buffer)
484        return EGL_FALSE;
485  
486 +   resource = buffer->driver_buffer;
487 +
488     switch (attribute) {
489     case EGL_TEXTURE_FORMAT:
490        switch (resource->format) {
491 @@ -166,10 +175,10 @@ wayland_drm_bufmgr_query_buffer(struct n
492           return EGL_FALSE;
493        }
494     case EGL_WIDTH:
495 -      *value = buffer->buffer.width;
496 +      *value = buffer->width;
497        return EGL_TRUE;
498     case EGL_HEIGHT:
499 -      *value = buffer->buffer.height;
500 +      *value = buffer->height;
501        return EGL_TRUE;
502     default:
503        return EGL_FALSE;
504 diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
505 index a3a0530..f7da79c 100644
506 --- a/src/gbm/backends/dri/gbm_dri.c
507 +++ b/src/gbm/backends/dri/gbm_dri.c
508 @@ -374,12 +374,13 @@ gbm_dri_bo_import(struct gbm_device *gbm
509  #if HAVE_WAYLAND_PLATFORM
510     case GBM_BO_IMPORT_WL_BUFFER:
511     {
512 -      struct wl_drm_buffer *wb = (struct wl_drm_buffer *) buffer;
513 +      struct wl_drm_buffer *wb;
514  
515        if (dri->wl_drm == NULL)
516           return NULL;
517  
518 -      if (!wayland_buffer_is_drm(dri->wl_drm, buffer))
519 +      wb = wayland_drm_buffer_get(dri->wl_drm, (struct wl_resource *) buffer);
520 +      if (!wb);
521           return NULL;
522  
523        image = wb->driver_buffer;
This page took 0.147647 seconds and 4 git commands to generate.