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.

Contributors:
Jens Owen

Compiler:
Liam Smit