Mesa EGL
+EGL
The current version of EGL in Mesa implements EGL 1.4. More information about EGL can be found at - -http://www.khronos.org/egl/.
+ +https://www.khronos.org/egl/.The Mesa's implementation of EGL uses a driver architecture. The main
library (libEGL
) is window system neutral. It provides the EGL
@@ -33,18 +33,21 @@ directly dispatched to the drivers.
-
-
Run
+configure
with the desired client APIs and enable -the driver for your hardware. For exampleConfigure your build with the desired client APIs and enable +the driver for your hardware. For example:
- $ ./configure --enable-gles1 --enable-gles2 \ - --with-dri-drivers=... \ - --with-gallium-drivers=... +$ meson configure \ + -D egl=true \ + -D gles1=true \ + -D gles2=true \ + -D dri-drivers=... \ + -D gallium-drivers=...
The main library and OpenGL is enabled by default. The first two options above enables OpenGL ES 1.x and 2.x. The last two -options enables the listed classic and and Gallium drivers respectively.
+options enables the listed classic and Gallium drivers respectively.
@@ -61,7 +64,7 @@ or more EGL drivers.
time
--enable-egl
+-D egl=true
-
By default, EGL is enabled. When disabled, the main library and the drivers @@ -69,40 +72,26 @@ will not be built.
- --with-egl-driver-dir
--
-
-
The directory EGL drivers should be installed to. If not specified, EGL -drivers will be installed to
- -${libdir}/egl
.
-
- --enable-gallium-egl
--
-
-
Enable the optional
- -egl_gallium
driver.
-
- --with-egl-platforms
+-D platforms=...
-
List the platforms (window systems) to support. Its argument is a comma -seprated string such as
+the main library to decide the native platform.--with-egl-platforms=x11,drm
. It decides +separated string such as-D platforms=x11,drm
. It decides the platforms a driver may support. The first listed platform is also used by -the main library to decide the native platform: the platform the EGL native -types such asEGLNativeDisplayType
or -EGLNativeWindowType
defined for.The available platforms are
x11
,drm
, -fbdev
, andgdi
. Thegdi
platform can -only be built with SCons. Unless for special needs, the build system should +wayland
,surfaceless
,android
, +andhaiku
. +Theandroid
platform can either be built as a system +component, part of AOSP, usingAndroid.mk
files, or +cross-compiled using appropriate options. +Unless for special needs, the build system should select the right platforms automatically.
- --enable-gles1
---enable-gles2
+-D gles1=true
and-D gles2=true
-
These options enable OpenGL ES support in OpenGL. The result is one big @@ -110,7 +99,7 @@ internal library that supports multiple APIs.
- --enable-shared-glapi
+-D shared-glapi=true
-
By default,
libGL
has its own copy oflibglapi
. @@ -119,13 +108,6 @@ is required if applications mix OpenGL and OpenGL ES.
- --enable-openvg
--
-
-
OpenVG must be explicitly enabled by this option.
- -
-
EGL_DRIVERS_PATH
--
-
-
By default, the main library will look for drivers in the directory where -the drivers are installed to. This variable specifies a list of -colon-separated directories where the main library will look for drivers, in -addition to the default directory. This variable is ignored for setuid/setgid -binaries.
- -This variable is usually set to test an uninstalled build. For example, one -may set
- -- $ export LD_LIBRARY_PATH=$mesa/lib - $ export EGL_DRIVERS_PATH=$mesa/lib/egl -
- -to test a build without installation
- -
-
- EGL_DRIVER
--
-
-
This variable specifies a full path to or the name of an EGL driver. It -forces the specified EGL driver to be loaded. It comes in handy when one wants -to test a specific driver. This variable is ignored for setuid/setgid -binaries.
- -
-
EGL_PLATFORM
-
This variable specifies the native platform. The valid values are the same -as those for
+--with-egl-platforms
. When the variable is not set, +as those for-D platforms=...
. When the variable is not set, the main library uses the first platform listed in ---with-egl-platforms
as the native platform.-D platforms=...
as the native platform.Extensions like
values are:EGL_MESA_drm_display
define new functions to create displays for non-native platforms. These extensions are usually used by @@ -194,14 +145,6 @@ probably required only for some of the demos found in mesa/demo repository.debug
,info
,warning
, andfatal
. -
-
- EGL_SOFTWARE
--
-
-
For drivers that support both hardware and software rendering, setting this -variable to true forces the use of software rendering.
- egl_gallium
--
-
-
This driver is based on Gallium3D. It supports all rendering APIs and -hardwares supported by Gallium3D. It is the only driver that supports OpenVG. -The supported platforms are X11, DRM, FBDEV, and GDI.
- -This driver comes with its own hardware drivers -(
- -pipe_<hw>
) and client API modules -(st_<api>
).
-
- egl_glx
--
-
-
This driver provides a wrapper to GLX. It uses exclusively GLX to implement -the EGL API. It supports both direct and indirect rendering when the GLX does. -It is accelerated when the GLX is. As such, it cannot provide functions that -is not available in GLX or GLX extensions.
-
-
Use EGL
@@ -141,44 +123,13 @@ mesa/demos repository. runtime-
-
This driver can share DRI drivers with libGL
.
Packaging
The ABI between the main library and its drivers are not stable. Nor is
-there a plan to stabilize it at the moment. Of the EGL drivers,
-egl_gallium
has its own hardware drivers and client API modules.
-They are considered internal to egl_gallium
and there is also no
-stable ABI between them. These should be kept in mind when packaging for
-distribution.
Generally, egl_dri2
is preferred over egl_gallium
-when the system already has DRI drivers. As egl_gallium
is loaded
-before egl_dri2
when both are available, egl_gallium
-is disabled by default.
Developers
-The sources of the main library and the classic drivers can be found at
-src/egl/
. The sources of the egl
state tracker can
-be found at src/gallium/state_trackers/egl/
.
The suggested way to learn to write a EGL driver is to see how other drivers
-are written. egl_glx
should be a good reference. It works in any
-environment that has GLX support, and it is simpler than most drivers.
The sources of the main library and drivers can be found at
+src/egl/
.
Lifetime of Display Resources
@@ -273,8 +180,8 @@ longer than the display that creates them.In EGL, when a display is terminated through eglTerminate
, all
display resources should be destroyed. Similarly, when a thread is released
-throught eglReleaseThread
, all current display resources should be
-released. Another way to destory or release resources is through functions
+through eglReleaseThread
, all current display resources should be
+released. Another way to destroy or release resources is through functions
such as eglDestroySurface
or eglMakeCurrent
.
When a resource that is current to some thread is destroyed, the resource