"Traditionally, Xorg drivers include several parts,
with one being actually required:
*the DDX driver is the part that allows X to draw stuff on
screen: setting up resolution and pixel buffer depth, and writing
it on-screen. This driver is normally hosted entirely in user
space, and traditionally included some accelerated functions such
as fills. These acceleration methods were originally used through
an API called XAA, which was later simplified and rewritten for
most drivers to become EXA. This is the 'required' component.
*the DRI/DRM dual component is a later addition, dating back to
Xfree86 4.0, which allowed X to talk to the graphics hardware
directly: a kernel component (the DRM module) and an X component
(the X DRI driver) will interact, following strict methods, and
bypassing kernel memory copies for most functionalities. This is
where extensions such as RENDER and Composite get interesting
because they allow X to directly manipulate video RAM. EXA, coupled
with RENDER, will make use of this kind of access to further
accelerate some drawing operations. However, this component was
never originally made to deal with massive amounts of data, and a
memory manager had to be programmed specifically for each
driver."