The N64 uses a display list hierarchy to describe what to render. 3D geometry transformation and rasterization are accelerated by RSP and RDP respectively. The CPU generates the display list in memory, then the RCP fetches the display list and renders the graphics.
Nintendo 64 renders graphics using a display list interface called graphics binary interface (GBI). The CPU assembles the GBI structure in RDRAM for the RSP/RDP to render. The RSP must first be downloaded with graphics microcode to perform geometry transformation. The RDP performs polygon rasterization. RSP and RDP state machines are described in detail in Chapter 11, "RSP Graphics Programming" and Chapter 12, "RDP Programming".
The GBI structure describes a hierarchy of geometry and its attributes. This tree is traversed depth first and the graphics pipeline attributes are sequentially modified during traversal. Both geometry (RSP) and raster (RDP) attributes are contained in a GBI structure.
The graphics binary interface (GBI) contains many 3D graphics features. An algorithmic description of many of these features can be found in the "OpenGL Programmer's Guide." Table 4-1 below, lists the basic features of the GBI pipeline.
Processor | Functionality |
---|---|
CPU | GBI Assembly |
RSP | matrix stack operations 3D transformations clipping and back-face rejection to viewing frustum lighting and reflection mapping setup for polygon and line rasterization |
RDP | polygon rasterization texturing/filtering blending Z buffer process antialiasing process |
There are three different versions of RSP geometry microcode: gspFast3D, gspLine3D, and gspTurbo3D. The gspFast3D microcode is the optimized, full-featured 3D polygonal geometry microcode. The gspLine3D is the optimized, full-featured 3D line geometry microcode, and the gspTurbo3D is the optimized, reduced-featured 3D polygonal geometry microcode. Each of these microcode types come in two versions. One version of the microcode has the RSP output the rasterization and attribute commands directly to the RDP. The other version outputs RDP commands to DRAM. Writing the RDP commands to DRAM could be used to overlap graphics and audio. For example, you could use the RSP for audio processing while the RDP is processing commands stored in DRAM. Storing the RDP commands in DRAM may also be useful for debugging.