3 WL_bind_wayland_display
7 EGL_WL_bind_wayland_display
11 Kristian Høgsberg
<krh@bitplanet.net
>
12 Benjamin Franzke
<benjaminfranzke@googlemail.com
>
20 Version 5, July
16, 2013
24 EGL Extension
#not assigned
28 Requires EGL
1.4 or later. This extension is written against the
29 wording of the EGL
1.4 specification.
31 EGL_KHR_base_image is required.
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
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.
49 Open
-source; freely implementable.
51 New Procedures and Functions
53 EGLBoolean eglBindWaylandDisplayWL
(EGLDisplay dpy
,
54 struct wl_display
*display
);
56 EGLBoolean eglUnbindWaylandDisplayWL
(EGLDisplay dpy
,
57 struct wl_display
*display
);
59 EGLBoolean eglQueryWaylandBufferWL
(EGLDisplay dpy
,
60 struct wl_resource
*buffer
,
61 EGLint attribute
, EGLint
*value
);
65 Accepted as
<target
> in eglCreateImageKHR
67 EGL_WAYLAND_BUFFER_WL
0x31D5
69 Accepted
in the
<attrib_list
> parameter of eglCreateImageKHR
:
71 EGL_WAYLAND_PLANE_WL
0x31D6
73 Possible values
for EGL_TEXTURE_FORMAT
:
75 EGL_TEXTURE_Y_U_V_WL
0x31D7
76 EGL_TEXTURE_Y_UV_WL
0x31D8
77 EGL_TEXTURE_Y_XUXV_WL
0x31D9
78 EGL_TEXTURE_EXTERNAL_WL
0x31DA
80 Accepted
in the
<attribute
> parameter of eglQueryWaylandBufferWL
:
82 EGL_TEXTURE_FORMAT
0x3080
83 EGL_WAYLAND_Y_INVERTED_WL
0x31DB
86 Additions to the EGL
1.4 Specification
:
88 To
bind a server side wl_display to an EGLDisplay
, call
90 EGLBoolean eglBindWaylandDisplayWL
(EGLDisplay dpy
,
91 struct wl_display
*display
);
93 To unbind a server side wl_display from an EGLDisplay
, call
95 EGLBoolean eglUnbindWaylandDisplayWL
(EGLDisplay dpy
,
96 struct wl_display
*display
);
98 eglBindWaylandDisplayWL returns EGL_FALSE when there is already a
99 wl_display bound to EGLDisplay otherwise EGL_TRUE.
101 eglUnbindWaylandDisplayWL returns EGL_FALSE when there is no
102 wl_display bound to the EGLDisplay currently otherwise EGL_TRUE.
104 A wl_buffer can have several planes
, typically
in case of planar
105 YUV formats. Depending on the exact YUV format
in use
, the
106 compositor will have to create one or more EGLImages
for the
107 various planes. The eglQueryWaylandBufferWL
function should be
108 used to first query the wl_buffer texture format using
109 EGL_TEXTURE_FORMAT as the attribute. If the wl_buffer object is
110 not an EGL wl_buffer
(wl_shm and other wayland extensions can
111 create wl_buffer objects of different types
), this query will
112 return EGL_FALSE. In that
case the wl_buffer can not be used with
113 EGL and the compositor should have another way to get the buffer
116 If eglQueryWaylandBufferWL succeeds
, the returned value will be
117 one of EGL_TEXTURE_RGB
, EGL_TEXTURE_RGBA
, EGL_TEXTURE_Y_U_V_WL
,
118 EGL_TEXTURE_Y_UV_WL
, EGL_TEXTURE_Y_XUXV_WL. The value returned
119 describes how many EGLImages must be used
, which components will
120 be sampled from each EGLImage and how they map to rgba components
121 in the shader. The naming conventions separates planes by _ and
122 within each plane
, the order or R
, G
, B
, A
, Y
, U
, and V indicates
123 how those components map to the rgba value returned by the
124 sampler. X indicates that the corresponding component
in the rgba
127 RGB and RGBA buffer types
:
130 One plane
, samples RGB from the texture to rgb
in the
131 shader. Alpha channel is not valid.
134 One plane
, samples RGBA from the texture to rgba
in the
140 Three planes
, samples Y from the first plane to r
in
141 the shader
, U from the second plane to r
, and V from
142 the third plane to r.
145 Two planes
, samples Y from the first plane to r
in
146 the shader
, U and V from the second plane to rg.
148 EGL_TEXTURE_Y_XUXV_WL
149 Two planes
, samples Y from the first plane to r
in
150 the shader
, U and V from the second plane to g and a.
152 EGL_TEXTURE_EXTERNAL_WL
153 Treated as a single plane texture
, but sampled with
154 samplerExternalOES according to OES_EGL_image_external
156 After querying the wl_buffer layout
, create EGLImages
for the
157 planes by calling eglCreateImageKHR with wl_buffer as
158 EGLClientBuffer
, EGL_WAYLAND_BUFFER_WL as the target
, NULL
159 context. If no attributes are given
, an EGLImage will be created
160 for the first plane. For multi
-planar buffers
, specify the plane
161 to create the EGLImage
for by using the EGL_WAYLAND_PLANE_WL
162 attribute. The value of the attribute is the index of the plane
,
163 as defined by the buffer format. Writing to an EGLImage created
164 from a wl_buffer
in any way
(such as glTexImage2D
, binding the
165 EGLImage as a renderbuffer etc
) will result
in undefined behavior.
167 Further
, eglQueryWaylandBufferWL accepts attributes EGL_WIDTH and
168 EGL_HEIGHT to query the width and height of the wl_buffer.
170 Also
, eglQueryWaylandBufferWL may accept
171 EGL_WAYLAND_Y_INVERTED_WL attribute to query orientation of
172 wl_buffer. If EGL_WAYLAND_Y_INVERTED_WL is supported
173 eglQueryWaylandBufferWL returns EGL_TRUE and value is a boolean
174 that tells
if wl_buffer is y
-inverted or not. If
175 EGL_WAYLAND_Y_INVERTED_WL is not supported
176 eglQueryWaylandBufferWL returns EGL_FALSE
, in that
case
177 wl_buffer should be treated as
if value of
178 EGL_WAYLAND_Y_INVERTED_WL was EGL_TRUE.
184 Version 1, March
1, 2011
185 Initial draft
(Benjamin Franzke
)
186 Version 2, July
5, 2012
187 Add EGL_WAYLAND_PLANE_WL attribute to allow creating an EGLImage
188 for different planes of planar buffer.
(Kristian Høgsberg
)
189 Version 3, July
10, 2012
190 Add eglQueryWaylandBufferWL and the various buffer
191 formats.
(Kristian Høgsberg
)
192 Version 4, July
19, 2012
193 Use EGL_TEXTURE_FORMAT
, EGL_TEXTURE_RGB
, and EGL_TEXTURE_RGBA
,
194 and just define the new YUV texture formats. Add support
for
195 EGL_WIDTH and EGL_HEIGHT
in the query attributes
(Kristian Høgsberg
)
196 Version 5, July
16, 2013
197 Change eglQueryWaylandBufferWL to take a resource pointer to the
198 buffer instead of a pointer to a struct wl_buffer
, as the latter has
199 been deprecated.
(Ander Conselvan de Oliveira
)
200 Version 6, September
16, 2013
201 Add EGL_WAYLAND_Y_INVERTED_WL attribute to allow specifying
202 wl_buffer's orientation.