]> git.pld-linux.org Git - packages/Mesa.git/blame - 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
CommitLineData
4469c4e7
AF
1From 29c760d8bb6338679abaf8a30549341bd181cc51 Mon Sep 17 00:00:00 2001
2From: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
3Date: Thu, 18 Jul 2013 15:11:25 +0300
4Subject: [PATCH 3/4] egl: Update to Wayland 1.2 server API
5
6Since Wayland 1.2, struct wl_buffer and a few functions are deprecated.
7
8References to wl_buffer are replaced with wl_resource and some getter
9functions and calls to deprecated functions are replaced with the proper
10new API. The latter changes are related to resource versioning.
11
12Signed-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
29diff --git a/docs/specs/WL_bind_wayland_display.spec b/docs/specs/WL_bind_wayland_display.spec
30index 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)
59diff --git a/include/EGL/eglmesaext.h b/include/EGL/eglmesaext.h
60index 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
82diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
83index 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 };
68738647 97@@ -1195,7 +1199,7 @@ dri2_create_image_wayland_wl_buffer(_EGL
4469c4e7
AF
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;
68738647 106@@ -1203,7 +1207,8 @@ dri2_create_image_wayland_wl_buffer(_EGL
4469c4e7
AF
107 EGLint err;
108 int32_t plane;
109
68738647
JB
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);
4469c4e7
AF
112+ if (!buffer)
113 return NULL;
114
115 err = _eglParseImageAttribList(&attrs, disp, attr_list);
68738647 116@@ -1508,8 +1513,8 @@ dri2_wl_reference_buffer(void *user_data
4469c4e7
AF
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,
68738647 127@@ -1517,8 +1522,8 @@ dri2_wl_reference_buffer(void *user_data
4469c4e7
AF
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,
68738647 138@@ -1612,14 +1617,15 @@ dri2_unbind_wayland_display_wl(_EGLDrive
4469c4e7
AF
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;
68738647 148 struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
4469c4e7
AF
149 const struct wl_drm_components_descriptor *format;
150
68738647
JB
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);
4469c4e7
AF
153+ if (!buffer)
154 return EGL_FALSE;
155
156 format = buffer->driver_format;
68738647 157@@ -1628,10 +1634,10 @@ dri2_query_wayland_buffer_wl(_EGLDriver
4469c4e7
AF
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
170diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h
171index 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
182diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
183index 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);
195diff --git a/src/egl/main/eglapi.h b/src/egl/main/eglapi.h
196index 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);
208diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c b/src/egl/wayland/wayland-drm/wayland-drm.c
209index 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
68738647 221@@ -83,8 +85,8 @@ create_buffer(struct wl_client *client,
4469c4e7
AF
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;
68738647 232@@ -101,16 +103,17 @@ create_buffer(struct wl_client *client,
4469c4e7
AF
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 =
68738647 239- (void (**)(void)) &drm->buffer_interface;
4469c4e7
AF
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,
68738647 254+ (void (**)(void)) &drm->buffer_interface,
4469c4e7
AF
255+ buffer, destroy_buffer);
256 }
257
258 static void
68738647 259@@ -205,8 +208,15 @@ bind_drm(struct wl_client *client, void
4469c4e7
AF
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);
68738647 277@@ -229,6 +239,21 @@ bind_drm(struct wl_client *client, void
4469c4e7
AF
278 wl_resource_post_event(resource, WL_DRM_CAPABILITIES, capabilities);
279 }
280
281+struct wl_drm_buffer *
68738647 282+wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource)
4469c4e7 283+{
68738647
JB
284+ struct wl_drm_buffer *buffer;
285+
4469c4e7
AF
286+ if (resource == NULL)
287+ return NULL;
288+
289+ if (wl_resource_instance_of(resource, &wl_buffer_interface,
68738647 290+ &drm->buffer_interface))
4469c4e7
AF
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,
68738647 299@@ -245,7 +270,7 @@ wayland_drm_init(struct wl_display *disp
4469c4e7 300 drm->flags = flags;
68738647 301 drm->buffer_interface.destroy = buffer_destroy;
4469c4e7
AF
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 }
68738647 308@@ -260,25 +285,14 @@ wayland_drm_uninit(struct wl_drm *drm)
4469c4e7
AF
309 free(drm);
310 }
311
312-int
68738647 313-wayland_buffer_is_drm(struct wl_drm *drm, struct wl_buffer *buffer)
4469c4e7
AF
314-{
315- return buffer->resource.object.implementation ==
68738647 316- (void (**)(void)) &drm->buffer_interface;
4469c4e7
AF
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 }
336diff --git a/src/egl/wayland/wayland-drm/wayland-drm.h b/src/egl/wayland/wayland-drm/wayland-drm.h
337index 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 *
68738647 356+wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource);
4469c4e7
AF
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,
68738647 361@@ -98,13 +102,10 @@ wayland_drm_init(struct wl_display *disp
4469c4e7
AF
362 void
363 wayland_drm_uninit(struct wl_drm *drm);
364
365-int
68738647 366-wayland_buffer_is_drm(struct wl_drm *drm, struct wl_buffer *buffer);
4469c4e7
AF
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
377diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_api.c b/src/gallium/state_trackers/egl/common/egl_g3d_api.c
378index 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);
390diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_image.c b/src/gallium/state_trackers/egl/common/egl_g3d_image.c
391index 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
412diff --git a/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h b/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h
413index 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
439diff --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
440index 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
68738647 443@@ -70,8 +70,8 @@ wayland_drm_bufmgr_reference_buffer(void
4469c4e7
AF
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
68738647 454@@ -137,22 +137,31 @@ wayland_drm_bufmgr_unbind_display(struct
4469c4e7
AF
455
456 static struct pipe_resource *
457 wayland_drm_bufmgr_wl_buffer_get_resource(struct native_display *ndpy,
458- struct wl_buffer *buffer)
68738647 459+ struct wl_resourcer *buffer_resource)
4469c4e7 460 {
68738647
JB
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);
4469c4e7
AF
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;
68738647
JB
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);
4469c4e7
AF
480+ struct pipe_resource *resource;
481
68738647 482- if (!wayland_buffer_is_drm(wayland_drm_bufmgr(ndpy->wayland_bufmgr)->wl_server_drm, &buffer->buffer))
4469c4e7
AF
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) {
68738647 491@@ -166,10 +175,10 @@ wayland_drm_bufmgr_query_buffer(struct n
4469c4e7
AF
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;
504diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c
505index a3a0530..f7da79c 100644
506--- a/src/gbm/backends/dri/gbm_dri.c
507+++ b/src/gbm/backends/dri/gbm_dri.c
68738647 508@@ -374,12 +374,13 @@ gbm_dri_bo_import(struct gbm_device *gbm
4469c4e7
AF
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
68738647
JB
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);
4469c4e7
AF
521 return NULL;
522
523 image = wb->driver_buffer;
This page took 0.13848 seconds and 4 git commands to generate.