xref: /aosp_15_r20/external/mesa3d/src/egl/wayland/wayland-drm/wayland-drm.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker #ifndef WAYLAND_DRM_H
2*61046927SAndroid Build Coastguard Worker #define WAYLAND_DRM_H
3*61046927SAndroid Build Coastguard Worker 
4*61046927SAndroid Build Coastguard Worker #include <wayland-server.h>
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker struct wl_display;
7*61046927SAndroid Build Coastguard Worker struct wl_resource;
8*61046927SAndroid Build Coastguard Worker struct wl_drm_buffer;
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker struct wayland_drm_callbacks {
11*61046927SAndroid Build Coastguard Worker    int (*authenticate)(void *user_data, uint32_t id);
12*61046927SAndroid Build Coastguard Worker 
13*61046927SAndroid Build Coastguard Worker    void (*reference_buffer)(void *user_data, uint32_t name, int fd,
14*61046927SAndroid Build Coastguard Worker                             struct wl_drm_buffer *buffer);
15*61046927SAndroid Build Coastguard Worker 
16*61046927SAndroid Build Coastguard Worker    void (*release_buffer)(void *user_data, struct wl_drm_buffer *buffer);
17*61046927SAndroid Build Coastguard Worker 
18*61046927SAndroid Build Coastguard Worker    bool (*is_format_supported)(void *user_data, uint32_t format);
19*61046927SAndroid Build Coastguard Worker };
20*61046927SAndroid Build Coastguard Worker 
21*61046927SAndroid Build Coastguard Worker struct wl_drm {
22*61046927SAndroid Build Coastguard Worker    struct wl_display *display;
23*61046927SAndroid Build Coastguard Worker    struct wl_global *wl_drm_global;
24*61046927SAndroid Build Coastguard Worker 
25*61046927SAndroid Build Coastguard Worker    void *user_data;
26*61046927SAndroid Build Coastguard Worker    char *device_name;
27*61046927SAndroid Build Coastguard Worker    uint32_t flags;
28*61046927SAndroid Build Coastguard Worker 
29*61046927SAndroid Build Coastguard Worker    struct wayland_drm_callbacks callbacks;
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker    struct wl_buffer_interface buffer_interface;
32*61046927SAndroid Build Coastguard Worker };
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker struct wl_drm_buffer {
35*61046927SAndroid Build Coastguard Worker    struct wl_resource *resource;
36*61046927SAndroid Build Coastguard Worker    struct wl_drm *drm;
37*61046927SAndroid Build Coastguard Worker    int32_t width, height;
38*61046927SAndroid Build Coastguard Worker    uint32_t format;
39*61046927SAndroid Build Coastguard Worker    const void *driver_format;
40*61046927SAndroid Build Coastguard Worker    int32_t offset[3];
41*61046927SAndroid Build Coastguard Worker    int32_t stride[3];
42*61046927SAndroid Build Coastguard Worker    void *driver_buffer;
43*61046927SAndroid Build Coastguard Worker };
44*61046927SAndroid Build Coastguard Worker 
45*61046927SAndroid Build Coastguard Worker enum { WAYLAND_DRM_PRIME = 0x01 };
46*61046927SAndroid Build Coastguard Worker 
47*61046927SAndroid Build Coastguard Worker static inline struct wl_drm_buffer *
wayland_drm_buffer_get(struct wl_drm * drm,struct wl_resource * resource)48*61046927SAndroid Build Coastguard Worker wayland_drm_buffer_get(struct wl_drm *drm, struct wl_resource *resource)
49*61046927SAndroid Build Coastguard Worker {
50*61046927SAndroid Build Coastguard Worker    if (resource == NULL)
51*61046927SAndroid Build Coastguard Worker       return NULL;
52*61046927SAndroid Build Coastguard Worker 
53*61046927SAndroid Build Coastguard Worker    if (wl_resource_instance_of(resource, &wl_buffer_interface,
54*61046927SAndroid Build Coastguard Worker                                &drm->buffer_interface))
55*61046927SAndroid Build Coastguard Worker       return wl_resource_get_user_data(resource);
56*61046927SAndroid Build Coastguard Worker    else
57*61046927SAndroid Build Coastguard Worker       return NULL;
58*61046927SAndroid Build Coastguard Worker }
59*61046927SAndroid Build Coastguard Worker 
60*61046927SAndroid Build Coastguard Worker struct wl_drm *
61*61046927SAndroid Build Coastguard Worker wayland_drm_init(struct wl_display *display, char *device_name,
62*61046927SAndroid Build Coastguard Worker                  const struct wayland_drm_callbacks *callbacks, void *user_data,
63*61046927SAndroid Build Coastguard Worker                  uint32_t flags);
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker void
66*61046927SAndroid Build Coastguard Worker wayland_drm_uninit(struct wl_drm *drm);
67*61046927SAndroid Build Coastguard Worker 
68*61046927SAndroid Build Coastguard Worker #endif
69