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