]>
Commit | Line | Data |
---|---|---|
4469c4e7 AF |
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 | }; | |
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 | ||
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 | ||
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 | } | |
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 * | |
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 | |
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 | |
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; | |
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 | |
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; |