diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/backend/drm/renderer.h | 3 | ||||
-rw-r--r-- | include/wlr/interfaces/wlr_output.h | 2 | ||||
-rw-r--r-- | include/wlr/render/dmabuf.h | 36 | ||||
-rw-r--r-- | include/wlr/render/egl.h | 8 | ||||
-rw-r--r-- | include/wlr/render/gles2.h | 2 | ||||
-rw-r--r-- | include/wlr/render/interface.h | 8 | ||||
-rw-r--r-- | include/wlr/render/wlr_renderer.h | 2 | ||||
-rw-r--r-- | include/wlr/render/wlr_texture.h | 6 | ||||
-rw-r--r-- | include/wlr/types/wlr_export_dmabuf_v1.h | 4 | ||||
-rw-r--r-- | include/wlr/types/wlr_linux_dmabuf.h | 36 | ||||
-rw-r--r-- | include/wlr/types/wlr_output.h | 2 |
11 files changed, 57 insertions, 52 deletions
diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h index 00e26976..575758de 100644 --- a/include/backend/drm/renderer.h +++ b/include/backend/drm/renderer.h @@ -52,7 +52,6 @@ struct gbm_bo *get_drm_surface_front(struct wlr_drm_surface *surf); void post_drm_surface(struct wlr_drm_surface *surf); struct gbm_bo *copy_drm_surface_mgpu(struct wlr_drm_surface *dest, struct gbm_bo *src); -bool export_drm_bo(struct gbm_bo *bo, - struct wlr_dmabuf_buffer_attribs *attribs); +bool export_drm_bo(struct gbm_bo *bo, struct wlr_dmabuf_attributes *attribs); #endif diff --git a/include/wlr/interfaces/wlr_output.h b/include/wlr/interfaces/wlr_output.h index d39e4edc..8f87408a 100644 --- a/include/wlr/interfaces/wlr_output.h +++ b/include/wlr/interfaces/wlr_output.h @@ -24,7 +24,7 @@ struct wlr_output_impl { uint32_t size, uint16_t *r, uint16_t *g, uint16_t *b); uint32_t (*get_gamma_size)(struct wlr_output *output); bool (*export_dmabuf)(struct wlr_output *output, - struct wlr_dmabuf_buffer_attribs *attribs); + struct wlr_dmabuf_attributes *attribs); }; void wlr_output_init(struct wlr_output *output, struct wlr_backend *backend, diff --git a/include/wlr/render/dmabuf.h b/include/wlr/render/dmabuf.h new file mode 100644 index 00000000..78f8c2eb --- /dev/null +++ b/include/wlr/render/dmabuf.h @@ -0,0 +1,36 @@ +#ifndef WLR_RENDER_DMABUF_H +#define WLR_RENDER_DMABUF_H + +#include <stdint.h> + +// 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 + +#define WLR_DMABUF_MAX_PLANES 4 + +enum wlr_dmabuf_attributes_flags { + WLR_DMABUF_ATTRIBUTES_FLAGS_Y_INVERT = 1, + WLR_DMABUF_ATTRIBUTES_FLAGS_INTERLACED = 2, + WLR_DMABUF_ATTRIBUTES_FLAGS_BOTTOM_FIRST = 4, +}; + +struct wlr_dmabuf_attributes { + int32_t width, height; + uint32_t format; + uint32_t flags; // enum wlr_dmabuf_attributes_flags + uint64_t modifier; + + int n_planes; + uint32_t offset[WLR_DMABUF_MAX_PLANES]; + uint32_t stride[WLR_DMABUF_MAX_PLANES]; + int fd[WLR_DMABUF_MAX_PLANES]; +}; + +/** + * Closes all file descriptors in the DMA-BUF attributes. + */ +void wlr_dmabuf_attributes_finish(struct wlr_dmabuf_attributes *attribs); + +#endif diff --git a/include/wlr/render/egl.h b/include/wlr/render/egl.h index 17fef7ed..39b1d3d9 100644 --- a/include/wlr/render/egl.h +++ b/include/wlr/render/egl.h @@ -6,7 +6,7 @@ #include <pixman.h> #include <stdbool.h> #include <wayland-server.h> -#include <wlr/types/wlr_linux_dmabuf.h> +#include <wlr/render/dmabuf.h> struct wlr_egl { EGLDisplay display; @@ -66,14 +66,14 @@ EGLImageKHR wlr_egl_create_image_from_wl_drm(struct wlr_egl *egl, * of the dmabuf with wlr_egl_check_import_dmabuf once first. */ EGLImageKHR wlr_egl_create_image_from_dmabuf(struct wlr_egl *egl, - struct wlr_dmabuf_buffer_attribs *attributes); + struct wlr_dmabuf_attributes *attributes); /** * Try to import the given dmabuf. On success return true false otherwise. * If this succeeds the dmabuf can be used for rendering on a texture */ bool wlr_egl_check_import_dmabuf(struct wlr_egl *egl, - struct wlr_dmabuf_buffer *dmabuf); + struct wlr_dmabuf_attributes *attributes); /** * Get the available dmabuf formats @@ -88,7 +88,7 @@ int wlr_egl_get_dmabuf_modifiers(struct wlr_egl *egl, int format, bool wlr_egl_export_image_to_dmabuf(struct wlr_egl *egl, EGLImageKHR image, int32_t width, int32_t height, uint32_t flags, - struct wlr_dmabuf_buffer_attribs *attribs); + struct wlr_dmabuf_attributes *attribs); /** * Destroys an EGL image created with the given wlr_egl. diff --git a/include/wlr/render/gles2.h b/include/wlr/render/gles2.h index 65bb36c1..866c6658 100644 --- a/include/wlr/render/gles2.h +++ b/include/wlr/render/gles2.h @@ -14,6 +14,6 @@ struct wlr_texture *wlr_gles2_texture_from_pixels(struct wlr_egl *egl, struct wlr_texture *wlr_gles2_texture_from_wl_drm(struct wlr_egl *egl, struct wl_resource *data); struct wlr_texture *wlr_gles2_texture_from_dmabuf(struct wlr_egl *egl, - struct wlr_dmabuf_buffer_attribs *attribs); + struct wlr_dmabuf_attributes *attribs); #endif diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h index 1f075e81..af4bc75e 100644 --- a/include/wlr/render/interface.h +++ b/include/wlr/render/interface.h @@ -8,8 +8,8 @@ #include <wlr/render/wlr_renderer.h> #include <wlr/render/wlr_texture.h> #include <wlr/types/wlr_box.h> -#include <wlr/types/wlr_linux_dmabuf.h> #include <wlr/types/wlr_output.h> +#include <wlr/render/dmabuf.h> struct wlr_renderer_impl { void (*begin)(struct wlr_renderer *renderer, uint32_t width, @@ -31,7 +31,7 @@ struct wlr_renderer_impl { void (*wl_drm_buffer_get_size)(struct wlr_renderer *renderer, struct wl_resource *buffer, int *width, int *height); bool (*check_import_dmabuf)(struct wlr_renderer *renderer, - struct wlr_dmabuf_buffer *dmabuf); + struct wlr_dmabuf_attributes *attribs); int (*get_dmabuf_formats)(struct wlr_renderer *renderer, int **formats); int (*get_dmabuf_modifiers)(struct wlr_renderer *renderer, int format, uint64_t **modifiers); @@ -47,7 +47,7 @@ struct wlr_renderer_impl { struct wlr_texture *(*texture_from_wl_drm)(struct wlr_renderer *renderer, struct wl_resource *data); struct wlr_texture *(*texture_from_dmabuf)(struct wlr_renderer *renderer, - struct wlr_dmabuf_buffer_attribs *attribs); + struct wlr_dmabuf_attributes *attribs); void (*destroy)(struct wlr_renderer *renderer); void (*init_wl_display)(struct wlr_renderer *renderer, struct wl_display *wl_display); @@ -63,7 +63,7 @@ struct wlr_texture_impl { uint32_t height, uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, const void *data); bool (*to_dmabuf)(struct wlr_texture *texture, - struct wlr_dmabuf_buffer_attribs *attribs); + struct wlr_dmabuf_attributes *attribs); void (*destroy)(struct wlr_texture *texture); }; diff --git a/include/wlr/render/wlr_renderer.h b/include/wlr/render/wlr_renderer.h index 039bb66e..dd62944f 100644 --- a/include/wlr/render/wlr_renderer.h +++ b/include/wlr/render/wlr_renderer.h @@ -89,7 +89,7 @@ int wlr_renderer_get_dmabuf_modifiers(struct wlr_renderer *renderer, int format, * If this succeeds the dmabuf can be used for rendering on a texture */ bool wlr_renderer_check_import_dmabuf(struct wlr_renderer *renderer, - struct wlr_dmabuf_buffer *dmabuf); + struct wlr_dmabuf_attributes *attributes); /** * Reads out of pixels of the currently bound surface into data. `stride` is in * bytes. diff --git a/include/wlr/render/wlr_texture.h b/include/wlr/render/wlr_texture.h index 481b2a37..785f4fc6 100644 --- a/include/wlr/render/wlr_texture.h +++ b/include/wlr/render/wlr_texture.h @@ -5,7 +5,7 @@ #include <EGL/eglext.h> #include <stdint.h> #include <wayland-server-protocol.h> -#include <wlr/types/wlr_linux_dmabuf.h> +#include <wlr/render/dmabuf.h> struct wlr_renderer; struct wlr_texture_impl; @@ -33,7 +33,7 @@ struct wlr_texture *wlr_texture_from_wl_drm(struct wlr_renderer *renderer, * Create a new texture from a DMA-BUF. The returned texture is immutable. */ struct wlr_texture *wlr_texture_from_dmabuf(struct wlr_renderer *renderer, - struct wlr_dmabuf_buffer_attribs *attribs); + struct wlr_dmabuf_attributes *attribs); /** * Get the texture width and height. @@ -49,7 +49,7 @@ bool wlr_texture_write_pixels(struct wlr_texture *texture, const void *data); bool wlr_texture_to_dmabuf(struct wlr_texture *texture, - struct wlr_dmabuf_buffer_attribs *attribs); + struct wlr_dmabuf_attributes *attribs); /** * Destroys this wlr_texture. diff --git a/include/wlr/types/wlr_export_dmabuf_v1.h b/include/wlr/types/wlr_export_dmabuf_v1.h index 218b1635..a094b3de 100644 --- a/include/wlr/types/wlr_export_dmabuf_v1.h +++ b/include/wlr/types/wlr_export_dmabuf_v1.h @@ -2,7 +2,7 @@ #define WLR_TYPES_WLR_EXPORT_DMABUF_V1_H #include <wayland-server.h> -#include <wlr/types/wlr_linux_dmabuf.h> +#include <wlr/render/dmabuf.h> struct wlr_export_dmabuf_manager_v1; @@ -11,7 +11,7 @@ struct wlr_export_dmabuf_frame_v1 { struct wlr_export_dmabuf_manager_v1 *manager; struct wl_list link; - struct wlr_dmabuf_buffer_attribs attribs; + struct wlr_dmabuf_attributes attribs; struct wlr_output *output; struct wl_listener output_swap_buffers; diff --git a/include/wlr/types/wlr_linux_dmabuf.h b/include/wlr/types/wlr_linux_dmabuf.h index 1677398b..ea219020 100644 --- a/include/wlr/types/wlr_linux_dmabuf.h +++ b/include/wlr/types/wlr_linux_dmabuf.h @@ -1,49 +1,19 @@ #ifndef WLR_TYPES_WLR_LINUX_DMABUF_H #define WLR_TYPES_WLR_LINUX_DMABUF_H -#define WLR_LINUX_DMABUF_MAX_PLANES 4 - #include <stdint.h> #include <wayland-server-protocol.h> - -/* 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 - -enum { - WLR_DMABUF_BUFFER_ATTRIBS_FLAGS_Y_INVERT = 1, - WLR_DMABUF_BUFFER_ATTRIBS_FLAGS_INTERLACED = 2, - WLR_DMABUF_BUFFER_ATTRIBS_FLAGS_BOTTOM_FIRST = 4, -}; - -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, height; - uint32_t format; - uint32_t flags; -}; +#include <wlr/render/dmabuf.h> struct wlr_dmabuf_buffer { struct wlr_renderer *renderer; struct wl_resource *buffer_resource; struct wl_resource *params_resource; - struct wlr_dmabuf_buffer_attribs attributes; + struct wlr_dmabuf_attributes attributes; + bool has_modifier; }; /** - * Closes all file descriptors in the DMA-BUF attributes. - */ -void wlr_dmabuf_buffer_attribs_finish( - struct wlr_dmabuf_buffer_attribs *attribs); - -/** * Returns true if the given resource was created via the linux-dmabuf * buffer protocol, false otherwise */ diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h index 96c98dc3..158d174e 100644 --- a/include/wlr/types/wlr_output.h +++ b/include/wlr/types/wlr_output.h @@ -170,7 +170,7 @@ void wlr_output_set_gamma(struct wlr_output *output, uint32_t size, uint16_t *r, uint16_t *g, uint16_t *b); uint32_t wlr_output_get_gamma_size(struct wlr_output *output); bool wlr_output_export_dmabuf(struct wlr_output *output, - struct wlr_dmabuf_buffer_attribs *attribs); + struct wlr_dmabuf_attributes *attribs); void wlr_output_set_fullscreen_surface(struct wlr_output *output, struct wlr_surface *surface); struct wlr_output *wlr_output_from_resource(struct wl_resource *resource); |