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.