THG
John Carmack (id):
At the moment, the NV30 is slightly faster on most scenes in Doom than the R300, but I can still find some scenes where the R300 pulls a little bit ahead. The issue is complicated because of the different ways the cards can choose to run the game.
The R300 can run Doom in three different modes: ARB (minimum extensions, no specular highlights, no vertex programs), R200 (full featured, almost always single pass interaction rendering), ARB2 (floating point fragment shaders, minor quality improvements, always single pass).
The NV30 can run DOOM in five different modes: ARB, NV10 (full featured, five rendering passes, no vertex programs), NV20 (full featured, two or three rendering passes), NV30 ( full featured, single pass), and ARB2.
The R200 path has a slight speed advantage over the ARB2 path on the R300, but only by a small margin, so it defaults to using the ARB2 path for the quality improvements. The NV30 runs the ARB2 path MUCH slower than the NV30 path. Half the speed at the moment. This is unfortunate, because when you do an exact, apples-to-apples comparison using exactly the same API, the R300 looks twice as fast, but when you use the vendor-specific paths, the NV30 wins.
The reason for this is that ATI does everything at high precision all the time, while Nvidia internally supports three different precisions with different performances. To make it even more complicated, the exact precision that ATI uses is in between the floating point precisions offered by Nvidia, so when Nvidia runs fragment programs, they are at a higher precision than ATI's, which is some justification for the slower speed. Nvidia assures me that there is a lot of room for improving the fragment program performance with improved driver compiler technology.
Mit der Aussage John Carmacks wird deutlich, dass NVIDIA´s NV30 (und damit auch NV31 und NV34) mit Standardcode ein Problem haben könnte. Das könnte in der Genauigkeit begründet sein, mit der Pixel Shader Effekte berechnet werden. ATI´s R300 rechnet mit einer Genauigkeit von 24-Bit Floating Point (per component), während NV30 mit 16- oder 32-Bit rechnet. Mit dem Standard ARB2 Codepath (ARB steht für (OpenGL) Architectural Review Board) sind NVIDIA´s Karten gezwungen, mit vollen 32-bit zu rechnen, während ATI´s R300 mit nur 24-bit rechnet. GeForce FX wird hier Opfer ihrer höheren Floating Point Präzision, die bei der Vorstellung des Chips als besonderes Feature beworben wurde. Bei der Reduzierung auf 16-Bit Präzision, die GeForce FX ebenfalls beherrscht sind dagegen Qualitätseinbußen zu befürchten. ATIs 24-Bit Implementation stellt sich hier als gesunder Mittelweg zwischen Qualität und Performance dar. Kommt die plötzliche Performance Steigerung, die NVIDIAs Beta Treiber 42.68 gegenüber 42.63 (siehe Kolumne (3D Mark 2003: Routinen fern der Praxis?) etwa daher, das Pixel Shader Effekte in diesem Treiber nur noch mit 16-Bit FP Präzision gerechnet werden? Die nächste interessante Frage ist, was die Microsoft WHQL Spezifikationen in diesem Punkt vorschreiben.