Merge remote-tracking branch 'mareko/r300g-draw-instanced' into pipe-video
[mesa.git] / src / gallium / state_trackers / egl / common / native_wayland_drm_bufmgr_helper.c
1 #include <stdint.h>
2 #include <string.h>
3
4 #include "native.h"
5 #include "util/u_inlines.h"
6 #include "state_tracker/drm_driver.h"
7
8 #ifdef HAVE_WAYLAND_BACKEND
9
10 #include <wayland-server.h>
11 #include <wayland-drm-server-protocol.h>
12
13 #include "native_wayland_drm_bufmgr_helper.h"
14
15 void *
16 egl_g3d_wl_drm_helper_reference_buffer(void *user_data, uint32_t name,
17 int32_t width, int32_t height,
18 uint32_t stride,
19 struct wl_visual *visual)
20 {
21 struct native_display *ndpy = user_data;
22 struct pipe_resource templ;
23 struct winsys_handle wsh;
24 enum pipe_format format = PIPE_FORMAT_B8G8R8A8_UNORM;
25
26 memset(&templ, 0, sizeof(templ));
27 templ.target = PIPE_TEXTURE_2D;
28 templ.format = format;
29 templ.bind = PIPE_BIND_RENDER_TARGET | PIPE_BIND_SAMPLER_VIEW;
30 templ.width0 = width;
31 templ.height0 = height;
32 templ.depth0 = 1;
33 templ.array_size = 1;
34
35 memset(&wsh, 0, sizeof(wsh));
36 wsh.handle = name;
37 wsh.stride = stride;
38
39 return ndpy->screen->resource_from_handle(ndpy->screen, &templ, &wsh);
40 }
41
42 void
43 egl_g3d_wl_drm_helper_unreference_buffer(void *user_data, void *buffer)
44 {
45 struct pipe_resource *resource = buffer;
46
47 pipe_resource_reference(&resource, NULL);
48 }
49
50 struct pipe_resource *
51 egl_g3d_wl_drm_common_wl_buffer_get_resource(struct native_display *ndpy,
52 struct wl_buffer *buffer)
53 {
54 return wayland_drm_buffer_get_buffer(buffer);
55 }
56
57 #endif