Ths is a great writeup done by Emanuele Tamponi on how all these 3D-related technologies combine to give Linux users eye candy. He explains what the drivers need to support, where the X Server fits in here, what Compiz does and more. As you know I was already confused about this, so check it out.
Here is the break down of Emanuele Tamponi’s post on what everything does (copied from article), please read the full article if you get a chance though:
- An X driver is the software that provides the rendering functions for 2D operation in Xorg and Aiglx (not Xgl).
So, X driver provides windows rendering, Compisiting, etc… X driver uses only the 2D sector of a graphics card, and can
provide XAA or EXA bindings. - The X Server Extension for GLX is an extension to the XServer that provides functions to listen GLX commands.
GLX is a protocol that provides OpenGL contexts to applications that require it. It can also receive OpenGL commands from an OpenGL
application and then send them to the graphics hardware for rendering. Xorg provides its own Extension for GLX, NVIDIA’s
provides a closed one. The name of the library that contains the X Server Extension is libglx. - libGL is a library that provides functions for OpenGL operations and GLX requests. So, libGL is used by OpenGL clients
that require the X GLX Extension for OpenGL contexts and then to use OpenGL functions. Mesa provides the “open” libGL that
is used in DRI. NVIDIA’s provides a closed one, and ATI too. - An Direct OpenGL Context, is a context where OpenGL is Direct Rendered. Direct Rendering means that libGL can
talk directly to the 3D driver that controls the graphics card, without passing the OpenGL commands to the GLX Extension. - An Indirect OpenGL Context, is a context where OpenGL is Indirect Rendered. Indirect Rendering means that libGL
has to pass the OpenGL commands to the GLX Extension that will pass them to the graphics card and then will render it. - Accelerated Rendering means that operations inside an OpenGL context are elaborated by the graphics processor (gpu), not
by the cpu. Accelerated Rendering is very fast but relies on hardware capabilities. If a function isn’t supported by the hardware,
libGL will fallback to a software implementation (a software fallback). In DRI, software fallbacks are provided by Mesa. - DRI stands for Direct Rendering Infrastructure, and is a set of software that provides Direct Rendering
for OpenGL contexts. It provides libGL (by Mesa, with software fallbacks too), libglx (by Mesa), a card-specific driver and a DRM,
Direct Rendering Manager, that’s a kernel module that manages the requests for hardware and controls the hardware itself.
NVIDIA’s drivers DON’T use DRI, they use their own infrastructure to manage Direct Rendering. - Xgl is new X server architecture layered on top of OpenGL: it doesn’t need X drivers anymore, but just OpenGL drivers
for all its rendering. Current implementation of Xgl is Xglx. It’s just an “hack” to
see what Xgl is capable of. This page tries to explain how Xglx works. The future Xgl implementation will be Xegl. - Aiglx is a project (now completely merged in Xorg CVS HEAD) that provides Accelerated Rendering to Indirect
OpenGL Contexts. Before aiglx, only NVIDIA’s implementation of libglx provided Accelerated Indirect GLX.
Update #1: Unfortunately it looks like the original link for this article is dead and no one had a mirror of it (can’t find a Google Cache for it either). Here’s another article on the subject that might provide additional information.



















November 8th, 2007 at 8:26 am
thanks for the breakdown on this interesting topic. the link to the original does not work anymore though …
November 8th, 2007 at 8:38 am
didito,
Unfortunately you are right it does look like the link is dead.
I tried looking for a cache somewhere and couldn’t find it. I did find another article on the subject and included that in the Update though.
Sorry about that.