This overview diagram shows the different paths which the data takes from the program to the graphics hardware.

Starting at the left from the top.

Direct rendering program (3D):
Direct rendering (3D data) -> 3D data -> Graphics Hardware

Direct rendering program (2D):
X Protocol Encode -> Protocol Decode -> DIX -> XAA -> DDX Driver -> Graphics Hardware

3D and 2D commands share the same transport / protocol arrow / stream between the indirect rendering program (client) and the X Server. It's not until the protocol is decoded in the X Server that they diverge.

Indirect rendering program (2D):
X Protocol Encode -> Protocol Decode -> DIX -> XAA -> DDX Driver -> Graphics Hardware

Indirect rendering program (3D):
X Protocol Decode -> GLX -> Mesa (including SW rasterizer) -> DDX Driver -> Graphics Hardware

There is only one arrow at the bottom of the X Server where 2D data flows to the hardware. That's because the server is single threaded and handles one request at a time.

DRI Resource Management commands flow:
This level of detail is not shown in this diagram.

For greater detail see the DRI control flow page.

Contributors:
Jens Owen

Compiler:
Liam Smit