Pixel shaders
Pixel processing
Remember how John Carmack was disappointed with the pixel processing implementation in DirectX 8 and the GeForce3 GPU? With CineFX, NVIDIA has elevated pixel processing to the same level of importance as vertex processing.
For instance, many of the instructions used solely for vertex processing are now available for pixel processing, and the programs themselves can be longer (up to 1024 instructions). And while GeForce3 was limited to up to four textures per pixel, NV3x supports up to 16. Finally, the number of pixel operations is drastically increased. While DirectX 8 was limited to eight, and Microsoft’s upcoming DirectX 9 supports up to 64 pixel operations, NV3x supports up to 1,024 texture operations. This includes such advanced instructions as swizzling, and conditional write masks.
As a result of these improvements, developers will be able to have more control at the pixel level, resulting in even more realistic graphics effects.
Higher color precision
Another new improvement introduced with NV3x is support for 64-bit and 128-bit color (16 or 32-bit floating point for each RGB component). As you can imagine, this results in images with more vibrant color ranges. A common example is fog. Chances are, if you’ve played lots of games with extensive use of fog or smoke, artifacts were frequently visible. With a wider color range these artifacts are eliminated.
Obviously 128-bit color comes at a greater performance penalty, which is why developers can pick and choose which color mode they wish to use for each application. For extremely high-resolution textures, the 32-bit floating-point format (128-bit color) can be used, while others rely on the 16-bit format for added performance.
| NV2x and NV3x Comparison |
| |
NV2x |
NV3x |
| Higher Order Surfaces |
|
|
| High Order Surfaces |
X |
X |
| Continuous Tesselation |
X |
X |
| Vertex Displacement Mapping |
|
X |
| Geometry Displacement Mapping |
|
X |
| Vertex Shaders |
1.1 |
2.0+ |
| Max Instructions |
128 |
65536 |
| Max Static Instructions |
128 |
1024 |
| Max Constants |
96 |
256 |
| Temporary Registers |
12 |
16 |
| Max Loops |
0 |
64 |
| Static Flow Control |
|
X |
| Dynamic Flow Control |
|
X |
| Pixel Shaders |
1.1 |
2.0+ |
| Texture Maps |
4 |
16 |
| Max Texture Instructions |
4 |
1024 |
| Max Color Instructions |
8 |
1024 |
| Max Temp Storage |
|
64 |
| Data Type |
INT |
FP |
| Data Precision |
32-bit |
128-bit |