X11 with DRI (Linux)

In the past all rendering from the X Clients happened through the X Server via the X11/GLX protocol. It’s called indirect rendering and it was necessary cause the access on the frame buffer wasn’t synchronized at that point. Later on they realized that applications with 3D rendering create performance issues. They switched to DRI (Direct Rendering Infrastructure) and a major part of it was the development of the DRM (Direct Rendering Manager) to synchronize the frame buffer access.

                       /------------------------------------------------------\
                       |                       X Client                       |
                       |------------------------------------------------------|
                       | (GTK+, Qt, ...) |                   |                |
                       | User Interface  | Video-Accelerator | 3D-Accelerator |
                       \------------------------------------------------------/
                                ∧                   |<- VA-API        |<- OpenGL
                                |<- X11/GLX       Libva              Mesa
                                ∨                   |                 |
     Window Manager  <--->  X Server ---------------------|-----------/
  (e.g. Compiz, KWIn)   (e.g. X.org Server)               |
                          ∧           |                   |
                          |           ∨                   ∨
   (Linux Kernel)       evdev        KMS                 DRM
                          ∧           ∧                   ∧
                          |           |                   |
                          ∨           ∨                   ∨
     (Hardware)      PS/2, USB      Display        GPU & Graphic mem.
                                   Controller

It’s even possible to use DRI for 2D rendering, but based on its good performance it isn’t necessary.