This low level diagram provide details not shown in the overview diagram.
Legend:
RM = Resource Management
or = 1 of these 2 paths are followed
& = both of these 2 paths are followed
2D = 2D commands & data
3D = 3D commands & data
lines in columns indicate individual paths while,
lines not in columns are aggregations of paths.
Starting at the top right.
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 (3D):
X Protocol Decode -> GLX -> Mesa (including SW rasterizer) -> DDX Driver -> Graphics Hardware
Indirect rendering program (2D):
X Protocol Encode -> Protocol Decode -> DIX -> XAA -> DDX Driver -> Graphics Hardware
2D only program (2D):
X Protocol Encode -> Protocol Decode -> DIX -> XAA -> DDX Driver -> Graphics Hardware
RM 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.
Direct rendering program (2D):
X Protocol Encode -> Protocol Decode -> DIX -> XAA -> DDX Driver -> Graphics Hardware
Direct rendering program (RM):
X Protocol Encode -> Protocol Decode -> DRI Module (-> DDX Driver) -> DRM Lib =>> SAREA & Kernel
Direct rendering program (3D):
Direct rendering (3D data) -> 3D data -> Graphics Hardware
Resource management:
SAREA & Kernel
3DDRP Internals:
Origins of 3D , RM , 2D & RM (x transport)
There is only one arrow at the bottom of the X Server where 2D data flows to the hardware.
That's because the DDX Driver is single threaded and handles one request at a time.
For a more simple overview see the DRI data flow page.