Further Tests


Pixel Shader and Precision Tests

To take a look at the Pixel shader precisions that each of these boards are running at we'll use iXBT / Digit-Life's Precision Tester Application.

Temporary Registers s10e5 s10e5 s23e8 s10e5
Constant Registers s10e5 s10e5 s23e8 s10e5
Texture Coordinates s10e5 s10e5 s23e8 s23e8

The DirectX9 specifications stipulate that a minimum of FP24 floating point precision per component, though the FX series either support the higher precision FP32 or lower precision FP16 modes (which corresponds to DirectX's "Partial Precision" mode that developers can select to use in their application) and so to meet specification the GeForce FX should run at FP32 precision normally.

The chart above shows that under the 44.03 drivers in full precision the 5900 Ultra is running at s23e8 precision, which corresponds to FP32, and with the Partial Precision flag set the Temporary and Constant Registers are set that s10e5 precision, or FP16, while the Texture Coordinate precision stays at FP32 - this is exactly how the GeForce FX should behave to be compliant to DirectX specifications. However, we can see that the 5800 Ultra is running in FP16 mode in all cases, which theoretically is not to specification despite these are WHQL certified drivers. It is nonetheless encouraging to see 5900 Ultra running to full precision.

For the next test we'll take a look at Ping-Che Chen's Fillrate program.

Precision 10 bits 23 bits
Partial Precision 10 bits 10 bits
Fillrate (M pixels/s) 35.301 28.603

With this test, although it doesn't give the exact precisions that the shader is being run at, it does back up what we saw with the XBit Precision Tester, in that 5900 Ultra is running a high precision than 5800 Ultra. In this case, though, the performance the DX9 shader fill-rate is slower on the 5900 Ultra than the 5800 Ultra.

Finally we'll use Marco Dolenc's Fillrate Tester application to check out some shader mode rendering performances.

PS 1.1 994.3 892.7 -10%
PS 1.4 626.8 562.6 -10%
PS 2.0 630.5 565.9 -10%
PS 2.0 PP 630.4 565.9 -10%
PS 2.0 - Longer 379.1 242.0 -36%
PS 2.0 PP - Longer 379.1 340.3 -10%
PS 2.0 - Longer 4 Registers 378.8 203.9 -46%
PS 2.0 PP Longer 4 Registers 378.7 273.4 -28%
PS 2.0 - Per Pixel Lighting 61.1 78.9 29%
PS 2.0 PP - Per Pixel Lighting 61.1 55.0 -10%

Not surprisingly the DX8 PS1.1 and PS1.4 tests have relative performances in line with the clock rate in that 5900 Ultra is 10% behind the 5800 Ultra, which corresponds to the clock rate difference. However, interestingly the first two PS2.0 tests also show the 5900 Ultra as running 10% behind the 5800 Ultra.

Moving on to the two PS2.0 Longer tests we see that the 5800 has the same performance in both the full and partial precision modes, which is what we would expect as the previous test have shown that the 5800 Ultra is forcing partial precision all the time. In comparison to the 5800 the 5900 is running 10% behind the 5800 with partial precision, which is again in line with the clock speed differences. However, with full precision the the 5900 is 36% behind the 5800, though considering the 5900 is running full precision and 5800 isn't it's quite possible that the 5900 has a higher register usage which is impacting performance.

The PS2.0 with 4 register test is a little odd since the 5900 Ultra is 46% behind the 5800 Ultra, which isn't a surprise as the 5800 Ultra is running in partial precision and the 5900 Ultra isn't, and the register usage does cause a performance decrease on the FX architecture. However, the Partial Precision test shows a greater than 10% performance difference - perhaps this could be accounted for by the fact that the texture address processing is at FP32 precision on the 5800 but not on the 5900.

The Per Pixel Lighting test shows that in the Partial Precision mode the 5900 is 10% behind the 5800 again, though the full precision mode is 29% faster - however this is even faster than the Partial Precision scores.