Graphics Microcode - F3DEX/L3DEX Series

Graphics are rendered in Nintendo 64 games by creating a graphics display list, and passing this display list to the RSP. In order for the RSP to process this display list, the application, using system calls, loads graphics microcode. This section discusses the different microcode object files available to applications.

There are 5 basic versions of the graphics microcode, and each basic version has up to 3 subtypes. The basic versions are known as gspFast3D, gspF3DNoN, gspLine3D, gspTurbo3D, and gspSprite2D. Each basic version has a different set of graphics rendering features. Each subtype has the same set of graphics features, but varies according to how the RSP passes commands to the RDP. The three subtypes are regular, .dram and .fifo. The object files for the microcode are labeled, <basicType>.o, <basicType>.dram.o, and <basicType>.fifo.o.

In addition, there are seven versions of gspFast3D, gspF3DNoN, and gspLine3D that have been specially modified to .fifo subtypes to improve performance. These modified versions are gspF3DEX, gspF3DEX.NoN, gspF3DLX, gspF3DLX.NoN, gspF3DLX.Rej, gspF3DLP.Rej, and gspL3DEX.

gspFast3D
gspFast3D microcode is the most full-featured of the microcode types. It is also the microcode used in the majority of the demo applications. gspFast3D supports 3D triangles, 3D clipping, z-buffering, near and far clipping, lighting, mip-mapped textures, perspective textures, fog, and matrix stack operations. It does not support the GBI command, gSPLine3D.

gspF3DNoN
gspF3DNoN microcode is similar to gspFast3D microcode, except it does not handle near plane clipping in the same manner. When using gspFast3D microcode, objects between the eye and the near plane are clipped. When using gspF3DNoN microcode, objects between the eye and the near plane are not clipped. However, the area between the eye and the near clipping plane does not implement zbuffering. This means that objects that fall into this area must be rendered in order from far to near.

gspLine3D
gspLine3D microcode contains many of the features contained in gspFast3D, except that instead of rendering triangles, it draws 3D lines. This is useful for producing wireframe effects. If a gSP1Triangle command is encountered it will render the three edges of the triangle, but not the center portion of the triangle.

gspTurbo3D
gspTurbo3D microcode is a reduced-feature, reduced-precision, microcode that delivers significantly faster performance. The features not supported by gspTurbo3D are: Clipping, lighting, perspective-corrected textures, and matrix stack operations. The quality of the anti-aliasing also suffers, due to the lack of precision used by gspTurbo3D. This loss of precision can also manifest itself as various visual artifacts, depending on the content. gspTurbo3D uses a different format for the display list.

gspSprite2D
gspSprite2D microcode is optimized for rendering 2D sprite images. Sprites are implemented as textured screen rectangles. gspSprite2D does not support 3D lines, 3D triangles, vertex operations, matrix operations, lighting, or fog. All of the DP commands such as blender modes, and color combiner modes are supported. Zbuffering can be used to arrange the order of the sprites from front to back.

gspF3DEX (Fast3D Series Improved Version)
The F3DEX series is a tuned version of the previous Fast3D and Line3D microcode. The new version uses .fifo exclusively as the method by which commands are passed from the RSP to the RDP. In addition, the vertex cache size is increased, and the matrix stack is increased from 10 levels to 18 levels. The seven microcode versions in this series are listed below. Among them are several versions designed to improve performance by restricting function.

1. gspF3DEX.fifo.o

2. gspF3DEX.NoN.fifo.o

3. gspF3DLX.fifo.o

4. gspF3DLX.NoN.fifo.o

5. gspF3DLX.Rej.fifo.o

6. gspF3DLP.Rej.fifo.o

7. gspL3DEX.fifo.o

- F3DEX
  F3DEX is the extended version of Fast3D microcode. The vertex cache size is increased to 32, and g*SP2Triangles, a GBI command for displaying two triangles at once, is supported. The GBI command G*SP1Quadrangle (which displayed rectangles) that was supported in F3DEX version 1.21 and earlier, is no longer suported. (Emulation is supported in 2Tri).

- F3DLX
  With F3DLX, the subpixel calculation in the F3DEX microcode is simplified. This microcode retains compatibility with F3DEX and GBI, and improves processing capacity of the RSP. This is done by reducing the precision in calculating each polygon’s vertex. The extended functionality unique to F3DLX enables the DL command to turn the clipping process On or Off.

- F3DLX.Rej
  This version substitues rejection processing for clipping. Teh vertex cache size is 64 and the g*SP2Triangles commands are supported. Optimization can be achieved assuming the 2Tri operation will be performed. The triangle can not be fully rendered when one of the vertexes occurs outside the defined reject area. Therefore, it is not appropriate for rendering large triangles. Perspective texture correction is implemented.

- F3DLP.Rej
  F3DLP.Rej has similar functionality to F3DLX.Rej, however perspective texture correction is not implemented. Therefore, the processing speed in RSP is far more faster. The vertex cache is 80.

- L3DEX
  L3DEX is Line3D microcode that can handle 32 vertexes. It is equivalent to Line3D in Fast3D. A polygon rendered by F3DEX can be displayed in a wireframe.

Copyright © 1999 Nintendo of America Inc. All Rights Reserved Nintendo and N64 are registered trademarks of Nintendo Last Updated January, 1999