5 #include "util/u_inlines.h"
6 #include "state_tracker/drm_driver.h"
8 #ifdef HAVE_WAYLAND_BACKEND
10 #include <wayland-server.h>
11 #include <wayland-drm-server-protocol.h>
13 #include "native_wayland_drm_bufmgr_helper.h"
16 egl_g3d_wl_drm_helper_reference_buffer(void *user_data
, uint32_t name
,
17 struct wl_drm_buffer
*buffer
)
19 struct native_display
*ndpy
= user_data
;
20 struct pipe_resource templ
;
21 struct winsys_handle wsh
;
24 switch (buffer
->format
) {
25 case WL_DRM_FORMAT_ARGB8888
:
26 pf
= PIPE_FORMAT_B8G8R8A8_UNORM
;
28 case WL_DRM_FORMAT_XRGB8888
:
29 pf
= PIPE_FORMAT_B8G8R8X8_UNORM
;
32 pf
= PIPE_FORMAT_NONE
;
36 if (pf
== PIPE_FORMAT_NONE
)
39 memset(&templ
, 0, sizeof(templ
));
40 templ
.target
= PIPE_TEXTURE_2D
;
42 templ
.bind
= PIPE_BIND_RENDER_TARGET
| PIPE_BIND_SAMPLER_VIEW
;
43 templ
.width0
= buffer
->buffer
.width
;
44 templ
.height0
= buffer
->buffer
.height
;
48 memset(&wsh
, 0, sizeof(wsh
));
50 wsh
.stride
= buffer
->stride0
;
52 buffer
->driver_buffer
=
53 ndpy
->screen
->resource_from_handle(ndpy
->screen
, &templ
, &wsh
);
57 egl_g3d_wl_drm_helper_unreference_buffer(void *user_data
,
58 struct wl_drm_buffer
*buffer
)
60 struct pipe_resource
*resource
= buffer
->driver_buffer
;
62 pipe_resource_reference(&resource
, NULL
);
65 struct pipe_resource
*
66 egl_g3d_wl_drm_common_wl_buffer_get_resource(struct native_display
*ndpy
,
67 struct wl_buffer
*buffer
)
69 return wayland_drm_buffer_get_buffer(buffer
);