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->stride[0];
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);