#ifndef WLR_TYPES_WLR_LINUX_DMABUF_H #define WLR_TYPES_WLR_LINUX_DMABUF_H #define WLR_LINUX_DMABUF_MAX_PLANES 4 #include #include /* So we don't have to pull in linux specific drm headers */ #ifndef DRM_FORMAT_MOD_INVALID #define DRM_FORMAT_MOD_INVALID ((1ULL<<56) - 1) #endif struct wlr_dmabuf_buffer_attribs { /* set via params_add */ int n_planes; uint32_t offset[WLR_LINUX_DMABUF_MAX_PLANES]; uint32_t stride[WLR_LINUX_DMABUF_MAX_PLANES]; uint64_t modifier[WLR_LINUX_DMABUF_MAX_PLANES]; int fd[WLR_LINUX_DMABUF_MAX_PLANES]; /* set via params_create */ int32_t width; int32_t height; uint32_t format; uint32_t flags; /* enum zlinux_buffer_params_flags */ }; struct wlr_dmabuf_buffer { struct wlr_egl *egl; struct wl_resource *buffer_resource; struct wl_resource *params_resource; struct wlr_dmabuf_buffer_attribs attributes; }; /** * Returns true if the given resource was created via the linux-dmabuf * buffer protocol, false otherwise */ bool wlr_dmabuf_resource_is_buffer(struct wl_resource *buffer_resource); /** * Returns the wlr_dmabuf_buffer if the given resource was created * via the linux-dmabuf buffer protocol */ struct wlr_dmabuf_buffer *wlr_dmabuf_buffer_from_buffer_resource( struct wl_resource *buffer_resource); /** * Returns the wlr_dmabuf_buffer if the given resource was created * via the linux-dmabuf params protocol */ struct wlr_dmabuf_buffer *wlr_dmabuf_buffer_from_params_resource( struct wl_resource *params_resource); /** * Returns true if the given dmabuf has y-axis inverted, false otherwise */ bool wlr_dmabuf_buffer_has_inverted_y(struct wlr_dmabuf_buffer *dmabuf); /* the protocol interface */ struct wlr_linux_dmabuf { struct wl_global *wl_global; struct wl_listener display_destroy; struct wlr_egl *egl; }; /** * Create linux-dmabuf interface */ struct wlr_linux_dmabuf *wlr_linux_dmabuf_create(struct wl_display *display, struct wlr_egl *egl); /** * Destroy the linux-dmabuf interface */ void wlr_linux_dmabuf_destroy(struct wlr_linux_dmabuf *linux_dmabuf); /** * Returns the wlr_linux_dmabuf if the given resource was created * via the linux_dmabuf protocol */ struct wlr_linux_dmabuf *wlr_linux_dmabuf_from_resource( struct wl_resource *resource); #endif