1 Name 2 3 WL_bind_wayland_display 4 5 Name Strings 6 7 EGL_WL_bind_wayland_display 8 9 Contact 10 11 Kristian Hgsberg <krh@bitplanet.net> 12 Benjamin Franzke <benjaminfranzke@googlemail.com> 13 14 Status 15 16 Proposal 17 18 Version 19 20 Version 1, March 1, 2011 21 22 Number 23 24 EGL Extension #not assigned 25 26 Dependencies 27 28 Requires EGL 1.4 or later. This extension is written against the 29 wording of the EGL 1.4 specification. 30 31 EGL_KHR_base_image is required. 32 33 Overview 34 35 This extension provides entry points for binding and unbinding the 36 wl_display of a Wayland compositor to an EGLDisplay. Binding a 37 wl_display means that the EGL implementation should provide one or 38 more interfaces in the Wayland protocol to allow clients to create 39 wl_buffer objects. On the server side, this extension also 40 provides a new target for eglCreateImageKHR, to create an EGLImage 41 from a wl_buffer 42 43 Adding an implementation specific wayland interface, allows the 44 EGL implementation to define specific wayland requests and events, 45 needed for buffer sharing in an EGL wayland platform. 46 47 IP Status 48 49 Open-source; freely implementable. 50 51 New Procedures and Functions 52 53 EGLBoolean eglBindWaylandDisplayWL(EGLDisplay dpy, 54 struct wl_display *display); 55 56 EGLBoolean eglUnbindWaylandDisplayWL(EGLDisplay dpy, 57 struct wl_display *display); 58 59 EGLBoolean eglQueryWaylandBufferWL(EGLDisplay dpy, 60 struct wl_buffer *buffer, 61 EGLint attribute, EGLint *value); 62 63 New Tokens 64 65 Accepted as <target> in eglCreateImageKHR 66 67 EGL_WAYLAND_BUFFER_WL 0x31D5 68 69 Accepted in the <attrib_list> parameter of eglCreateImageKHR: 70 71 EGL_WAYLAND_PLANE_WL 0x31D6 72 73 Possible values for EGL_TEXTURE_FORMAT: 74 75 EGL_TEXTURE_Y_U_V_WL 0x31D7 76 EGL_TEXTURE_Y_UV_WL 0x31D8 77 EGL_TEXTURE_Y_XUXV_WL 0x31D9 78 79 80 Additions to the EGL 1.4 Specification: 81 82 To bind a server side wl_display to an EGLDisplay, call 83 84 EGLBoolean eglBindWaylandDisplayWL(EGLDisplay dpy, 85 struct wl_display *display); 86 87 To unbind a server side wl_display from an EGLDisplay, call 88 89 EGLBoolean eglUnbindWaylandDisplayWL(EGLDisplay dpy, 90 struct wl_display *display); 91 92 eglBindWaylandDisplayWL returns EGL_FALSE when there is already a 93 wl_display bound to EGLDisplay otherwise EGL_TRUE. 94 95 eglUnbindWaylandDisplayWL returns EGL_FALSE when there is no 96 wl_display bound to the EGLDisplay currently otherwise EGL_TRUE. 97 98 A wl_buffer can have several planes, typically in case of planar 99 YUV formats. Depending on the exact YUV format in use, the 100 compositor will have to create one or more EGLImages for the 101 various planes. The eglQueryWaylandBufferWL function should be 102 used to first query the wl_buffer texture format using 103 EGL_TEXTURE_FORMAT as the attribute. If the wl_buffer object is 104 not an EGL wl_buffer (wl_shm and other wayland extensions can 105 create wl_buffer objects of different types), this query will 106 return EGL_FALSE. In that case the wl_buffer can not be used with 107 EGL and the compositor should have another way to get the buffer 108 contents. 109 110 If eglQueryWaylandBufferWL succeeds, the returned value will be 111 one of EGL_TEXTURE_RGB, EGL_TEXTURE_RGBA, EGL_TEXTURE_Y_U_V_WL, 112 EGL_TEXTURE_Y_UV_WL, EGL_TEXTURE_Y_XUXV_WL. The value returned 113 describes how many EGLImages must be used, which components will 114 be sampled from each EGLImage and how they map to rgba components 115 in the shader. The naming conventions separates planes by _ and 116 within each plane, the order or R, G, B, A, Y, U, and V indicates 117 how those components map to the rgba value returned by the 118 sampler. X indicates that the corresponding component in the rgba 119 value isn't used. 120 121 RGB and RGBA buffer types: 122 123 EGL_TEXTURE_RGB 124 One plane, samples RGB from the texture to rgb in the 125 shader. Alpha channel is not valid. 126 127 EGL_TEXTURE_RGBA 128 One plane, samples RGBA from the texture to rgba in the 129 shader. 130 131 YUV buffer types: 132 133 EGL_TEXTURE_Y_U_V_WL 134 Three planes, samples Y from the first plane to r in 135 the shader, U from the second plane to r, and V from 136 the third plane to r. 137 138 EGL_TEXTURE_Y_UV_WL 139 Two planes, samples Y from the first plane to r in 140 the shader, U and V from the second plane to rg. 141 142 EGL_TEXTURE_Y_XUXV_WL 143 Two planes, samples Y from the first plane to r in 144 the shader, U and V from the second plane to g and a. 145 146 After querying the wl_buffer layout, create EGLImages for the 147 planes by calling eglCreateImageKHR with wl_buffer as 148 EGLClientBuffer, EGL_WAYLAND_BUFFER_WL as the target, NULL 149 context. If no attributes are given, an EGLImage will be created 150 for the first plane. For multi-planar buffers, specify the plane 151 to create the EGLImage for by using the EGL_WAYLAND_PLANE_WL 152 attribute. The value of the attribute is the index of the plane, 153 as defined by the buffer format. Writing to an EGLImage created 154 from a wl_buffer in any way (such as glTexImage2D, binding the 155 EGLImage as a renderbuffer etc) will result in undefined behavior. 156 157 Further, eglQueryWaylandBufferWL accepts attributes EGL_WIDTH and 158 EGL_HEIGHT to query the width and height of the wl_buffer. 159 160 Issues 161 162 Revision History 163 164 Version 1, March 1, 2011 165 Initial draft (Benjamin Franzke) 166 Version 2, July 5, 2012 167 Add EGL_WAYLAND_PLANE_WL attribute to allow creating an EGLImage 168 for different planes of planar buffer. (Kristian Hgsberg) 169 Version 3, July 10, 2012 170 Add eglQueryWaylandBufferWL and the various buffer 171 formats. (Kristian Hgsberg) 172 Version 4, July 19, 2012 173 Use EGL_TEXTURE_FORMAT, EGL_TEXTURE_RGB, and EGL_TEXTURE_RGBA, 174 and just define the new YUV texture formats. Add support for 175 EGL_WIDTH and EGL_HEIGHT in the query attributes (Kristian Hgsberg) 176