Mordenkainen said:
My whole point with coming out of the curtain on this thread is because DOOM 3 is always refered to a DX7 tech. I've pointed out it uses fragment programs, which DX7 hardware doesn't support, only DX8. I've pointed out how DOOM takes advantage of floating point precision on the fragment_program, which only DX9 hardware can do.
The quote pointed to earlier is quite pertinent here. The feature set for Doom3 is designed around the capabilities of GeForce256/2 (DX7 class). To achieve this on DX7 hardware it does it in something like 8 rendering passes. With later hardware he is using various vertex and fragment programs to reduce these rendering passes to collapse the quantity of work done - IIRC D3 actually uses very few shaders, the majority of them are different methods of calculating the unified lighting model depending on the fragment capabilities of the board (NV1x / ARB path - multiple passes, NV1x/2x path - 2-3 passes, R200 path - 1 pass, NV3x path - 1 pass, ARB2 path - 1 pass). Basically all of these are doing roughly the same job, but they are implicitly taking higher capabilities of the hardware for each path being written.
Its probably disingenuous to say there will be
no quality differences - JC points out himself that there are quality differences, but these are probably fairly incremental in nature. For instance, The ARB2 path will automatically make use of float precision (which he mentions) but, the length of the ARB2 shader for the unified lighting model is probably insufficient for there to be really large quality differences between int / FP16 / FP24 / FP32 precisions to be hugely noticeable - he makes note of the differences between the NV3x path and ARB2 that you'd only spot the differences if you knew what you were looking for.
This is the difference between a game that is designed around a DX7 feature set and one that’s designed around a DX9 feature set, as JC says his next engine will be - while there are certainly going to be incremental improvements in quality between the ARB and ARB2 paths, because it was inherently designed around the DX7 class feature set the functionality available in the ARB2 path won't show that much difference. When he starts designing specifically around the DX9/R300/NV30 (or better) feature set that will set the baseline and he'll really be pushing the shader and precision limits of this class of hardware, such that I'd expect and enormous quality increase.