1*61046927SAndroid Build Coastguard Worker /**************************************************************************
2*61046927SAndroid Build Coastguard Worker *
3*61046927SAndroid Build Coastguard Worker * Copyright 2008 VMware, Inc.
4*61046927SAndroid Build Coastguard Worker * Copyright 2009-2010 Chia-I Wu <[email protected]>
5*61046927SAndroid Build Coastguard Worker * Copyright 2010-2011 LunarG, Inc.
6*61046927SAndroid Build Coastguard Worker * All Rights Reserved.
7*61046927SAndroid Build Coastguard Worker *
8*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
9*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the
10*61046927SAndroid Build Coastguard Worker * "Software"), to deal in the Software without restriction, including
11*61046927SAndroid Build Coastguard Worker * without limitation the rights to use, copy, modify, merge, publish,
12*61046927SAndroid Build Coastguard Worker * distribute, sub license, and/or sell copies of the Software, and to
13*61046927SAndroid Build Coastguard Worker * permit persons to whom the Software is furnished to do so, subject to
14*61046927SAndroid Build Coastguard Worker * the following conditions:
15*61046927SAndroid Build Coastguard Worker *
16*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the
17*61046927SAndroid Build Coastguard Worker * next paragraph) shall be included in all copies or substantial portions
18*61046927SAndroid Build Coastguard Worker * of the Software.
19*61046927SAndroid Build Coastguard Worker *
20*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25*61046927SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26*61046927SAndroid Build Coastguard Worker * DEALINGS IN THE SOFTWARE.
27*61046927SAndroid Build Coastguard Worker *
28*61046927SAndroid Build Coastguard Worker **************************************************************************/
29*61046927SAndroid Build Coastguard Worker
30*61046927SAndroid Build Coastguard Worker #ifndef EGLDISPLAY_INCLUDED
31*61046927SAndroid Build Coastguard Worker #define EGLDISPLAY_INCLUDED
32*61046927SAndroid Build Coastguard Worker
33*61046927SAndroid Build Coastguard Worker #include "util/rwlock.h"
34*61046927SAndroid Build Coastguard Worker #include "util/simple_mtx.h"
35*61046927SAndroid Build Coastguard Worker
36*61046927SAndroid Build Coastguard Worker #include "eglarray.h"
37*61046927SAndroid Build Coastguard Worker #include "egldefines.h"
38*61046927SAndroid Build Coastguard Worker #include "egltypedefs.h"
39*61046927SAndroid Build Coastguard Worker
40*61046927SAndroid Build Coastguard Worker #ifdef HAVE_X11_PLATFORM
41*61046927SAndroid Build Coastguard Worker #include <X11/Xlib.h>
42*61046927SAndroid Build Coastguard Worker #endif
43*61046927SAndroid Build Coastguard Worker
44*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
45*61046927SAndroid Build Coastguard Worker extern "C" {
46*61046927SAndroid Build Coastguard Worker #endif
47*61046927SAndroid Build Coastguard Worker
48*61046927SAndroid Build Coastguard Worker enum _egl_platform_type {
49*61046927SAndroid Build Coastguard Worker _EGL_PLATFORM_X11,
50*61046927SAndroid Build Coastguard Worker _EGL_PLATFORM_XCB,
51*61046927SAndroid Build Coastguard Worker _EGL_PLATFORM_WAYLAND,
52*61046927SAndroid Build Coastguard Worker _EGL_PLATFORM_DRM,
53*61046927SAndroid Build Coastguard Worker _EGL_PLATFORM_ANDROID,
54*61046927SAndroid Build Coastguard Worker _EGL_PLATFORM_HAIKU,
55*61046927SAndroid Build Coastguard Worker _EGL_PLATFORM_SURFACELESS,
56*61046927SAndroid Build Coastguard Worker _EGL_PLATFORM_DEVICE,
57*61046927SAndroid Build Coastguard Worker _EGL_PLATFORM_WINDOWS,
58*61046927SAndroid Build Coastguard Worker
59*61046927SAndroid Build Coastguard Worker _EGL_NUM_PLATFORMS,
60*61046927SAndroid Build Coastguard Worker _EGL_INVALID_PLATFORM = -1
61*61046927SAndroid Build Coastguard Worker };
62*61046927SAndroid Build Coastguard Worker typedef enum _egl_platform_type _EGLPlatformType;
63*61046927SAndroid Build Coastguard Worker
64*61046927SAndroid Build Coastguard Worker enum _egl_resource_type {
65*61046927SAndroid Build Coastguard Worker _EGL_RESOURCE_CONTEXT,
66*61046927SAndroid Build Coastguard Worker _EGL_RESOURCE_SURFACE,
67*61046927SAndroid Build Coastguard Worker _EGL_RESOURCE_IMAGE,
68*61046927SAndroid Build Coastguard Worker _EGL_RESOURCE_SYNC,
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Worker _EGL_NUM_RESOURCES
71*61046927SAndroid Build Coastguard Worker };
72*61046927SAndroid Build Coastguard Worker /* this cannot and need not go into egltypedefs.h */
73*61046927SAndroid Build Coastguard Worker typedef enum _egl_resource_type _EGLResourceType;
74*61046927SAndroid Build Coastguard Worker
75*61046927SAndroid Build Coastguard Worker /**
76*61046927SAndroid Build Coastguard Worker * A resource of a display.
77*61046927SAndroid Build Coastguard Worker */
78*61046927SAndroid Build Coastguard Worker struct _egl_resource {
79*61046927SAndroid Build Coastguard Worker /* which display the resource belongs to */
80*61046927SAndroid Build Coastguard Worker _EGLDisplay *Display;
81*61046927SAndroid Build Coastguard Worker EGLBoolean IsLinked;
82*61046927SAndroid Build Coastguard Worker EGLint RefCount;
83*61046927SAndroid Build Coastguard Worker
84*61046927SAndroid Build Coastguard Worker EGLLabelKHR Label;
85*61046927SAndroid Build Coastguard Worker
86*61046927SAndroid Build Coastguard Worker /* used to link resources of the same type */
87*61046927SAndroid Build Coastguard Worker _EGLResource *Next;
88*61046927SAndroid Build Coastguard Worker };
89*61046927SAndroid Build Coastguard Worker
90*61046927SAndroid Build Coastguard Worker /**
91*61046927SAndroid Build Coastguard Worker * Optional EGL extensions info.
92*61046927SAndroid Build Coastguard Worker */
93*61046927SAndroid Build Coastguard Worker struct _egl_extensions {
94*61046927SAndroid Build Coastguard Worker /* Please keep these sorted alphabetically. */
95*61046927SAndroid Build Coastguard Worker EGLBoolean ANDROID_blob_cache;
96*61046927SAndroid Build Coastguard Worker EGLBoolean ANDROID_framebuffer_target;
97*61046927SAndroid Build Coastguard Worker EGLBoolean ANDROID_image_native_buffer;
98*61046927SAndroid Build Coastguard Worker EGLBoolean ANDROID_native_fence_sync;
99*61046927SAndroid Build Coastguard Worker EGLBoolean ANDROID_recordable;
100*61046927SAndroid Build Coastguard Worker
101*61046927SAndroid Build Coastguard Worker EGLBoolean ANGLE_sync_control_rate;
102*61046927SAndroid Build Coastguard Worker EGLBoolean CHROMIUM_sync_control;
103*61046927SAndroid Build Coastguard Worker
104*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_buffer_age;
105*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_config_select_group;
106*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_create_context_robustness;
107*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_image_dma_buf_import;
108*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_image_dma_buf_import_modifiers;
109*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_pixel_format_float;
110*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_present_opaque;
111*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_protected_content;
112*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_protected_surface;
113*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_query_reset_notification_strategy;
114*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_surface_compression;
115*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_surface_CTA861_3_metadata;
116*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_surface_SMPTE2086_metadata;
117*61046927SAndroid Build Coastguard Worker EGLBoolean EXT_swap_buffers_with_damage;
118*61046927SAndroid Build Coastguard Worker
119*61046927SAndroid Build Coastguard Worker unsigned int IMG_context_priority;
120*61046927SAndroid Build Coastguard Worker #define __EGL_CONTEXT_PRIORITY_LOW_BIT 0
121*61046927SAndroid Build Coastguard Worker #define __EGL_CONTEXT_PRIORITY_MEDIUM_BIT 1
122*61046927SAndroid Build Coastguard Worker #define __EGL_CONTEXT_PRIORITY_HIGH_BIT 2
123*61046927SAndroid Build Coastguard Worker
124*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_cl_event2;
125*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_config_attribs;
126*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_context_flush_control;
127*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_create_context;
128*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_create_context_no_error;
129*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_fence_sync;
130*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_get_all_proc_addresses;
131*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_gl_colorspace;
132*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_gl_renderbuffer_image;
133*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_gl_texture_2D_image;
134*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_gl_texture_3D_image;
135*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_gl_texture_cubemap_image;
136*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_image;
137*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_image_base;
138*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_image_pixmap;
139*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_mutable_render_buffer;
140*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_no_config_context;
141*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_partial_update;
142*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_reusable_sync;
143*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_surfaceless_context;
144*61046927SAndroid Build Coastguard Worker EGLBoolean KHR_wait_sync;
145*61046927SAndroid Build Coastguard Worker
146*61046927SAndroid Build Coastguard Worker EGLBoolean MESA_drm_image;
147*61046927SAndroid Build Coastguard Worker EGLBoolean MESA_gl_interop;
148*61046927SAndroid Build Coastguard Worker EGLBoolean MESA_image_dma_buf_export;
149*61046927SAndroid Build Coastguard Worker EGLBoolean MESA_query_driver;
150*61046927SAndroid Build Coastguard Worker EGLBoolean MESA_x11_native_visual_id;
151*61046927SAndroid Build Coastguard Worker
152*61046927SAndroid Build Coastguard Worker EGLBoolean NOK_swap_region;
153*61046927SAndroid Build Coastguard Worker EGLBoolean NOK_texture_from_pixmap;
154*61046927SAndroid Build Coastguard Worker
155*61046927SAndroid Build Coastguard Worker EGLBoolean NV_post_sub_buffer;
156*61046927SAndroid Build Coastguard Worker
157*61046927SAndroid Build Coastguard Worker EGLBoolean WL_bind_wayland_display;
158*61046927SAndroid Build Coastguard Worker EGLBoolean WL_create_wayland_buffer_from_image;
159*61046927SAndroid Build Coastguard Worker };
160*61046927SAndroid Build Coastguard Worker
161*61046927SAndroid Build Coastguard Worker struct _egl_display {
162*61046927SAndroid Build Coastguard Worker /* used to link displays */
163*61046927SAndroid Build Coastguard Worker _EGLDisplay *Next;
164*61046927SAndroid Build Coastguard Worker
165*61046927SAndroid Build Coastguard Worker /**
166*61046927SAndroid Build Coastguard Worker * The big-display-lock (BDL) which protects our internal state. EGL
167*61046927SAndroid Build Coastguard Worker * drivers should use their own locking, as needed, to protect their
168*61046927SAndroid Build Coastguard Worker * own state, rather than relying on this.
169*61046927SAndroid Build Coastguard Worker */
170*61046927SAndroid Build Coastguard Worker simple_mtx_t Mutex;
171*61046927SAndroid Build Coastguard Worker
172*61046927SAndroid Build Coastguard Worker /**
173*61046927SAndroid Build Coastguard Worker * The spec appears to allow eglTerminate() to race with more or less
174*61046927SAndroid Build Coastguard Worker * any other egl call. To allow for this, while relaxing the BDL to
175*61046927SAndroid Build Coastguard Worker * allow other egl calls to happen in parallel, a rwlock is used. All
176*61046927SAndroid Build Coastguard Worker * points where the BDL lock is acquired also acquire TerminateLock
177*61046927SAndroid Build Coastguard Worker * for reading, while eglTerminate() itself acquires the TerminateLock
178*61046927SAndroid Build Coastguard Worker * for writing.
179*61046927SAndroid Build Coastguard Worker *
180*61046927SAndroid Build Coastguard Worker * Note, we could conceivably just replace the BDL with a single
181*61046927SAndroid Build Coastguard Worker * rwlock. But there are a couple shortcomings of u_rwlock:
182*61046927SAndroid Build Coastguard Worker *
183*61046927SAndroid Build Coastguard Worker * 1) The WIN32 implementation does not allow promoting a read-
184*61046927SAndroid Build Coastguard Worker * lock to write-lock, nor recursive locking, whereas the
185*61046927SAndroid Build Coastguard Worker * pthread based implementation does. Because of this, it
186*61046927SAndroid Build Coastguard Worker * would be difficult to keep the eglapi layer portable if
187*61046927SAndroid Build Coastguard Worker * we depended on any less-than-trivial rwlock usage.
188*61046927SAndroid Build Coastguard Worker *
189*61046927SAndroid Build Coastguard Worker * 2) We'd lose simple_mtx_assert_locked().
190*61046927SAndroid Build Coastguard Worker */
191*61046927SAndroid Build Coastguard Worker struct u_rwlock TerminateLock;
192*61046927SAndroid Build Coastguard Worker
193*61046927SAndroid Build Coastguard Worker _EGLPlatformType Platform; /**< The type of the platform display */
194*61046927SAndroid Build Coastguard Worker void *PlatformDisplay; /**< A pointer to the platform display */
195*61046927SAndroid Build Coastguard Worker
196*61046927SAndroid Build Coastguard Worker _EGLDevice *Device; /**< Device backing the display */
197*61046927SAndroid Build Coastguard Worker const _EGLDriver *Driver; /**< Matched driver of the display */
198*61046927SAndroid Build Coastguard Worker EGLBoolean Initialized; /**< True if the display is initialized */
199*61046927SAndroid Build Coastguard Worker
200*61046927SAndroid Build Coastguard Worker /* options that affect how the driver initializes the display */
201*61046927SAndroid Build Coastguard Worker struct {
202*61046927SAndroid Build Coastguard Worker EGLBoolean Zink; /**< Use kopper only */
203*61046927SAndroid Build Coastguard Worker EGLBoolean FallbackZink; /**< True if zink is tried as fallback */
204*61046927SAndroid Build Coastguard Worker EGLBoolean ForceSoftware; /**< Use software path only */
205*61046927SAndroid Build Coastguard Worker EGLBoolean GalliumHudWarn; /**< Using hud, warn when querying buffer age */
206*61046927SAndroid Build Coastguard Worker EGLAttrib *Attribs; /**< Platform-specific options */
207*61046927SAndroid Build Coastguard Worker int fd; /**< Platform device specific, local fd */
208*61046927SAndroid Build Coastguard Worker } Options;
209*61046927SAndroid Build Coastguard Worker
210*61046927SAndroid Build Coastguard Worker /* these fields are set by the driver during init */
211*61046927SAndroid Build Coastguard Worker void *DriverData; /**< Driver private data */
212*61046927SAndroid Build Coastguard Worker EGLint Version; /**< EGL version major*10+minor */
213*61046927SAndroid Build Coastguard Worker EGLint ClientAPIs; /**< Bitmask of APIs supported (EGL_xxx_BIT) */
214*61046927SAndroid Build Coastguard Worker _EGLExtensions Extensions; /**< Extensions supported */
215*61046927SAndroid Build Coastguard Worker EGLBoolean RobustBufferAccess; /**< Supports robust buffer access behavior */
216*61046927SAndroid Build Coastguard Worker
217*61046927SAndroid Build Coastguard Worker /* these fields are derived from above */
218*61046927SAndroid Build Coastguard Worker char VersionString[100]; /**< EGL_VERSION */
219*61046927SAndroid Build Coastguard Worker char ClientAPIsString[100]; /**< EGL_CLIENT_APIS */
220*61046927SAndroid Build Coastguard Worker char ExtensionsString[_EGL_MAX_EXTENSIONS_LEN]; /**< EGL_EXTENSIONS */
221*61046927SAndroid Build Coastguard Worker
222*61046927SAndroid Build Coastguard Worker _EGLArray *Configs;
223*61046927SAndroid Build Coastguard Worker
224*61046927SAndroid Build Coastguard Worker /* lists of resources */
225*61046927SAndroid Build Coastguard Worker _EGLResource *ResourceLists[_EGL_NUM_RESOURCES];
226*61046927SAndroid Build Coastguard Worker
227*61046927SAndroid Build Coastguard Worker EGLLabelKHR Label;
228*61046927SAndroid Build Coastguard Worker
229*61046927SAndroid Build Coastguard Worker EGLSetBlobFuncANDROID BlobCacheSet;
230*61046927SAndroid Build Coastguard Worker EGLGetBlobFuncANDROID BlobCacheGet;
231*61046927SAndroid Build Coastguard Worker };
232*61046927SAndroid Build Coastguard Worker
233*61046927SAndroid Build Coastguard Worker extern _EGLDisplay *
234*61046927SAndroid Build Coastguard Worker _eglLockDisplay(EGLDisplay dpy);
235*61046927SAndroid Build Coastguard Worker
236*61046927SAndroid Build Coastguard Worker extern void
237*61046927SAndroid Build Coastguard Worker _eglUnlockDisplay(_EGLDisplay *disp);
238*61046927SAndroid Build Coastguard Worker
239*61046927SAndroid Build Coastguard Worker extern _EGLPlatformType
240*61046927SAndroid Build Coastguard Worker _eglGetNativePlatform(void *nativeDisplay);
241*61046927SAndroid Build Coastguard Worker
242*61046927SAndroid Build Coastguard Worker extern void
243*61046927SAndroid Build Coastguard Worker _eglFiniDisplay(void);
244*61046927SAndroid Build Coastguard Worker
245*61046927SAndroid Build Coastguard Worker extern _EGLDisplay *
246*61046927SAndroid Build Coastguard Worker _eglFindDisplay(_EGLPlatformType plat, void *plat_dpy, const EGLAttrib *attr);
247*61046927SAndroid Build Coastguard Worker
248*61046927SAndroid Build Coastguard Worker extern void
249*61046927SAndroid Build Coastguard Worker _eglReleaseDisplayResources(_EGLDisplay *disp);
250*61046927SAndroid Build Coastguard Worker
251*61046927SAndroid Build Coastguard Worker extern void
252*61046927SAndroid Build Coastguard Worker _eglCleanupDisplay(_EGLDisplay *disp);
253*61046927SAndroid Build Coastguard Worker
254*61046927SAndroid Build Coastguard Worker extern EGLBoolean
255*61046927SAndroid Build Coastguard Worker _eglCheckResource(void *res, _EGLResourceType type, _EGLDisplay *disp);
256*61046927SAndroid Build Coastguard Worker
257*61046927SAndroid Build Coastguard Worker /**
258*61046927SAndroid Build Coastguard Worker * Return the handle of a linked display, or EGL_NO_DISPLAY.
259*61046927SAndroid Build Coastguard Worker */
260*61046927SAndroid Build Coastguard Worker static inline EGLDisplay
_eglGetDisplayHandle(_EGLDisplay * disp)261*61046927SAndroid Build Coastguard Worker _eglGetDisplayHandle(_EGLDisplay *disp)
262*61046927SAndroid Build Coastguard Worker {
263*61046927SAndroid Build Coastguard Worker return (EGLDisplay)((disp) ? disp : EGL_NO_DISPLAY);
264*61046927SAndroid Build Coastguard Worker }
265*61046927SAndroid Build Coastguard Worker
266*61046927SAndroid Build Coastguard Worker static inline EGLBoolean
_eglHasAttrib(_EGLDisplay * disp,EGLAttrib attrib)267*61046927SAndroid Build Coastguard Worker _eglHasAttrib(_EGLDisplay *disp, EGLAttrib attrib)
268*61046927SAndroid Build Coastguard Worker {
269*61046927SAndroid Build Coastguard Worker EGLAttrib *attribs = disp->Options.Attribs;
270*61046927SAndroid Build Coastguard Worker
271*61046927SAndroid Build Coastguard Worker if (!attribs) {
272*61046927SAndroid Build Coastguard Worker return EGL_FALSE;
273*61046927SAndroid Build Coastguard Worker }
274*61046927SAndroid Build Coastguard Worker
275*61046927SAndroid Build Coastguard Worker for (int i = 0; attribs[i] != EGL_NONE; i += 2) {
276*61046927SAndroid Build Coastguard Worker if (attrib == attribs[i]) {
277*61046927SAndroid Build Coastguard Worker return EGL_TRUE;
278*61046927SAndroid Build Coastguard Worker }
279*61046927SAndroid Build Coastguard Worker }
280*61046927SAndroid Build Coastguard Worker return EGL_FALSE;
281*61046927SAndroid Build Coastguard Worker }
282*61046927SAndroid Build Coastguard Worker
283*61046927SAndroid Build Coastguard Worker extern void
284*61046927SAndroid Build Coastguard Worker _eglInitResource(_EGLResource *res, EGLint size, _EGLDisplay *disp);
285*61046927SAndroid Build Coastguard Worker
286*61046927SAndroid Build Coastguard Worker extern void
287*61046927SAndroid Build Coastguard Worker _eglGetResource(_EGLResource *res);
288*61046927SAndroid Build Coastguard Worker
289*61046927SAndroid Build Coastguard Worker extern EGLBoolean
290*61046927SAndroid Build Coastguard Worker _eglPutResource(_EGLResource *res);
291*61046927SAndroid Build Coastguard Worker
292*61046927SAndroid Build Coastguard Worker extern void
293*61046927SAndroid Build Coastguard Worker _eglLinkResource(_EGLResource *res, _EGLResourceType type);
294*61046927SAndroid Build Coastguard Worker
295*61046927SAndroid Build Coastguard Worker extern void
296*61046927SAndroid Build Coastguard Worker _eglUnlinkResource(_EGLResource *res, _EGLResourceType type);
297*61046927SAndroid Build Coastguard Worker
298*61046927SAndroid Build Coastguard Worker /**
299*61046927SAndroid Build Coastguard Worker * Return true if the resource is linked.
300*61046927SAndroid Build Coastguard Worker */
301*61046927SAndroid Build Coastguard Worker static inline EGLBoolean
_eglIsResourceLinked(_EGLResource * res)302*61046927SAndroid Build Coastguard Worker _eglIsResourceLinked(_EGLResource *res)
303*61046927SAndroid Build Coastguard Worker {
304*61046927SAndroid Build Coastguard Worker return res->IsLinked;
305*61046927SAndroid Build Coastguard Worker }
306*61046927SAndroid Build Coastguard Worker
307*61046927SAndroid Build Coastguard Worker static inline size_t
_eglNumAttribs(const EGLAttrib * attribs)308*61046927SAndroid Build Coastguard Worker _eglNumAttribs(const EGLAttrib *attribs)
309*61046927SAndroid Build Coastguard Worker {
310*61046927SAndroid Build Coastguard Worker size_t len = 0;
311*61046927SAndroid Build Coastguard Worker
312*61046927SAndroid Build Coastguard Worker if (attribs) {
313*61046927SAndroid Build Coastguard Worker while (attribs[len] != EGL_NONE)
314*61046927SAndroid Build Coastguard Worker len += 2;
315*61046927SAndroid Build Coastguard Worker len++;
316*61046927SAndroid Build Coastguard Worker }
317*61046927SAndroid Build Coastguard Worker return len;
318*61046927SAndroid Build Coastguard Worker }
319*61046927SAndroid Build Coastguard Worker
320*61046927SAndroid Build Coastguard Worker #ifdef HAVE_X11_PLATFORM
321*61046927SAndroid Build Coastguard Worker _EGLDisplay *
322*61046927SAndroid Build Coastguard Worker _eglGetX11Display(Display *native_display, const EGLAttrib *attrib_list);
323*61046927SAndroid Build Coastguard Worker #endif
324*61046927SAndroid Build Coastguard Worker
325*61046927SAndroid Build Coastguard Worker #ifdef HAVE_XCB_PLATFORM
326*61046927SAndroid Build Coastguard Worker typedef struct xcb_connection_t xcb_connection_t;
327*61046927SAndroid Build Coastguard Worker _EGLDisplay *
328*61046927SAndroid Build Coastguard Worker _eglGetXcbDisplay(xcb_connection_t *native_display,
329*61046927SAndroid Build Coastguard Worker const EGLAttrib *attrib_list);
330*61046927SAndroid Build Coastguard Worker #endif
331*61046927SAndroid Build Coastguard Worker
332*61046927SAndroid Build Coastguard Worker #ifdef HAVE_DRM_PLATFORM
333*61046927SAndroid Build Coastguard Worker struct gbm_device;
334*61046927SAndroid Build Coastguard Worker
335*61046927SAndroid Build Coastguard Worker _EGLDisplay *
336*61046927SAndroid Build Coastguard Worker _eglGetGbmDisplay(struct gbm_device *native_display,
337*61046927SAndroid Build Coastguard Worker const EGLAttrib *attrib_list);
338*61046927SAndroid Build Coastguard Worker #endif
339*61046927SAndroid Build Coastguard Worker
340*61046927SAndroid Build Coastguard Worker #ifdef HAVE_WAYLAND_PLATFORM
341*61046927SAndroid Build Coastguard Worker struct wl_display;
342*61046927SAndroid Build Coastguard Worker
343*61046927SAndroid Build Coastguard Worker _EGLDisplay *
344*61046927SAndroid Build Coastguard Worker _eglGetWaylandDisplay(struct wl_display *native_display,
345*61046927SAndroid Build Coastguard Worker const EGLAttrib *attrib_list);
346*61046927SAndroid Build Coastguard Worker #endif
347*61046927SAndroid Build Coastguard Worker
348*61046927SAndroid Build Coastguard Worker _EGLDisplay *
349*61046927SAndroid Build Coastguard Worker _eglGetSurfacelessDisplay(void *native_display, const EGLAttrib *attrib_list);
350*61046927SAndroid Build Coastguard Worker
351*61046927SAndroid Build Coastguard Worker #ifdef HAVE_ANDROID_PLATFORM
352*61046927SAndroid Build Coastguard Worker _EGLDisplay *
353*61046927SAndroid Build Coastguard Worker _eglGetAndroidDisplay(void *native_display, const EGLAttrib *attrib_list);
354*61046927SAndroid Build Coastguard Worker #endif
355*61046927SAndroid Build Coastguard Worker
356*61046927SAndroid Build Coastguard Worker _EGLDisplay *
357*61046927SAndroid Build Coastguard Worker _eglGetDeviceDisplay(void *native_display, const EGLAttrib *attrib_list);
358*61046927SAndroid Build Coastguard Worker
359*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
360*61046927SAndroid Build Coastguard Worker }
361*61046927SAndroid Build Coastguard Worker #endif
362*61046927SAndroid Build Coastguard Worker
363*61046927SAndroid Build Coastguard Worker #endif /* EGLDISPLAY_INCLUDED */
364