1*bb4ee6a4SAndroid Build Coastguard Worker<?xml version="1.0" encoding="UTF-8"?> 2*bb4ee6a4SAndroid Build Coastguard Worker<protocol name="linux_dmabuf_unstable_v1"> 3*bb4ee6a4SAndroid Build Coastguard Worker 4*bb4ee6a4SAndroid Build Coastguard Worker <copyright> 5*bb4ee6a4SAndroid Build Coastguard Worker Copyright © 2014, 2015 Collabora, Ltd. 6*bb4ee6a4SAndroid Build Coastguard Worker 7*bb4ee6a4SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining a 8*bb4ee6a4SAndroid Build Coastguard Worker copy of this software and associated documentation files (the "Software"), 9*bb4ee6a4SAndroid Build Coastguard Worker to deal in the Software without restriction, including without limitation 10*bb4ee6a4SAndroid Build Coastguard Worker the rights to use, copy, modify, merge, publish, distribute, sublicense, 11*bb4ee6a4SAndroid Build Coastguard Worker and/or sell copies of the Software, and to permit persons to whom the 12*bb4ee6a4SAndroid Build Coastguard Worker Software is furnished to do so, subject to the following conditions: 13*bb4ee6a4SAndroid Build Coastguard Worker 14*bb4ee6a4SAndroid Build Coastguard Worker The above copyright notice and this permission notice (including the next 15*bb4ee6a4SAndroid Build Coastguard Worker paragraph) shall be included in all copies or substantial portions of the 16*bb4ee6a4SAndroid Build Coastguard Worker Software. 17*bb4ee6a4SAndroid Build Coastguard Worker 18*bb4ee6a4SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19*bb4ee6a4SAndroid Build Coastguard Worker IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20*bb4ee6a4SAndroid Build Coastguard Worker FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21*bb4ee6a4SAndroid Build Coastguard Worker THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22*bb4ee6a4SAndroid Build Coastguard Worker LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23*bb4ee6a4SAndroid Build Coastguard Worker FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 24*bb4ee6a4SAndroid Build Coastguard Worker DEALINGS IN THE SOFTWARE. 25*bb4ee6a4SAndroid Build Coastguard Worker </copyright> 26*bb4ee6a4SAndroid Build Coastguard Worker 27*bb4ee6a4SAndroid Build Coastguard Worker <interface name="zwp_linux_dmabuf_v1" version="3"> 28*bb4ee6a4SAndroid Build Coastguard Worker <description summary="factory for creating dmabuf-based wl_buffers"> 29*bb4ee6a4SAndroid Build Coastguard Worker Following the interfaces from: 30*bb4ee6a4SAndroid Build Coastguard Worker https://www.khronos.org/registry/egl/extensions/EXT/EGL_EXT_image_dma_buf_import.txt 31*bb4ee6a4SAndroid Build Coastguard Worker and the Linux DRM sub-system's AddFb2 ioctl. 32*bb4ee6a4SAndroid Build Coastguard Worker 33*bb4ee6a4SAndroid Build Coastguard Worker This interface offers ways to create generic dmabuf-based 34*bb4ee6a4SAndroid Build Coastguard Worker wl_buffers. Immediately after a client binds to this interface, 35*bb4ee6a4SAndroid Build Coastguard Worker the set of supported formats and format modifiers is sent with 36*bb4ee6a4SAndroid Build Coastguard Worker 'format' and 'modifier' events. 37*bb4ee6a4SAndroid Build Coastguard Worker 38*bb4ee6a4SAndroid Build Coastguard Worker The following are required from clients: 39*bb4ee6a4SAndroid Build Coastguard Worker 40*bb4ee6a4SAndroid Build Coastguard Worker - Clients must ensure that either all data in the dma-buf is 41*bb4ee6a4SAndroid Build Coastguard Worker coherent for all subsequent read access or that coherency is 42*bb4ee6a4SAndroid Build Coastguard Worker correctly handled by the underlying kernel-side dma-buf 43*bb4ee6a4SAndroid Build Coastguard Worker implementation. 44*bb4ee6a4SAndroid Build Coastguard Worker 45*bb4ee6a4SAndroid Build Coastguard Worker - Don't make any more attachments after sending the buffer to the 46*bb4ee6a4SAndroid Build Coastguard Worker compositor. Making more attachments later increases the risk of 47*bb4ee6a4SAndroid Build Coastguard Worker the compositor not being able to use (re-import) an existing 48*bb4ee6a4SAndroid Build Coastguard Worker dmabuf-based wl_buffer. 49*bb4ee6a4SAndroid Build Coastguard Worker 50*bb4ee6a4SAndroid Build Coastguard Worker The underlying graphics stack must ensure the following: 51*bb4ee6a4SAndroid Build Coastguard Worker 52*bb4ee6a4SAndroid Build Coastguard Worker - The dmabuf file descriptors relayed to the server will stay valid 53*bb4ee6a4SAndroid Build Coastguard Worker for the whole lifetime of the wl_buffer. This means the server may 54*bb4ee6a4SAndroid Build Coastguard Worker at any time use those fds to import the dmabuf into any kernel 55*bb4ee6a4SAndroid Build Coastguard Worker sub-system that might accept it. 56*bb4ee6a4SAndroid Build Coastguard Worker 57*bb4ee6a4SAndroid Build Coastguard Worker To create a wl_buffer from one or more dmabufs, a client creates a 58*bb4ee6a4SAndroid Build Coastguard Worker zwp_linux_dmabuf_params_v1 object with a zwp_linux_dmabuf_v1.create_params 59*bb4ee6a4SAndroid Build Coastguard Worker request. All planes required by the intended format are added with 60*bb4ee6a4SAndroid Build Coastguard Worker the 'add' request. Finally, a 'create' or 'create_immed' request is 61*bb4ee6a4SAndroid Build Coastguard Worker issued, which has the following outcome depending on the import success. 62*bb4ee6a4SAndroid Build Coastguard Worker 63*bb4ee6a4SAndroid Build Coastguard Worker The 'create' request, 64*bb4ee6a4SAndroid Build Coastguard Worker - on success, triggers a 'created' event which provides the final 65*bb4ee6a4SAndroid Build Coastguard Worker wl_buffer to the client. 66*bb4ee6a4SAndroid Build Coastguard Worker - on failure, triggers a 'failed' event to convey that the server 67*bb4ee6a4SAndroid Build Coastguard Worker cannot use the dmabufs received from the client. 68*bb4ee6a4SAndroid Build Coastguard Worker 69*bb4ee6a4SAndroid Build Coastguard Worker For the 'create_immed' request, 70*bb4ee6a4SAndroid Build Coastguard Worker - on success, the server immediately imports the added dmabufs to 71*bb4ee6a4SAndroid Build Coastguard Worker create a wl_buffer. No event is sent from the server in this case. 72*bb4ee6a4SAndroid Build Coastguard Worker - on failure, the server can choose to either: 73*bb4ee6a4SAndroid Build Coastguard Worker - terminate the client by raising a fatal error. 74*bb4ee6a4SAndroid Build Coastguard Worker - mark the wl_buffer as failed, and send a 'failed' event to the 75*bb4ee6a4SAndroid Build Coastguard Worker client. If the client uses a failed wl_buffer as an argument to any 76*bb4ee6a4SAndroid Build Coastguard Worker request, the behaviour is compositor implementation-defined. 77*bb4ee6a4SAndroid Build Coastguard Worker 78*bb4ee6a4SAndroid Build Coastguard Worker Warning! The protocol described in this file is experimental and 79*bb4ee6a4SAndroid Build Coastguard Worker backward incompatible changes may be made. Backward compatible changes 80*bb4ee6a4SAndroid Build Coastguard Worker may be added together with the corresponding interface version bump. 81*bb4ee6a4SAndroid Build Coastguard Worker Backward incompatible changes are done by bumping the version number in 82*bb4ee6a4SAndroid Build Coastguard Worker the protocol and interface names and resetting the interface version. 83*bb4ee6a4SAndroid Build Coastguard Worker Once the protocol is to be declared stable, the 'z' prefix and the 84*bb4ee6a4SAndroid Build Coastguard Worker version number in the protocol and interface names are removed and the 85*bb4ee6a4SAndroid Build Coastguard Worker interface version number is reset. 86*bb4ee6a4SAndroid Build Coastguard Worker </description> 87*bb4ee6a4SAndroid Build Coastguard Worker 88*bb4ee6a4SAndroid Build Coastguard Worker <request name="destroy" type="destructor"> 89*bb4ee6a4SAndroid Build Coastguard Worker <description summary="unbind the factory"> 90*bb4ee6a4SAndroid Build Coastguard Worker Objects created through this interface, especially wl_buffers, will 91*bb4ee6a4SAndroid Build Coastguard Worker remain valid. 92*bb4ee6a4SAndroid Build Coastguard Worker </description> 93*bb4ee6a4SAndroid Build Coastguard Worker </request> 94*bb4ee6a4SAndroid Build Coastguard Worker 95*bb4ee6a4SAndroid Build Coastguard Worker <request name="create_params"> 96*bb4ee6a4SAndroid Build Coastguard Worker <description summary="create a temporary object for buffer parameters"> 97*bb4ee6a4SAndroid Build Coastguard Worker This temporary object is used to collect multiple dmabuf handles into 98*bb4ee6a4SAndroid Build Coastguard Worker a single batch to create a wl_buffer. It can only be used once and 99*bb4ee6a4SAndroid Build Coastguard Worker should be destroyed after a 'created' or 'failed' event has been 100*bb4ee6a4SAndroid Build Coastguard Worker received. 101*bb4ee6a4SAndroid Build Coastguard Worker </description> 102*bb4ee6a4SAndroid Build Coastguard Worker <arg name="params_id" type="new_id" interface="zwp_linux_buffer_params_v1" 103*bb4ee6a4SAndroid Build Coastguard Worker summary="the new temporary"/> 104*bb4ee6a4SAndroid Build Coastguard Worker </request> 105*bb4ee6a4SAndroid Build Coastguard Worker 106*bb4ee6a4SAndroid Build Coastguard Worker <event name="format"> 107*bb4ee6a4SAndroid Build Coastguard Worker <description summary="supported buffer format"> 108*bb4ee6a4SAndroid Build Coastguard Worker This event advertises one buffer format that the server supports. 109*bb4ee6a4SAndroid Build Coastguard Worker All the supported formats are advertised once when the client 110*bb4ee6a4SAndroid Build Coastguard Worker binds to this interface. A roundtrip after binding guarantees 111*bb4ee6a4SAndroid Build Coastguard Worker that the client has received all supported formats. 112*bb4ee6a4SAndroid Build Coastguard Worker 113*bb4ee6a4SAndroid Build Coastguard Worker For the definition of the format codes, see the 114*bb4ee6a4SAndroid Build Coastguard Worker zwp_linux_buffer_params_v1::create request. 115*bb4ee6a4SAndroid Build Coastguard Worker 116*bb4ee6a4SAndroid Build Coastguard Worker Warning: the 'format' event is likely to be deprecated and replaced 117*bb4ee6a4SAndroid Build Coastguard Worker with the 'modifier' event introduced in zwp_linux_dmabuf_v1 118*bb4ee6a4SAndroid Build Coastguard Worker version 3, described below. Please refrain from using the information 119*bb4ee6a4SAndroid Build Coastguard Worker received from this event. 120*bb4ee6a4SAndroid Build Coastguard Worker </description> 121*bb4ee6a4SAndroid Build Coastguard Worker <arg name="format" type="uint" summary="DRM_FORMAT code"/> 122*bb4ee6a4SAndroid Build Coastguard Worker </event> 123*bb4ee6a4SAndroid Build Coastguard Worker 124*bb4ee6a4SAndroid Build Coastguard Worker <event name="modifier" since="3"> 125*bb4ee6a4SAndroid Build Coastguard Worker <description summary="supported buffer format modifier"> 126*bb4ee6a4SAndroid Build Coastguard Worker This event advertises the formats that the server supports, along with 127*bb4ee6a4SAndroid Build Coastguard Worker the modifiers supported for each format. All the supported modifiers 128*bb4ee6a4SAndroid Build Coastguard Worker for all the supported formats are advertised once when the client 129*bb4ee6a4SAndroid Build Coastguard Worker binds to this interface. A roundtrip after binding guarantees that 130*bb4ee6a4SAndroid Build Coastguard Worker the client has received all supported format-modifier pairs. 131*bb4ee6a4SAndroid Build Coastguard Worker 132*bb4ee6a4SAndroid Build Coastguard Worker For the definition of the format and modifier codes, see the 133*bb4ee6a4SAndroid Build Coastguard Worker zwp_linux_buffer_params_v1::create request. 134*bb4ee6a4SAndroid Build Coastguard Worker </description> 135*bb4ee6a4SAndroid Build Coastguard Worker <arg name="format" type="uint" summary="DRM_FORMAT code"/> 136*bb4ee6a4SAndroid Build Coastguard Worker <arg name="modifier_hi" type="uint" 137*bb4ee6a4SAndroid Build Coastguard Worker summary="high 32 bits of layout modifier"/> 138*bb4ee6a4SAndroid Build Coastguard Worker <arg name="modifier_lo" type="uint" 139*bb4ee6a4SAndroid Build Coastguard Worker summary="low 32 bits of layout modifier"/> 140*bb4ee6a4SAndroid Build Coastguard Worker </event> 141*bb4ee6a4SAndroid Build Coastguard Worker </interface> 142*bb4ee6a4SAndroid Build Coastguard Worker 143*bb4ee6a4SAndroid Build Coastguard Worker <interface name="zwp_linux_buffer_params_v1" version="3"> 144*bb4ee6a4SAndroid Build Coastguard Worker <description summary="parameters for creating a dmabuf-based wl_buffer"> 145*bb4ee6a4SAndroid Build Coastguard Worker This temporary object is a collection of dmabufs and other 146*bb4ee6a4SAndroid Build Coastguard Worker parameters that together form a single logical buffer. The temporary 147*bb4ee6a4SAndroid Build Coastguard Worker object may eventually create one wl_buffer unless cancelled by 148*bb4ee6a4SAndroid Build Coastguard Worker destroying it before requesting 'create'. 149*bb4ee6a4SAndroid Build Coastguard Worker 150*bb4ee6a4SAndroid Build Coastguard Worker Single-planar formats only require one dmabuf, however 151*bb4ee6a4SAndroid Build Coastguard Worker multi-planar formats may require more than one dmabuf. For all 152*bb4ee6a4SAndroid Build Coastguard Worker formats, an 'add' request must be called once per plane (even if the 153*bb4ee6a4SAndroid Build Coastguard Worker underlying dmabuf fd is identical). 154*bb4ee6a4SAndroid Build Coastguard Worker 155*bb4ee6a4SAndroid Build Coastguard Worker You must use consecutive plane indices ('plane_idx' argument for 'add') 156*bb4ee6a4SAndroid Build Coastguard Worker from zero to the number of planes used by the drm_fourcc format code. 157*bb4ee6a4SAndroid Build Coastguard Worker All planes required by the format must be given exactly once, but can 158*bb4ee6a4SAndroid Build Coastguard Worker be given in any order. Each plane index can be set only once. 159*bb4ee6a4SAndroid Build Coastguard Worker </description> 160*bb4ee6a4SAndroid Build Coastguard Worker 161*bb4ee6a4SAndroid Build Coastguard Worker <enum name="error"> 162*bb4ee6a4SAndroid Build Coastguard Worker <entry name="already_used" value="0" 163*bb4ee6a4SAndroid Build Coastguard Worker summary="the dmabuf_batch object has already been used to create a wl_buffer"/> 164*bb4ee6a4SAndroid Build Coastguard Worker <entry name="plane_idx" value="1" 165*bb4ee6a4SAndroid Build Coastguard Worker summary="plane index out of bounds"/> 166*bb4ee6a4SAndroid Build Coastguard Worker <entry name="plane_set" value="2" 167*bb4ee6a4SAndroid Build Coastguard Worker summary="the plane index was already set"/> 168*bb4ee6a4SAndroid Build Coastguard Worker <entry name="incomplete" value="3" 169*bb4ee6a4SAndroid Build Coastguard Worker summary="missing or too many planes to create a buffer"/> 170*bb4ee6a4SAndroid Build Coastguard Worker <entry name="invalid_format" value="4" 171*bb4ee6a4SAndroid Build Coastguard Worker summary="format not supported"/> 172*bb4ee6a4SAndroid Build Coastguard Worker <entry name="invalid_dimensions" value="5" 173*bb4ee6a4SAndroid Build Coastguard Worker summary="invalid width or height"/> 174*bb4ee6a4SAndroid Build Coastguard Worker <entry name="out_of_bounds" value="6" 175*bb4ee6a4SAndroid Build Coastguard Worker summary="offset + stride * height goes out of dmabuf bounds"/> 176*bb4ee6a4SAndroid Build Coastguard Worker <entry name="invalid_wl_buffer" value="7" 177*bb4ee6a4SAndroid Build Coastguard Worker summary="invalid wl_buffer resulted from importing dmabufs via 178*bb4ee6a4SAndroid Build Coastguard Worker the create_immed request on given buffer_params"/> 179*bb4ee6a4SAndroid Build Coastguard Worker </enum> 180*bb4ee6a4SAndroid Build Coastguard Worker 181*bb4ee6a4SAndroid Build Coastguard Worker <request name="destroy" type="destructor"> 182*bb4ee6a4SAndroid Build Coastguard Worker <description summary="delete this object, used or not"> 183*bb4ee6a4SAndroid Build Coastguard Worker Cleans up the temporary data sent to the server for dmabuf-based 184*bb4ee6a4SAndroid Build Coastguard Worker wl_buffer creation. 185*bb4ee6a4SAndroid Build Coastguard Worker </description> 186*bb4ee6a4SAndroid Build Coastguard Worker </request> 187*bb4ee6a4SAndroid Build Coastguard Worker 188*bb4ee6a4SAndroid Build Coastguard Worker <request name="add"> 189*bb4ee6a4SAndroid Build Coastguard Worker <description summary="add a dmabuf to the temporary set"> 190*bb4ee6a4SAndroid Build Coastguard Worker This request adds one dmabuf to the set in this 191*bb4ee6a4SAndroid Build Coastguard Worker zwp_linux_buffer_params_v1. 192*bb4ee6a4SAndroid Build Coastguard Worker 193*bb4ee6a4SAndroid Build Coastguard Worker The 64-bit unsigned value combined from modifier_hi and modifier_lo 194*bb4ee6a4SAndroid Build Coastguard Worker is the dmabuf layout modifier. DRM AddFB2 ioctl calls this the 195*bb4ee6a4SAndroid Build Coastguard Worker fb modifier, which is defined in drm_mode.h of Linux UAPI. 196*bb4ee6a4SAndroid Build Coastguard Worker This is an opaque token. Drivers use this token to express tiling, 197*bb4ee6a4SAndroid Build Coastguard Worker compression, etc. driver-specific modifications to the base format 198*bb4ee6a4SAndroid Build Coastguard Worker defined by the DRM fourcc code. 199*bb4ee6a4SAndroid Build Coastguard Worker 200*bb4ee6a4SAndroid Build Coastguard Worker This request raises the PLANE_IDX error if plane_idx is too large. 201*bb4ee6a4SAndroid Build Coastguard Worker The error PLANE_SET is raised if attempting to set a plane that 202*bb4ee6a4SAndroid Build Coastguard Worker was already set. 203*bb4ee6a4SAndroid Build Coastguard Worker </description> 204*bb4ee6a4SAndroid Build Coastguard Worker <arg name="fd" type="fd" summary="dmabuf fd"/> 205*bb4ee6a4SAndroid Build Coastguard Worker <arg name="plane_idx" type="uint" summary="plane index"/> 206*bb4ee6a4SAndroid Build Coastguard Worker <arg name="offset" type="uint" summary="offset in bytes"/> 207*bb4ee6a4SAndroid Build Coastguard Worker <arg name="stride" type="uint" summary="stride in bytes"/> 208*bb4ee6a4SAndroid Build Coastguard Worker <arg name="modifier_hi" type="uint" 209*bb4ee6a4SAndroid Build Coastguard Worker summary="high 32 bits of layout modifier"/> 210*bb4ee6a4SAndroid Build Coastguard Worker <arg name="modifier_lo" type="uint" 211*bb4ee6a4SAndroid Build Coastguard Worker summary="low 32 bits of layout modifier"/> 212*bb4ee6a4SAndroid Build Coastguard Worker </request> 213*bb4ee6a4SAndroid Build Coastguard Worker 214*bb4ee6a4SAndroid Build Coastguard Worker <enum name="flags"> 215*bb4ee6a4SAndroid Build Coastguard Worker <entry name="y_invert" value="1" summary="contents are y-inverted"/> 216*bb4ee6a4SAndroid Build Coastguard Worker <entry name="interlaced" value="2" summary="content is interlaced"/> 217*bb4ee6a4SAndroid Build Coastguard Worker <entry name="bottom_first" value="4" summary="bottom field first"/> 218*bb4ee6a4SAndroid Build Coastguard Worker </enum> 219*bb4ee6a4SAndroid Build Coastguard Worker 220*bb4ee6a4SAndroid Build Coastguard Worker <request name="create"> 221*bb4ee6a4SAndroid Build Coastguard Worker <description summary="create a wl_buffer from the given dmabufs"> 222*bb4ee6a4SAndroid Build Coastguard Worker This asks for creation of a wl_buffer from the added dmabuf 223*bb4ee6a4SAndroid Build Coastguard Worker buffers. The wl_buffer is not created immediately but returned via 224*bb4ee6a4SAndroid Build Coastguard Worker the 'created' event if the dmabuf sharing succeeds. The sharing 225*bb4ee6a4SAndroid Build Coastguard Worker may fail at runtime for reasons a client cannot predict, in 226*bb4ee6a4SAndroid Build Coastguard Worker which case the 'failed' event is triggered. 227*bb4ee6a4SAndroid Build Coastguard Worker 228*bb4ee6a4SAndroid Build Coastguard Worker The 'format' argument is a DRM_FORMAT code, as defined by the 229*bb4ee6a4SAndroid Build Coastguard Worker libdrm's drm_fourcc.h. The Linux kernel's DRM sub-system is the 230*bb4ee6a4SAndroid Build Coastguard Worker authoritative source on how the format codes should work. 231*bb4ee6a4SAndroid Build Coastguard Worker 232*bb4ee6a4SAndroid Build Coastguard Worker The 'flags' is a bitfield of the flags defined in enum "flags". 233*bb4ee6a4SAndroid Build Coastguard Worker 'y_invert' means the that the image needs to be y-flipped. 234*bb4ee6a4SAndroid Build Coastguard Worker 235*bb4ee6a4SAndroid Build Coastguard Worker Flag 'interlaced' means that the frame in the buffer is not 236*bb4ee6a4SAndroid Build Coastguard Worker progressive as usual, but interlaced. An interlaced buffer as 237*bb4ee6a4SAndroid Build Coastguard Worker supported here must always contain both top and bottom fields. 238*bb4ee6a4SAndroid Build Coastguard Worker The top field always begins on the first pixel row. The temporal 239*bb4ee6a4SAndroid Build Coastguard Worker ordering between the two fields is top field first, unless 240*bb4ee6a4SAndroid Build Coastguard Worker 'bottom_first' is specified. It is undefined whether 'bottom_first' 241*bb4ee6a4SAndroid Build Coastguard Worker is ignored if 'interlaced' is not set. 242*bb4ee6a4SAndroid Build Coastguard Worker 243*bb4ee6a4SAndroid Build Coastguard Worker This protocol does not convey any information about field rate, 244*bb4ee6a4SAndroid Build Coastguard Worker duration, or timing, other than the relative ordering between the 245*bb4ee6a4SAndroid Build Coastguard Worker two fields in one buffer. A compositor may have to estimate the 246*bb4ee6a4SAndroid Build Coastguard Worker intended field rate from the incoming buffer rate. It is undefined 247*bb4ee6a4SAndroid Build Coastguard Worker whether the time of receiving wl_surface.commit with a new buffer 248*bb4ee6a4SAndroid Build Coastguard Worker attached, applying the wl_surface state, wl_surface.frame callback 249*bb4ee6a4SAndroid Build Coastguard Worker trigger, presentation, or any other point in the compositor cycle 250*bb4ee6a4SAndroid Build Coastguard Worker is used to measure the frame or field times. There is no support 251*bb4ee6a4SAndroid Build Coastguard Worker for detecting missed or late frames/fields/buffers either, and 252*bb4ee6a4SAndroid Build Coastguard Worker there is no support whatsoever for cooperating with interlaced 253*bb4ee6a4SAndroid Build Coastguard Worker compositor output. 254*bb4ee6a4SAndroid Build Coastguard Worker 255*bb4ee6a4SAndroid Build Coastguard Worker The composited image quality resulting from the use of interlaced 256*bb4ee6a4SAndroid Build Coastguard Worker buffers is explicitly undefined. A compositor may use elaborate 257*bb4ee6a4SAndroid Build Coastguard Worker hardware features or software to deinterlace and create progressive 258*bb4ee6a4SAndroid Build Coastguard Worker output frames from a sequence of interlaced input buffers, or it 259*bb4ee6a4SAndroid Build Coastguard Worker may produce substandard image quality. However, compositors that 260*bb4ee6a4SAndroid Build Coastguard Worker cannot guarantee reasonable image quality in all cases are recommended 261*bb4ee6a4SAndroid Build Coastguard Worker to just reject all interlaced buffers. 262*bb4ee6a4SAndroid Build Coastguard Worker 263*bb4ee6a4SAndroid Build Coastguard Worker Any argument errors, including non-positive width or height, 264*bb4ee6a4SAndroid Build Coastguard Worker mismatch between the number of planes and the format, bad 265*bb4ee6a4SAndroid Build Coastguard Worker format, bad offset or stride, may be indicated by fatal protocol 266*bb4ee6a4SAndroid Build Coastguard Worker errors: INCOMPLETE, INVALID_FORMAT, INVALID_DIMENSIONS, 267*bb4ee6a4SAndroid Build Coastguard Worker OUT_OF_BOUNDS. 268*bb4ee6a4SAndroid Build Coastguard Worker 269*bb4ee6a4SAndroid Build Coastguard Worker Dmabuf import errors in the server that are not obvious client 270*bb4ee6a4SAndroid Build Coastguard Worker bugs are returned via the 'failed' event as non-fatal. This 271*bb4ee6a4SAndroid Build Coastguard Worker allows attempting dmabuf sharing and falling back in the client 272*bb4ee6a4SAndroid Build Coastguard Worker if it fails. 273*bb4ee6a4SAndroid Build Coastguard Worker 274*bb4ee6a4SAndroid Build Coastguard Worker This request can be sent only once in the object's lifetime, after 275*bb4ee6a4SAndroid Build Coastguard Worker which the only legal request is destroy. This object should be 276*bb4ee6a4SAndroid Build Coastguard Worker destroyed after issuing a 'create' request. Attempting to use this 277*bb4ee6a4SAndroid Build Coastguard Worker object after issuing 'create' raises ALREADY_USED protocol error. 278*bb4ee6a4SAndroid Build Coastguard Worker 279*bb4ee6a4SAndroid Build Coastguard Worker It is not mandatory to issue 'create'. If a client wants to 280*bb4ee6a4SAndroid Build Coastguard Worker cancel the buffer creation, it can just destroy this object. 281*bb4ee6a4SAndroid Build Coastguard Worker </description> 282*bb4ee6a4SAndroid Build Coastguard Worker <arg name="width" type="int" summary="base plane width in pixels"/> 283*bb4ee6a4SAndroid Build Coastguard Worker <arg name="height" type="int" summary="base plane height in pixels"/> 284*bb4ee6a4SAndroid Build Coastguard Worker <arg name="format" type="uint" summary="DRM_FORMAT code"/> 285*bb4ee6a4SAndroid Build Coastguard Worker <arg name="flags" type="uint" summary="see enum flags"/> 286*bb4ee6a4SAndroid Build Coastguard Worker </request> 287*bb4ee6a4SAndroid Build Coastguard Worker 288*bb4ee6a4SAndroid Build Coastguard Worker <event name="created"> 289*bb4ee6a4SAndroid Build Coastguard Worker <description summary="buffer creation succeeded"> 290*bb4ee6a4SAndroid Build Coastguard Worker This event indicates that the attempted buffer creation was 291*bb4ee6a4SAndroid Build Coastguard Worker successful. It provides the new wl_buffer referencing the dmabuf(s). 292*bb4ee6a4SAndroid Build Coastguard Worker 293*bb4ee6a4SAndroid Build Coastguard Worker Upon receiving this event, the client should destroy the 294*bb4ee6a4SAndroid Build Coastguard Worker zlinux_dmabuf_params object. 295*bb4ee6a4SAndroid Build Coastguard Worker </description> 296*bb4ee6a4SAndroid Build Coastguard Worker <arg name="buffer" type="new_id" interface="wl_buffer" 297*bb4ee6a4SAndroid Build Coastguard Worker summary="the newly created wl_buffer"/> 298*bb4ee6a4SAndroid Build Coastguard Worker </event> 299*bb4ee6a4SAndroid Build Coastguard Worker 300*bb4ee6a4SAndroid Build Coastguard Worker <event name="failed"> 301*bb4ee6a4SAndroid Build Coastguard Worker <description summary="buffer creation failed"> 302*bb4ee6a4SAndroid Build Coastguard Worker This event indicates that the attempted buffer creation has 303*bb4ee6a4SAndroid Build Coastguard Worker failed. It usually means that one of the dmabuf constraints 304*bb4ee6a4SAndroid Build Coastguard Worker has not been fulfilled. 305*bb4ee6a4SAndroid Build Coastguard Worker 306*bb4ee6a4SAndroid Build Coastguard Worker Upon receiving this event, the client should destroy the 307*bb4ee6a4SAndroid Build Coastguard Worker zlinux_buffer_params object. 308*bb4ee6a4SAndroid Build Coastguard Worker </description> 309*bb4ee6a4SAndroid Build Coastguard Worker </event> 310*bb4ee6a4SAndroid Build Coastguard Worker 311*bb4ee6a4SAndroid Build Coastguard Worker <request name="create_immed" since="2"> 312*bb4ee6a4SAndroid Build Coastguard Worker <description summary="immediately create a wl_buffer from the given 313*bb4ee6a4SAndroid Build Coastguard Worker dmabufs"> 314*bb4ee6a4SAndroid Build Coastguard Worker This asks for immediate creation of a wl_buffer by importing the 315*bb4ee6a4SAndroid Build Coastguard Worker added dmabufs. 316*bb4ee6a4SAndroid Build Coastguard Worker 317*bb4ee6a4SAndroid Build Coastguard Worker In case of import success, no event is sent from the server, and the 318*bb4ee6a4SAndroid Build Coastguard Worker wl_buffer is ready to be used by the client. 319*bb4ee6a4SAndroid Build Coastguard Worker 320*bb4ee6a4SAndroid Build Coastguard Worker Upon import failure, either of the following may happen, as seen fit 321*bb4ee6a4SAndroid Build Coastguard Worker by the implementation: 322*bb4ee6a4SAndroid Build Coastguard Worker - the client is terminated with one of the following fatal protocol 323*bb4ee6a4SAndroid Build Coastguard Worker errors: 324*bb4ee6a4SAndroid Build Coastguard Worker - INCOMPLETE, INVALID_FORMAT, INVALID_DIMENSIONS, OUT_OF_BOUNDS, 325*bb4ee6a4SAndroid Build Coastguard Worker in case of argument errors such as mismatch between the number 326*bb4ee6a4SAndroid Build Coastguard Worker of planes and the format, bad format, non-positive width or 327*bb4ee6a4SAndroid Build Coastguard Worker height, or bad offset or stride. 328*bb4ee6a4SAndroid Build Coastguard Worker - INVALID_WL_BUFFER, in case the cause for failure is unknown or 329*bb4ee6a4SAndroid Build Coastguard Worker plaform specific. 330*bb4ee6a4SAndroid Build Coastguard Worker - the server creates an invalid wl_buffer, marks it as failed and 331*bb4ee6a4SAndroid Build Coastguard Worker sends a 'failed' event to the client. The result of using this 332*bb4ee6a4SAndroid Build Coastguard Worker invalid wl_buffer as an argument in any request by the client is 333*bb4ee6a4SAndroid Build Coastguard Worker defined by the compositor implementation. 334*bb4ee6a4SAndroid Build Coastguard Worker 335*bb4ee6a4SAndroid Build Coastguard Worker This takes the same arguments as a 'create' request, and obeys the 336*bb4ee6a4SAndroid Build Coastguard Worker same restrictions. 337*bb4ee6a4SAndroid Build Coastguard Worker </description> 338*bb4ee6a4SAndroid Build Coastguard Worker <arg name="buffer_id" type="new_id" interface="wl_buffer" 339*bb4ee6a4SAndroid Build Coastguard Worker summary="id for the newly created wl_buffer"/> 340*bb4ee6a4SAndroid Build Coastguard Worker <arg name="width" type="int" summary="base plane width in pixels"/> 341*bb4ee6a4SAndroid Build Coastguard Worker <arg name="height" type="int" summary="base plane height in pixels"/> 342*bb4ee6a4SAndroid Build Coastguard Worker <arg name="format" type="uint" summary="DRM_FORMAT code"/> 343*bb4ee6a4SAndroid Build Coastguard Worker <arg name="flags" type="uint" summary="see enum flags"/> 344*bb4ee6a4SAndroid Build Coastguard Worker </request> 345*bb4ee6a4SAndroid Build Coastguard Worker 346*bb4ee6a4SAndroid Build Coastguard Worker </interface> 347*bb4ee6a4SAndroid Build Coastguard Worker 348*bb4ee6a4SAndroid Build Coastguard Worker</protocol> 349