<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>Mesa EGL</title>
  <link rel="stylesheet" type="text/css" href="mesa.css">
</head>
<body>

<div class="header">
  <h1>The Mesa 3D Graphics Library</h1>
</div>

<iframe src="contents.html"></iframe>
<div class="content">

<h1>Mesa EGL</h1>

<p>The current version of EGL in Mesa implements EGL 1.4.  More information
about EGL can be found at
<a href="https://www.khronos.org/egl/">
https://www.khronos.org/egl/</a>.</p>

<p>The Mesa's implementation of EGL uses a driver architecture.  The main
library (<code>libEGL</code>) is window system neutral.  It provides the EGL
API entry points and helper functions for use by the drivers.  Drivers are
dynamically loaded by the main library and most of the EGL API calls are
directly dispatched to the drivers.</p>

<p>The driver in use decides the window system to support.</p>

<h2>Build EGL</h2>

<ol>
<li>
<p>Run <code>configure</code> with the desired client APIs and enable
the driver for your hardware.  For example</p>

<pre>
  $ ./configure --enable-gles1 --enable-gles2 \
                --with-dri-drivers=... \
                --with-gallium-drivers=...
</pre>

<p>The main library and OpenGL is enabled by default.  The first two options
above enables <a href="opengles.html">OpenGL ES 1.x and 2.x</a>.  The last two
options enables the listed classic and Gallium drivers respectively.</p>

</li>

<li>Build and install Mesa as usual.</li>
</ol>

<p>In the given example, it will build and install <code>libEGL</code>,
<code>libGL</code>, <code>libGLESv1_CM</code>, <code>libGLESv2</code>, and one
or more EGL drivers.</p>

<h3>Configure Options</h3>

<p>There are several options that control the build of EGL at configuration
time</p>

<dl>
<dt><code>--enable-egl</code></dt>
<dd>

<p>By default, EGL is enabled.  When disabled, the main library and the drivers
will not be built.</p>

</dd>

<dt><code>--with-egl-driver-dir</code></dt>
<dd>

<p>The directory EGL drivers should be installed to.  If not specified, EGL
drivers will be installed to <code>${libdir}/egl</code>.</p>

</dd>

<dt><code>--with-platforms</code></dt>
<dd>

<p>List the platforms (window systems) to support.  Its argument is a comma
separated string such as <code>--with-platforms=x11,drm</code>.  It decides
the platforms a driver may support.  The first listed platform is also used by
the main library to decide the native platform.</p>

<p>The available platforms are <code>x11</code>, <code>drm</code>,
<code>wayland</code>, <code>surfaceless</code>, <code>android</code>,
and <code>haiku</code>.
The <code>android</code> platform can either be built as a system
component, part of AOSP, using <code>Android.mk</code> files, or
cross-compiled using appropriate <code>configure</code> options.
The <code>haiku</code> platform can only be built with SCons.
Unless for special needs, the build system should
select the right platforms automatically.</p>

</dd>

<dt><code>--enable-gles1</code></dt>
<dt><code>--enable-gles2</code></dt>
<dd>

<p>These options enable OpenGL ES support in OpenGL.  The result is one big
internal library that supports multiple APIs.</p>

</dd>

<dt><code>--enable-shared-glapi</code></dt>
<dd>

<p>By default, <code>libGL</code> has its own copy of <code>libglapi</code>.
This options makes <code>libGL</code> use the shared <code>libglapi</code>.  This
is required if applications mix OpenGL and OpenGL ES.</p>

</dd>

</dl>

<h2>Use EGL</h2>

<h3>Demos</h3>

<p>There are demos for the client APIs supported by EGL.  They can be found in
mesa/demos repository.</p>

<h3>Environment Variables</h3>

<p>There are several environment variables that control the behavior of EGL at
runtime</p>

<dl>
<dt><code>EGL_PLATFORM</code></dt>
<dd>

<p>This variable specifies the native platform.  The valid values are the same
as those for <code>--with-platforms</code>.  When the variable is not set,
the main library uses the first platform listed in
<code>--with-platforms</code> as the native platform.</p>

<p>Extensions like <code>EGL_MESA_drm_display</code> define new functions to
create displays for non-native platforms.  These extensions are usually used by
applications that support non-native platforms.  Setting this variable is
probably required only for some of the demos found in mesa/demo repository.</p>

</dd>

<dt><code>EGL_LOG_LEVEL</code></dt>
<dd>

<p>This changes the log level of the main library and the drivers.  The valid
values are: <code>debug</code>, <code>info</code>, <code>warning</code>, and
<code>fatal</code>.</p>

</dd>
</dl>

<h2>EGL Drivers</h2>

<dl>
<dt><code>egl_dri2</code></dt>
<dd>

<p>This driver supports both <code>x11</code> and <code>drm</code> platforms.
It functions as a DRI driver loader.  For <code>x11</code> support, it talks to
the X server directly using (XCB-)DRI2 protocol.</p>

<p>This driver can share DRI drivers with <code>libGL</code>.</p>

</dd>
</dl>

<h2>Packaging</h2>

<p>The ABI between the main library and its drivers are not stable.  Nor is
there a plan to stabilize it at the moment.</p>

<h2>Developers</h2>

<p>The sources of the main library and drivers can be found at
<code>src/egl/</code>.</p>

<h3>Lifetime of Display Resources</h3>

<p>Contexts and surfaces are examples of display resources.  They might live
longer than the display that creates them.</p>

<p>In EGL, when a display is terminated through <code>eglTerminate</code>, all
display resources should be destroyed.  Similarly, when a thread is released
through <code>eglReleaseThread</code>, all current display resources should be
released.  Another way to destroy or release resources is through functions
such as <code>eglDestroySurface</code> or <code>eglMakeCurrent</code>.</p>

<p>When a resource that is current to some thread is destroyed, the resource
should not be destroyed immediately.  EGL requires the resource to live until
it is no longer current.  A driver usually calls
<code>eglIs&lt;Resource&gt;Bound</code> to check if a resource is bound
(current) to any thread in the destroy callbacks.  If it is still bound, the
resource is not destroyed.</p>

<p>The main library will mark destroyed current resources as unlinked.  In a
driver's <code>MakeCurrent</code> callback,
<code>eglIs&lt;Resource&gt;Linked</code> can then be called to check if a newly
released resource is linked to a display.  If it is not, the last reference to
the resource is removed and the driver should destroy the resource.  But it
should be careful here because <code>MakeCurrent</code> might be called with an
uninitialized display.</p>

<p>This is the only mechanism provided by the main library to help manage the
resources.  The drivers are responsible to the correct behavior as defined by
EGL.</p>

<h3><code>EGL_RENDER_BUFFER</code></h3>

<p>In EGL, the color buffer a context should try to render to is decided by the
binding surface.  It should try to render to the front buffer if the binding
surface has <code>EGL_RENDER_BUFFER</code> set to
<code>EGL_SINGLE_BUFFER</code>;  If the same context is later bound to a
surface with <code>EGL_RENDER_BUFFER</code> set to
<code>EGL_BACK_BUFFER</code>, the context should try to render to the back
buffer.  However, the context is allowed to make the final decision as to which
color buffer it wants to or is able to render to.</p>

<p>For pbuffer surfaces, the render buffer is always
<code>EGL_BACK_BUFFER</code>.  And for pixmap surfaces, the render buffer is
always <code>EGL_SINGLE_BUFFER</code>.  Unlike window surfaces, EGL spec
requires their <code>EGL_RENDER_BUFFER</code> values to be honored.  As a
result, a driver should never set <code>EGL_PIXMAP_BIT</code> or
<code>EGL_PBUFFER_BIT</code> bits of a config if the contexts created with the
config won't be able to honor the <code>EGL_RENDER_BUFFER</code> of pixmap or
pbuffer surfaces.</p>

<p>It should also be noted that pixmap and pbuffer surfaces are assumed to be
single-buffered, in that <code>eglSwapBuffers</code> has no effect on them.  It
is desirable that a driver allocates a private color buffer for each pbuffer
surface created.  If the window system the driver supports has native pbuffers,
or if the native pixmaps have more than one color buffers, the driver should
carefully attach the native color buffers to the EGL surfaces, re-route them if
required.</p>

<p>There is no defined behavior as to, for example, how
<code>glDrawBuffer</code> interacts with <code>EGL_RENDER_BUFFER</code>.  Right
now, it is desired that the draw buffer in a client API be fixed for pixmap and
pbuffer surfaces.  Therefore, the driver is responsible to guarantee that the
client API renders to the specified render buffer for pixmap and pbuffer
surfaces.</p>

<h3><code>EGLDisplay</code> Mutex</h3>

The <code>EGLDisplay</code> will be locked before calling any of the dispatch
functions (well, except for GetProcAddress which does not take an
<code>EGLDisplay</code>).  This guarantees that the same dispatch function will
not be called with the sample display at the same time.  If a driver has access
to an <code>EGLDisplay</code> without going through the EGL APIs, the driver
should as well lock the display before using it.

</div>
</body>
</html>
