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 HardwareDirect 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 HardwareIndirect 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 .