]>
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 | }; | |
97 | @@ -1195,7 +1199,7 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx, | |
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(_EGLDisplay *disp, _EGLContext *ctx, | |
107 | EGLint err; | |
108 | int32_t plane; | |
109 | ||
110 | - if (!wayland_buffer_is_drm(&buffer->buffer)) | |
111 | + buffer = wayland_drm_buffer_get((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, uint32_t name, int fd, | |
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, uint32_t name, int fd, | |
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 | @@ -1607,13 +1612,14 @@ dri2_unbind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *disp, | |
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 | const struct wl_drm_components_descriptor *format; | |
149 | ||
150 | - if (!wayland_buffer_is_drm(&buffer->buffer)) | |
151 | + buffer = wayland_drm_buffer_get(buffer_resource); | |
152 | + if (!buffer) | |
153 | return EGL_FALSE; | |
154 | ||
155 | format = buffer->driver_format; | |
156 | @@ -1622,10 +1628,10 @@ dri2_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *disp, | |
157 | *value = format->components; | |
158 | return EGL_TRUE; | |
159 | case EGL_WIDTH: | |
160 | - *value = buffer->buffer.width; | |
161 | + *value = buffer->width; | |
162 | return EGL_TRUE; | |
163 | case EGL_HEIGHT: | |
164 | - *value = buffer->buffer.height; | |
165 | + *value = buffer->height; | |
166 | return EGL_TRUE; | |
167 | } | |
168 | ||
169 | diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h | |
170 | index 6dfdf94..fba5f81 100644 | |
171 | --- a/src/egl/drivers/dri2/egl_dri2.h | |
172 | +++ b/src/egl/drivers/dri2/egl_dri2.h | |
173 | @@ -37,7 +37,6 @@ | |
174 | ||
175 | #ifdef HAVE_WAYLAND_PLATFORM | |
176 | #include <wayland-client.h> | |
177 | -#include "wayland-drm.h" | |
178 | #include "wayland-egl-priv.h" | |
179 | #endif | |
180 | ||
181 | diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c | |
182 | index 4a9831b..a788295 100644 | |
183 | --- a/src/egl/main/eglapi.c | |
184 | +++ b/src/egl/main/eglapi.c | |
185 | @@ -1571,7 +1571,7 @@ eglUnbindWaylandDisplayWL(EGLDisplay dpy, struct wl_display *display) | |
186 | } | |
187 | ||
188 | EGLBoolean EGLAPIENTRY | |
189 | -eglQueryWaylandBufferWL(EGLDisplay dpy,struct wl_buffer *buffer, | |
190 | +eglQueryWaylandBufferWL(EGLDisplay dpy, struct wl_resource *buffer, | |
191 | EGLint attribute, EGLint *value) | |
192 | { | |
193 | _EGLDisplay *disp = _eglLockDisplay(dpy); | |
194 | diff --git a/src/egl/main/eglapi.h b/src/egl/main/eglapi.h | |
195 | index ee382d0..4a4f976 100644 | |
196 | --- a/src/egl/main/eglapi.h | |
197 | +++ b/src/egl/main/eglapi.h | |
198 | @@ -123,7 +123,7 @@ typedef EGLBoolean (*ExportDRMImageMESA_t)(_EGLDriver *drv, _EGLDisplay *disp, _ | |
199 | struct wl_display; | |
200 | typedef EGLBoolean (*BindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp, struct wl_display *display); | |
201 | typedef EGLBoolean (*UnbindWaylandDisplayWL_t)(_EGLDriver *drv, _EGLDisplay *disp, struct wl_display *display); | |
202 | -typedef EGLBoolean (*QueryWaylandBufferWL_t)(_EGLDriver *drv, _EGLDisplay *displ, struct wl_buffer *buffer, EGLint attribute, EGLint *value); | |
203 | +typedef EGLBoolean (*QueryWaylandBufferWL_t)(_EGLDriver *drv, _EGLDisplay *displ, struct wl_resource *buffer, EGLint attribute, EGLint *value); | |
204 | #endif | |
205 | ||
206 | typedef EGLBoolean (*PostSubBufferNV_t)(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surface, EGLint x, EGLint y, EGLint width, EGLint height); | |
207 | diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c b/src/egl/wayland/wayland-drm/wayland-drm.c | |
208 | index 7e2073a..d317c5e 100644 | |
209 | --- a/src/egl/wayland/wayland-drm/wayland-drm.c | |
210 | +++ b/src/egl/wayland/wayland-drm/wayland-drm.c | |
211 | @@ -37,6 +37,8 @@ | |
212 | #include "wayland-drm.h" | |
213 | #include "wayland-drm-server-protocol.h" | |
214 | ||
215 | +#define MIN(x,y) (((x)<(y))?(x):(y)) | |
216 | + | |
217 | struct wl_drm { | |
218 | struct wl_display *display; | |
219 | ||
220 | @@ -86,8 +88,8 @@ create_buffer(struct wl_client *client, struct wl_resource *resource, | |
221 | } | |
222 | ||
223 | buffer->drm = drm; | |
224 | - buffer->buffer.width = width; | |
225 | - buffer->buffer.height = height; | |
226 | + buffer->width = width; | |
227 | + buffer->height = height; | |
228 | buffer->format = format; | |
229 | buffer->offset[0] = offset0; | |
230 | buffer->stride[0] = stride0; | |
231 | @@ -104,16 +106,17 @@ create_buffer(struct wl_client *client, struct wl_resource *resource, | |
232 | return; | |
233 | } | |
234 | ||
235 | - buffer->buffer.resource.object.id = id; | |
236 | - buffer->buffer.resource.object.interface = &wl_buffer_interface; | |
237 | - buffer->buffer.resource.object.implementation = | |
238 | - (void (**)(void)) &drm_buffer_interface; | |
239 | - buffer->buffer.resource.data = buffer; | |
240 | - | |
241 | - buffer->buffer.resource.destroy = destroy_buffer; | |
242 | - buffer->buffer.resource.client = resource->client; | |
243 | + buffer->resource = | |
244 | + wl_resource_create(client, &wl_buffer_interface, 1, id); | |
245 | + if (!buffer->resource) { | |
246 | + wl_resource_post_no_memory(resource); | |
247 | + free(buffer); | |
248 | + return; | |
249 | + } | |
250 | ||
251 | - wl_client_add_resource(resource->client, &buffer->buffer.resource); | |
252 | + wl_resource_set_implementation(buffer->resource, | |
253 | + (void (**)(void)) &drm_buffer_interface, | |
254 | + buffer, destroy_buffer); | |
255 | } | |
256 | ||
257 | static void | |
258 | @@ -208,8 +211,15 @@ bind_drm(struct wl_client *client, void *data, uint32_t version, uint32_t id) | |
259 | struct wl_resource *resource; | |
260 | uint32_t capabilities; | |
261 | ||
262 | - resource = wl_client_add_object(client, &wl_drm_interface, | |
263 | - &drm_interface, id, data); | |
264 | + resource = wl_resource_create(client, &wl_drm_interface, | |
265 | + MIN(version, 2), id); | |
266 | + if (!resource) { | |
267 | + wl_client_post_no_memory(client); | |
268 | + return; | |
269 | + } | |
270 | + | |
271 | + wl_resource_set_implementation(resource, &drm_interface, data, NULL); | |
272 | + | |
273 | wl_resource_post_event(resource, WL_DRM_DEVICE, drm->device_name); | |
274 | wl_resource_post_event(resource, WL_DRM_FORMAT, | |
275 | WL_DRM_FORMAT_ARGB8888); | |
276 | @@ -232,6 +242,19 @@ bind_drm(struct wl_client *client, void *data, uint32_t version, uint32_t id) | |
277 | wl_resource_post_event(resource, WL_DRM_CAPABILITIES, capabilities); | |
278 | } | |
279 | ||
280 | +struct wl_drm_buffer * | |
281 | +wayland_drm_buffer_get(struct wl_resource *resource) | |
282 | +{ | |
283 | + if (resource == NULL) | |
284 | + return NULL; | |
285 | + | |
286 | + if (wl_resource_instance_of(resource, &wl_buffer_interface, | |
287 | + &drm_buffer_interface)) | |
288 | + return wl_resource_get_user_data(resource); | |
289 | + else | |
290 | + return NULL; | |
291 | +} | |
292 | + | |
293 | struct wl_drm * | |
294 | wayland_drm_init(struct wl_display *display, char *device_name, | |
295 | struct wayland_drm_callbacks *callbacks, void *user_data, | |
296 | @@ -247,7 +270,7 @@ wayland_drm_init(struct wl_display *display, char *device_name, | |
297 | drm->user_data = user_data; | |
298 | drm->flags = flags; | |
299 | ||
300 | - wl_display_add_global(display, &wl_drm_interface, drm, bind_drm); | |
301 | + wl_global_create(display, &wl_drm_interface, 2, drm, bind_drm); | |
302 | ||
303 | return drm; | |
304 | } | |
305 | @@ -262,25 +285,14 @@ wayland_drm_uninit(struct wl_drm *drm) | |
306 | free(drm); | |
307 | } | |
308 | ||
309 | -int | |
310 | -wayland_buffer_is_drm(struct wl_buffer *buffer) | |
311 | -{ | |
312 | - return buffer->resource.object.implementation == | |
313 | - (void (**)(void)) &drm_buffer_interface; | |
314 | -} | |
315 | - | |
316 | uint32_t | |
317 | -wayland_drm_buffer_get_format(struct wl_buffer *buffer_base) | |
318 | +wayland_drm_buffer_get_format(struct wl_drm_buffer *buffer) | |
319 | { | |
320 | - struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) buffer_base; | |
321 | - | |
322 | return buffer->format; | |
323 | } | |
324 | ||
325 | void * | |
326 | -wayland_drm_buffer_get_buffer(struct wl_buffer *buffer_base) | |
327 | +wayland_drm_buffer_get_buffer(struct wl_drm_buffer *buffer) | |
328 | { | |
329 | - struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) buffer_base; | |
330 | - | |
331 | return buffer->driver_buffer; | |
332 | } | |
333 | diff --git a/src/egl/wayland/wayland-drm/wayland-drm.h b/src/egl/wayland/wayland-drm/wayland-drm.h | |
334 | index 335073a..ca04882 100644 | |
335 | --- a/src/egl/wayland/wayland-drm/wayland-drm.h | |
336 | +++ b/src/egl/wayland/wayland-drm/wayland-drm.h | |
337 | @@ -70,8 +70,9 @@ enum wl_drm_format { | |
338 | struct wl_drm; | |
339 | ||
340 | struct wl_drm_buffer { | |
341 | - struct wl_buffer buffer; | |
342 | + struct wl_resource *resource; | |
343 | struct wl_drm *drm; | |
344 | + int32_t width, height; | |
345 | uint32_t format; | |
346 | const void *driver_format; | |
347 | int32_t offset[3]; | |
348 | @@ -90,6 +91,9 @@ struct wayland_drm_callbacks { | |
349 | ||
350 | enum { WAYLAND_DRM_PRIME = 0x01 }; | |
351 | ||
352 | +struct wl_drm_buffer * | |
353 | +wayland_drm_buffer_get(struct wl_resource *resource); | |
354 | + | |
355 | struct wl_drm * | |
356 | wayland_drm_init(struct wl_display *display, char *device_name, | |
357 | struct wayland_drm_callbacks *callbacks, void *user_data, | |
358 | @@ -98,13 +102,10 @@ wayland_drm_init(struct wl_display *display, char *device_name, | |
359 | void | |
360 | wayland_drm_uninit(struct wl_drm *drm); | |
361 | ||
362 | -int | |
363 | -wayland_buffer_is_drm(struct wl_buffer *buffer); | |
364 | - | |
365 | uint32_t | |
366 | -wayland_drm_buffer_get_format(struct wl_buffer *buffer_base); | |
367 | +wayland_drm_buffer_get_format(struct wl_drm_buffer *buffer); | |
368 | ||
369 | void * | |
370 | -wayland_drm_buffer_get_buffer(struct wl_buffer *buffer); | |
371 | +wayland_drm_buffer_get_buffer(struct wl_drm_buffer *buffer); | |
372 | ||
373 | #endif | |
374 | diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_api.c b/src/gallium/state_trackers/egl/common/egl_g3d_api.c | |
375 | index 59187a9..46a3245 100644 | |
376 | --- a/src/gallium/state_trackers/egl/common/egl_g3d_api.c | |
377 | +++ b/src/gallium/state_trackers/egl/common/egl_g3d_api.c | |
378 | @@ -874,7 +874,7 @@ egl_g3d_unbind_wayland_display_wl(_EGLDriver *drv, _EGLDisplay *dpy, | |
379 | ||
380 | static EGLBoolean | |
381 | egl_g3d_query_wayland_buffer_wl(_EGLDriver *drv, _EGLDisplay *dpy, | |
382 | - struct wl_buffer *buffer, | |
383 | + struct wl_resource *buffer, | |
384 | EGLint attribute, EGLint *value) | |
385 | { | |
386 | struct egl_g3d_display *gdpy = egl_g3d_display(dpy); | |
387 | diff --git a/src/gallium/state_trackers/egl/common/egl_g3d_image.c b/src/gallium/state_trackers/egl/common/egl_g3d_image.c | |
388 | index aa1980b..c459dc3 100644 | |
389 | --- a/src/gallium/state_trackers/egl/common/egl_g3d_image.c | |
390 | +++ b/src/gallium/state_trackers/egl/common/egl_g3d_image.c | |
391 | @@ -183,7 +183,7 @@ egl_g3d_reference_drm_buffer(_EGLDisplay *dpy, EGLint name, | |
392 | #ifdef EGL_WL_bind_wayland_display | |
393 | ||
394 | static struct pipe_resource * | |
395 | -egl_g3d_reference_wl_buffer(_EGLDisplay *dpy, struct wl_buffer *buffer, | |
396 | +egl_g3d_reference_wl_buffer(_EGLDisplay *dpy, struct wl_resource *buffer, | |
397 | _EGLImage *img, const EGLint *attribs) | |
398 | { | |
399 | struct egl_g3d_display *gdpy = egl_g3d_display(dpy); | |
400 | @@ -253,7 +253,7 @@ egl_g3d_create_image(_EGLDriver *drv, _EGLDisplay *dpy, _EGLContext *ctx, | |
401 | #ifdef EGL_WL_bind_wayland_display | |
402 | case EGL_WAYLAND_BUFFER_WL: | |
403 | ptex = egl_g3d_reference_wl_buffer(dpy, | |
404 | - (struct wl_buffer *) buffer, &gimg->base, attribs); | |
405 | + (struct wl_resource *) buffer, &gimg->base, attribs); | |
406 | break; | |
407 | #endif | |
408 | #ifdef EGL_ANDROID_image_native_buffer | |
409 | diff --git a/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h b/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h | |
410 | index dd27828..eb324bf 100644 | |
411 | --- a/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h | |
412 | +++ b/src/gallium/state_trackers/egl/common/native_wayland_bufmgr.h | |
413 | @@ -27,7 +27,7 @@ | |
414 | ||
415 | struct native_display; | |
416 | struct wl_display; | |
417 | -struct wl_buffer; | |
418 | +struct wl_resource; | |
419 | struct pipe_resource; | |
420 | ||
421 | struct native_display_wayland_bufmgr { | |
422 | @@ -38,11 +38,11 @@ struct native_display_wayland_bufmgr { | |
423 | struct wl_display *wl_dpy); | |
424 | ||
425 | struct pipe_resource *(*buffer_get_resource)(struct native_display *ndpy, | |
426 | - struct wl_buffer *buffer); | |
427 | + struct wl_resource *buffer); | |
428 | ||
429 | ||
430 | boolean (*query_buffer)(struct native_display *ndpy, | |
431 | - struct wl_buffer *buffer, | |
432 | + struct wl_resource *buffer, | |
433 | int attribute, int *value); | |
434 | }; | |
435 | ||
436 | 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 | |
437 | index 1603a3a..9b69cb9 100644 | |
438 | --- a/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr.c | |
439 | +++ b/src/gallium/state_trackers/egl/common/native_wayland_drm_bufmgr.c | |
440 | @@ -70,8 +70,8 @@ wayland_drm_bufmgr_reference_buffer(void *user_data, uint32_t name, int fd, | |
441 | templ.target = PIPE_TEXTURE_2D; | |
442 | templ.format = pf; | |
443 | templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW; | |
444 | - templ.width0 = buffer->buffer.width; | |
445 | - templ.height0 = buffer->buffer.height; | |
446 | + templ.width0 = buffer->width; | |
447 | + templ.height0 = buffer->height; | |
448 | templ.depth0 = 1; | |
449 | templ.array_size = 1; | |
450 | ||
451 | @@ -137,22 +137,29 @@ wayland_drm_bufmgr_unbind_display(struct native_display *ndpy, | |
452 | ||
453 | static struct pipe_resource * | |
454 | wayland_drm_bufmgr_wl_buffer_get_resource(struct native_display *ndpy, | |
455 | - struct wl_buffer *buffer) | |
456 | + struct wl_resource *buffer_resource) | |
457 | { | |
458 | + struct wl_drm_buffer *buffer = wayland_drm_buffer_get(buffer_resource); | |
459 | + | |
460 | + if (!buffer) | |
461 | + return NULL; | |
462 | + | |
463 | return wayland_drm_buffer_get_buffer(buffer); | |
464 | } | |
465 | ||
466 | static EGLBoolean | |
467 | wayland_drm_bufmgr_query_buffer(struct native_display *ndpy, | |
468 | - struct wl_buffer *_buffer, | |
469 | + struct wl_resource *buffer_resource, | |
470 | EGLint attribute, EGLint *value) | |
471 | { | |
472 | - struct wl_drm_buffer *buffer = (struct wl_drm_buffer *) _buffer; | |
473 | - struct pipe_resource *resource = buffer->driver_buffer; | |
474 | + struct wl_drm_buffer *buffer = wayland_drm_buffer_get(buffer_resource); | |
475 | + struct pipe_resource *resource; | |
476 | ||
477 | - if (!wayland_buffer_is_drm(&buffer->buffer)) | |
478 | + if (!buffer) | |
479 | return EGL_FALSE; | |
480 | ||
481 | + resource = buffer->driver_buffer; | |
482 | + | |
483 | switch (attribute) { | |
484 | case EGL_TEXTURE_FORMAT: | |
485 | switch (resource->format) { | |
486 | @@ -166,10 +173,10 @@ wayland_drm_bufmgr_query_buffer(struct native_display *ndpy, | |
487 | return EGL_FALSE; | |
488 | } | |
489 | case EGL_WIDTH: | |
490 | - *value = buffer->buffer.width; | |
491 | + *value = buffer->width; | |
492 | return EGL_TRUE; | |
493 | case EGL_HEIGHT: | |
494 | - *value = buffer->buffer.height; | |
495 | + *value = buffer->height; | |
496 | return EGL_TRUE; | |
497 | default: | |
498 | return EGL_FALSE; | |
499 | diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c | |
500 | index a3a0530..f7da79c 100644 | |
501 | --- a/src/gbm/backends/dri/gbm_dri.c | |
502 | +++ b/src/gbm/backends/dri/gbm_dri.c | |
503 | @@ -374,9 +374,10 @@ gbm_dri_bo_import(struct gbm_device *gbm, | |
504 | #if HAVE_WAYLAND_PLATFORM | |
505 | case GBM_BO_IMPORT_WL_BUFFER: | |
506 | { | |
507 | - struct wl_drm_buffer *wb = (struct wl_drm_buffer *) buffer; | |
508 | + struct wl_drm_buffer *wb; | |
509 | ||
510 | - if (!wayland_buffer_is_drm(buffer)) | |
511 | + wb = wayland_drm_buffer_get((struct wl_resource *) buffer); | |
512 | + if (!wb) | |
513 | return NULL; | |
514 | ||
515 | image = wb->driver_buffer; | |
516 | -- | |
517 | 1.8.4 | |
518 |