1 #ifndef EGLDISPLAY_INCLUDED
2 #define EGLDISPLAY_INCLUDED
8 #include "egltypedefs.h"
9 #include "egldefines.h"
10 #include "eglcontext.h"
11 #include "eglsurface.h"
15 * Optional EGL extensions info.
17 struct _egl_extensions
19 EGLBoolean MESA_screen_surface
;
20 EGLBoolean MESA_copy_context
;
22 char String
[_EGL_MAX_EXTENSIONS_LEN
];
28 /* used to link displays */
31 EGLNativeDisplayType NativeDisplay
;
33 const char *DriverName
;
35 void *DriverData
; /* private to driver */
37 int APImajor
, APIminor
; /**< as returned by eglInitialize() */
38 char Version
[1000]; /**< initialized from APImajor/minor, DriverName */
40 /** Bitmask of supported APIs (EGL_xx_BIT) set by the driver during init */
41 EGLint ClientAPIsMask
;
42 char ClientAPIs
[1000]; /**< updated by eglQueryString */
44 _EGLExtensions Extensions
;
49 _EGLScreen
**Screens
; /* array [NumScreens] */
52 _EGLConfig
**Configs
; /* array [NumConfigs] of ptr to _EGLConfig */
54 /* lists of linked contexts and surface */
55 _EGLContext
*ContextList
;
56 _EGLSurface
*SurfaceList
;
58 #ifdef _EGL_PLATFORM_X
65 _eglFiniDisplay(void);
69 _eglNewDisplay(NativeDisplayType displayName
);
73 _eglLinkDisplay(_EGLDisplay
*dpy
);
77 _eglUnlinkDisplay(_EGLDisplay
*dpy
);
81 _eglFindDisplay(NativeDisplayType nativeDisplay
);
85 _eglReleaseDisplayResources(_EGLDriver
*drv
, _EGLDisplay
*dpy
);
89 _eglCleanupDisplay(_EGLDisplay
*disp
);
93 _eglLinkContext(_EGLContext
*ctx
, _EGLDisplay
*dpy
);
97 _eglUnlinkContext(_EGLContext
*ctx
);
101 _eglLinkSurface(_EGLSurface
*surf
, _EGLDisplay
*dpy
);
105 _eglUnlinkSurface(_EGLSurface
*surf
);
109 * Lookup a handle to find the linked display.
110 * Return NULL if the handle has no corresponding linked display.
112 static INLINE _EGLDisplay
*
113 _eglLookupDisplay(EGLDisplay display
)
115 _EGLDisplay
*dpy
= (_EGLDisplay
*) display
;
121 * Return the handle of a linked display, or EGL_NO_DISPLAY.
123 static INLINE EGLDisplay
124 _eglGetDisplayHandle(_EGLDisplay
*dpy
)
126 return (EGLDisplay
) ((dpy
) ? dpy
: EGL_NO_DISPLAY
);
131 * Return true if the display is linked.
133 static INLINE EGLBoolean
134 _eglIsDisplayLinked(_EGLDisplay
*dpy
)
136 return (EGLBoolean
) (_eglGetDisplayHandle(dpy
) != EGL_NO_DISPLAY
);
141 * Lookup a handle to find the linked context.
142 * Return NULL if the handle has no corresponding linked context.
144 static INLINE _EGLContext
*
145 _eglLookupContext(EGLContext context
, _EGLDisplay
*dpy
)
147 _EGLContext
*ctx
= (_EGLContext
*) context
;
148 return (ctx
&& ctx
->Display
) ? ctx
: NULL
;
153 * Return the handle of a linked context, or EGL_NO_CONTEXT.
155 static INLINE EGLContext
156 _eglGetContextHandle(_EGLContext
*ctx
)
158 return (EGLContext
) ((ctx
&& ctx
->Display
) ? ctx
: EGL_NO_CONTEXT
);
163 * Return true if the context is linked to a display.
165 static INLINE EGLBoolean
166 _eglIsContextLinked(_EGLContext
*ctx
)
168 return (EGLBoolean
) (_eglGetContextHandle(ctx
) != EGL_NO_CONTEXT
);
173 * Lookup a handle to find the linked surface.
174 * Return NULL if the handle has no corresponding linked surface.
176 static INLINE _EGLSurface
*
177 _eglLookupSurface(EGLSurface surface
, _EGLDisplay
*dpy
)
179 _EGLSurface
*surf
= (_EGLSurface
*) surface
;
180 return (surf
&& surf
->Display
) ? surf
: NULL
;
185 * Return the handle of a linked surface, or EGL_NO_SURFACE.
187 static INLINE EGLSurface
188 _eglGetSurfaceHandle(_EGLSurface
*surf
)
190 return (EGLSurface
) ((surf
&& surf
->Display
) ? surf
: EGL_NO_SURFACE
);
195 * Return true if the surface is linked to a display.
197 static INLINE EGLBoolean
198 _eglIsSurfaceLinked(_EGLSurface
*surf
)
200 return (EGLBoolean
) (_eglGetSurfaceHandle(surf
) != EGL_NO_SURFACE
);
205 * Cast an unsigned int to a pointer.
208 _eglUIntToPointer(unsigned int v
)
210 return (void *) ((uintptr_t) v
);
215 * Cast a pointer to an unsigned int. The pointer must be one that is
216 * returned by _eglUIntToPointer.
218 static INLINE
unsigned int
219 _eglPointerToUInt(const void *p
)
221 return (unsigned int) ((uintptr_t) p
);
225 #endif /* EGLDISPLAY_INCLUDED */