/* Generated by wayland-scanner 1.23.0 */ #ifndef LINUX_DMABUF_UNSTABLE_V1_SERVER_PROTOCOL_H #define LINUX_DMABUF_UNSTABLE_V1_SERVER_PROTOCOL_H #include <stdint.h> #include <stddef.h> #include "wayland-server.h" #ifdef __cplusplus extern "C" { #endif struct wl_client; struct wl_resource; /** * @page page_linux_dmabuf_unstable_v1 The linux_dmabuf_unstable_v1 protocol * @section page_ifaces_linux_dmabuf_unstable_v1 Interfaces * - @subpage page_iface_zwp_linux_dmabuf_v1 - factory for creating dmabuf-based wl_buffers * - @subpage page_iface_zwp_linux_buffer_params_v1 - parameters for creating a dmabuf-based wl_buffer * - @subpage page_iface_zwp_linux_dmabuf_feedback_v1 - dmabuf feedback * @section page_copyright_linux_dmabuf_unstable_v1 Copyright * <pre> * * Copyright © 2014, 2015 Collabora, Ltd. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * </pre> */ struct wl_buffer; struct wl_surface; struct zwp_linux_buffer_params_v1; struct zwp_linux_dmabuf_feedback_v1; struct zwp_linux_dmabuf_v1; #ifndef ZWP_LINUX_DMABUF_V1_INTERFACE #define ZWP_LINUX_DMABUF_V1_INTERFACE /** * @page page_iface_zwp_linux_dmabuf_v1 zwp_linux_dmabuf_v1 * @section page_iface_zwp_linux_dmabuf_v1_desc Description * * Following the interfaces from: * https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_image_dma_buf_import.txt * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt * and the Linux DRM sub-system's AddFb2 ioctl. * * This interface offers ways to create generic dmabuf-based wl_buffers. * * Clients can use the get_surface_feedback request to get dmabuf feedback * for a particular surface. If the client wants to retrieve feedback not * tied to a surface, they can use the get_default_feedback request. * * The following are required from clients: * * - Clients must ensure that either all data in the dma-buf is * coherent for all subsequent read access or that coherency is * correctly handled by the underlying kernel-side dma-buf * implementation. * * - Don't make any more attachments after sending the buffer to the * compositor. Making more attachments later increases the risk of * the compositor not being able to use (re-import) an existing * dmabuf-based wl_buffer. * * The underlying graphics stack must ensure the following: * * - The dmabuf file descriptors relayed to the server will stay valid * for the whole lifetime of the wl_buffer. This means the server may * at any time use those fds to import the dmabuf into any kernel * sub-system that might accept it. * * However, when the underlying graphics stack fails to deliver the * promise, because of e.g. a device hot-unplug which raises internal * errors, after the wl_buffer has been successfully created the * compositor must not raise protocol errors to the client when dmabuf * import later fails. * * To create a wl_buffer from one or more dmabufs, a client creates a * zwp_linux_dmabuf_params_v1 object with a zwp_linux_dmabuf_v1.create_params * request. All planes required by the intended format are added with * the 'add' request. Finally, a 'create' or 'create_immed' request is * issued, which has the following outcome depending on the import success. * * The 'create' request, * - on success, triggers a 'created' event which provides the final * wl_buffer to the client. * - on failure, triggers a 'failed' event to convey that the server * cannot use the dmabufs received from the client. * * For the 'create_immed' request, * - on success, the server immediately imports the added dmabufs to * create a wl_buffer. No event is sent from the server in this case. * - on failure, the server can choose to either: * - terminate the client by raising a fatal error. * - mark the wl_buffer as failed, and send a 'failed' event to the * client. If the client uses a failed wl_buffer as an argument to any * request, the behaviour is compositor implementation-defined. * * For all DRM formats and unless specified in another protocol extension, * pre-multiplied alpha is used for pixel values. * * Unless specified otherwise in another protocol extension, implicit * synchronization is used. In other words, compositors and clients must * wait and signal fences implicitly passed via the DMA-BUF's reservation * mechanism. * * Disclaimer: This protocol extension has been marked stable. This copy is * no longer used and only retained for backwards compatibility. The * canonical version can be found in the stable/ directory. * @section page_iface_zwp_linux_dmabuf_v1_api API * See @ref iface_zwp_linux_dmabuf_v1. */ /** * @defgroup iface_zwp_linux_dmabuf_v1 The zwp_linux_dmabuf_v1 interface * * Following the interfaces from: * https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_image_dma_buf_import.txt * https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt * and the Linux DRM sub-system's AddFb2 ioctl. * * This interface offers ways to create generic dmabuf-based wl_buffers. * * Clients can use the get_surface_feedback request to get dmabuf feedback * for a particular surface. If the client wants to retrieve feedback not * tied to a surface, they can use the get_default_feedback request. * * The following are required from clients: * * - Clients must ensure that either all data in the dma-buf is * coherent for all subsequent read access or that coherency is * correctly handled by the underlying kernel-side dma-buf * implementation. * * - Don't make any more attachments after sending the buffer to the * compositor. Making more attachments later increases the risk of * the compositor not being able to use (re-import) an existing * dmabuf-based wl_buffer. * * The underlying graphics stack must ensure the following: * * - The dmabuf file descriptors relayed to the server will stay valid * for the whole lifetime of the wl_buffer. This means the server may * at any time use those fds to import the dmabuf into any kernel * sub-system that might accept it. * * However, when the underlying graphics stack fails to deliver the * promise, because of e.g. a device hot-unplug which raises internal * errors, after the wl_buffer has been successfully created the * compositor must not raise protocol errors to the client when dmabuf * import later fails. * * To create a wl_buffer from one or more dmabufs, a client creates a * zwp_linux_dmabuf_params_v1 object with a zwp_linux_dmabuf_v1.create_params * request. All planes required by the intended format are added with * the 'add' request. Finally, a 'create' or 'create_immed' request is * issued, which has the following outcome depending on the import success. * * The 'create' request, * - on success, triggers a 'created' event which provides the final * wl_buffer to the client. * - on failure, triggers a 'failed' event to convey that the server * cannot use the dmabufs received from the client. * * For the 'create_immed' request, * - on success, the server immediately imports the added dmabufs to * create a wl_buffer. No event is sent from the server in this case. * - on failure, the server can choose to either: * - terminate the client by raising a fatal error. * - mark the wl_buffer as failed, and send a 'failed' event to the * client. If the client uses a failed wl_buffer as an argument to any * request, the behaviour is compositor implementation-defined. * * For all DRM formats and unless specified in another protocol extension, * pre-multiplied alpha is used for pixel values. * * Unless specified otherwise in another protocol extension, implicit * synchronization is used. In other words, compositors and clients must * wait and signal fences implicitly passed via the DMA-BUF's reservation * mechanism. * * Disclaimer: This protocol extension has been marked stable. This copy is * no longer used and only retained for backwards compatibility. The * canonical version can be found in the stable/ directory. */ extern const struct wl_interface zwp_linux_dmabuf_v1_interface; #endif #ifndef ZWP_LINUX_BUFFER_PARAMS_V1_INTERFACE #define ZWP_LINUX_BUFFER_PARAMS_V1_INTERFACE /** * @page page_iface_zwp_linux_buffer_params_v1 zwp_linux_buffer_params_v1 * @section page_iface_zwp_linux_buffer_params_v1_desc Description * * This temporary object is a collection of dmabufs and other * parameters that together form a single logical buffer. The temporary * object may eventually create one wl_buffer unless cancelled by * destroying it before requesting 'create'. * * Single-planar formats only require one dmabuf, however * multi-planar formats may require more than one dmabuf. For all * formats, an 'add' request must be called once per plane (even if the * underlying dmabuf fd is identical). * * You must use consecutive plane indices ('plane_idx' argument for 'add') * from zero to the number of planes used by the drm_fourcc format code. * All planes required by the format must be given exactly once, but can * be given in any order. Each plane index can be set only once. * @section page_iface_zwp_linux_buffer_params_v1_api API * See @ref iface_zwp_linux_buffer_params_v1. */ /** * @defgroup iface_zwp_linux_buffer_params_v1 The zwp_linux_buffer_params_v1 interface * * This temporary object is a collection of dmabufs and other * parameters that together form a single logical buffer. The temporary * object may eventually create one wl_buffer unless cancelled by * destroying it before requesting 'create'. * * Single-planar formats only require one dmabuf, however * multi-planar formats may require more than one dmabuf. For all * formats, an 'add' request must be called once per plane (even if the * underlying dmabuf fd is identical). * * You must use consecutive plane indices ('plane_idx' argument for 'add') * from zero to the number of planes used by the drm_fourcc format code. * All planes required by the format must be given exactly once, but can * be given in any order. Each plane index can be set only once. */ extern const struct wl_interface zwp_linux_buffer_params_v1_interface; #endif #ifndef ZWP_LINUX_DMABUF_FEEDBACK_V1_INTERFACE #define ZWP_LINUX_DMABUF_FEEDBACK_V1_INTERFACE /** * @page page_iface_zwp_linux_dmabuf_feedback_v1 zwp_linux_dmabuf_feedback_v1 * @section page_iface_zwp_linux_dmabuf_feedback_v1_desc Description * * This object advertises dmabuf parameters feedback. This includes the * preferred devices and the supported formats/modifiers. * * The parameters are sent once when this object is created and whenever they * change. The done event is always sent once after all parameters have been * sent. When a single parameter changes, all parameters are re-sent by the * compositor. * * Compositors can re-send the parameters when the current client buffer * allocations are sub-optimal. Compositors should not re-send the * parameters if re-allocating the buffers would not result in a more optimal * configuration. In particular, compositors should avoid sending the exact * same parameters multiple times in a row. * * The tranche_target_device and tranche_formats events are grouped by * tranches of preference. For each tranche, a tranche_target_device, one * tranche_flags and one or more tranche_formats events are sent, followed * by a tranche_done event finishing the list. The tranches are sent in * descending order of preference. All formats and modifiers in the same * tranche have the same preference. * * To send parameters, the compositor sends one main_device event, tranches * (each consisting of one tranche_target_device event, one tranche_flags * event, tranche_formats events and then a tranche_done event), then one * done event. * @section page_iface_zwp_linux_dmabuf_feedback_v1_api API * See @ref iface_zwp_linux_dmabuf_feedback_v1. */ /** * @defgroup iface_zwp_linux_dmabuf_feedback_v1 The zwp_linux_dmabuf_feedback_v1 interface * * This object advertises dmabuf parameters feedback. This includes the * preferred devices and the supported formats/modifiers. * * The parameters are sent once when this object is created and whenever they * change. The done event is always sent once after all parameters have been * sent. When a single parameter changes, all parameters are re-sent by the * compositor. * * Compositors can re-send the parameters when the current client buffer * allocations are sub-optimal. Compositors should not re-send the * parameters if re-allocating the buffers would not result in a more optimal * configuration. In particular, compositors should avoid sending the exact * same parameters multiple times in a row. * * The tranche_target_device and tranche_formats events are grouped by * tranches of preference. For each tranche, a tranche_target_device, one * tranche_flags and one or more tranche_formats events are sent, followed * by a tranche_done event finishing the list. The tranches are sent in * descending order of preference. All formats and modifiers in the same * tranche have the same preference. * * To send parameters, the compositor sends one main_device event, tranches * (each consisting of one tranche_target_device event, one tranche_flags * event, tranche_formats events and then a tranche_done event), then one * done event. */ extern const struct wl_interface zwp_linux_dmabuf_feedback_v1_interface; #endif /** * @ingroup iface_zwp_linux_dmabuf_v1 * @struct zwp_linux_dmabuf_v1_interface */ struct zwp_linux_dmabuf_v1_interface { … }; #define ZWP_LINUX_DMABUF_V1_FORMAT … #define ZWP_LINUX_DMABUF_V1_MODIFIER … /** * @ingroup iface_zwp_linux_dmabuf_v1 */ #define ZWP_LINUX_DMABUF_V1_FORMAT_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_v1 */ #define ZWP_LINUX_DMABUF_V1_MODIFIER_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_v1 */ #define ZWP_LINUX_DMABUF_V1_DESTROY_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_v1 */ #define ZWP_LINUX_DMABUF_V1_CREATE_PARAMS_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_v1 */ #define ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_v1 */ #define ZWP_LINUX_DMABUF_V1_GET_SURFACE_FEEDBACK_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_v1 * Sends an format event to the client owning the resource. * @param resource_ The client's resource * @param format DRM_FORMAT code */ static inline void zwp_linux_dmabuf_v1_send_format(struct wl_resource *resource_, uint32_t format) { … } /** * @ingroup iface_zwp_linux_dmabuf_v1 * Sends an modifier event to the client owning the resource. * @param resource_ The client's resource * @param format DRM_FORMAT code * @param modifier_hi high 32 bits of layout modifier * @param modifier_lo low 32 bits of layout modifier */ static inline void zwp_linux_dmabuf_v1_send_modifier(struct wl_resource *resource_, uint32_t format, uint32_t modifier_hi, uint32_t modifier_lo) { … } #ifndef ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_ENUM #define ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_ENUM enum zwp_linux_buffer_params_v1_error { … }; /** * @ingroup iface_zwp_linux_buffer_params_v1 * Validate a zwp_linux_buffer_params_v1 error value. * * @return true on success, false on error. * @ref zwp_linux_buffer_params_v1_error */ static inline bool zwp_linux_buffer_params_v1_error_is_valid(uint32_t value, uint32_t version) { … } #endif /* ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_ENUM */ #ifndef ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_ENUM #define ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_ENUM enum zwp_linux_buffer_params_v1_flags { … }; /** * @ingroup iface_zwp_linux_buffer_params_v1 * Validate a zwp_linux_buffer_params_v1 flags value. * * @return true on success, false on error. * @ref zwp_linux_buffer_params_v1_flags */ static inline bool zwp_linux_buffer_params_v1_flags_is_valid(uint32_t value, uint32_t version) { … } #endif /* ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_ENUM */ /** * @ingroup iface_zwp_linux_buffer_params_v1 * @struct zwp_linux_buffer_params_v1_interface */ struct zwp_linux_buffer_params_v1_interface { … }; #define ZWP_LINUX_BUFFER_PARAMS_V1_CREATED … #define ZWP_LINUX_BUFFER_PARAMS_V1_FAILED … /** * @ingroup iface_zwp_linux_buffer_params_v1 */ #define ZWP_LINUX_BUFFER_PARAMS_V1_CREATED_SINCE_VERSION … /** * @ingroup iface_zwp_linux_buffer_params_v1 */ #define ZWP_LINUX_BUFFER_PARAMS_V1_FAILED_SINCE_VERSION … /** * @ingroup iface_zwp_linux_buffer_params_v1 */ #define ZWP_LINUX_BUFFER_PARAMS_V1_DESTROY_SINCE_VERSION … /** * @ingroup iface_zwp_linux_buffer_params_v1 */ #define ZWP_LINUX_BUFFER_PARAMS_V1_ADD_SINCE_VERSION … /** * @ingroup iface_zwp_linux_buffer_params_v1 */ #define ZWP_LINUX_BUFFER_PARAMS_V1_CREATE_SINCE_VERSION … /** * @ingroup iface_zwp_linux_buffer_params_v1 */ #define ZWP_LINUX_BUFFER_PARAMS_V1_CREATE_IMMED_SINCE_VERSION … /** * @ingroup iface_zwp_linux_buffer_params_v1 * Sends an created event to the client owning the resource. * @param resource_ The client's resource * @param buffer the newly created wl_buffer */ static inline void zwp_linux_buffer_params_v1_send_created(struct wl_resource *resource_, struct wl_resource *buffer) { … } /** * @ingroup iface_zwp_linux_buffer_params_v1 * Sends an failed event to the client owning the resource. * @param resource_ The client's resource */ static inline void zwp_linux_buffer_params_v1_send_failed(struct wl_resource *resource_) { … } #ifndef ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_ENUM #define ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_ENUM enum zwp_linux_dmabuf_feedback_v1_tranche_flags { … }; /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 * Validate a zwp_linux_dmabuf_feedback_v1 tranche_flags value. * * @return true on success, false on error. * @ref zwp_linux_dmabuf_feedback_v1_tranche_flags */ static inline bool zwp_linux_dmabuf_feedback_v1_tranche_flags_is_valid(uint32_t value, uint32_t version) { … } #endif /* ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_ENUM */ /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 * @struct zwp_linux_dmabuf_feedback_v1_interface */ struct zwp_linux_dmabuf_feedback_v1_interface { … }; #define ZWP_LINUX_DMABUF_FEEDBACK_V1_DONE … #define ZWP_LINUX_DMABUF_FEEDBACK_V1_FORMAT_TABLE … #define ZWP_LINUX_DMABUF_FEEDBACK_V1_MAIN_DEVICE … #define ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_DONE … #define ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_TARGET_DEVICE … #define ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FORMATS … #define ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS … /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 */ #define ZWP_LINUX_DMABUF_FEEDBACK_V1_DONE_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 */ #define ZWP_LINUX_DMABUF_FEEDBACK_V1_FORMAT_TABLE_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 */ #define ZWP_LINUX_DMABUF_FEEDBACK_V1_MAIN_DEVICE_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 */ #define ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_DONE_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 */ #define ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_TARGET_DEVICE_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 */ #define ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FORMATS_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 */ #define ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 */ #define ZWP_LINUX_DMABUF_FEEDBACK_V1_DESTROY_SINCE_VERSION … /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 * Sends an done event to the client owning the resource. * @param resource_ The client's resource */ static inline void zwp_linux_dmabuf_feedback_v1_send_done(struct wl_resource *resource_) { … } /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 * Sends an format_table event to the client owning the resource. * @param resource_ The client's resource * @param fd table file descriptor * @param size table size, in bytes */ static inline void zwp_linux_dmabuf_feedback_v1_send_format_table(struct wl_resource *resource_, int32_t fd, uint32_t size) { … } /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 * Sends an main_device event to the client owning the resource. * @param resource_ The client's resource * @param device device dev_t value */ static inline void zwp_linux_dmabuf_feedback_v1_send_main_device(struct wl_resource *resource_, struct wl_array *device) { … } /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 * Sends an tranche_done event to the client owning the resource. * @param resource_ The client's resource */ static inline void zwp_linux_dmabuf_feedback_v1_send_tranche_done(struct wl_resource *resource_) { … } /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 * Sends an tranche_target_device event to the client owning the resource. * @param resource_ The client's resource * @param device device dev_t value */ static inline void zwp_linux_dmabuf_feedback_v1_send_tranche_target_device(struct wl_resource *resource_, struct wl_array *device) { … } /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 * Sends an tranche_formats event to the client owning the resource. * @param resource_ The client's resource * @param indices array of 16-bit indexes */ static inline void zwp_linux_dmabuf_feedback_v1_send_tranche_formats(struct wl_resource *resource_, struct wl_array *indices) { … } /** * @ingroup iface_zwp_linux_dmabuf_feedback_v1 * Sends an tranche_flags event to the client owning the resource. * @param resource_ The client's resource * @param flags tranche flags */ static inline void zwp_linux_dmabuf_feedback_v1_send_tranche_flags(struct wl_resource *resource_, uint32_t flags) { … } #ifdef __cplusplus } #endif #endif