- Oct 24, 2000
- 29,767
- 33
- 81
With the debut of DirectX 9 (DX9), we see the introduction of a feature that is highly desirable in terms of approaching cinematic rendering quality, which is high precision rendering within the pixel/fragment shaders pipeline.
With DX9 and its compliant hardware, we now have floating point ("FP") calculation choices available to developers. Note the word "choices". DX9 specifies that for hardware to be DX9 "compliant", the minimum specification for floating point is 24-bit. 24-bit Floating Point is essentially equivalent to 96-bit colors -- we have four color channels/components (Red, Green, Blue and Alpha) at 32-bit (4 color channels * 24-bit = 96-bit color). There is, however, the matter of IEEE-32 Floating Point -- IEEE was standardized over 16 years ago, and its 32-bit floating point components/specification consists of 23-bits of mantissa, 1-bit of sign, and 8-exponent values. To be IEEE-32 "compliant", we're talking 128-bit colors (4 color channels * 32-bit = 128-bit color).
A potential "problem" rears its head -- do developers produce their pixels shaders with IEEE-32 precisions in mind, or the base DX9 precisions? This is actually a problem because the available DX9-compliant hardware available now, primarily NVIDIA's NV3x and ATi's R3x0, both have differences when it comes to precision modes supported in hardware and drivers.
The entirety of ATI's R300 series pipeline is 32-bit per component, bar the pixel shader processors, which are at 24-bits per component of precision, or 96-bit total. Developers have the option to write out float values to off-screen render targets of various float precisions and if one of 128-bit precision is selected (4 channels * 32-bit, with each 32-bit being IEEE SPFP) then the pixel shader output is up sampled to this precision. Basically, the R300 series' internal pixel pipeline is a mix of 24-bit and 32-bit per component, but the main pixel shader core is 24-bit FP per component. When the full 96-bit (24-bit * 4 channels) are written to main memory, it is written as a 4 * 32-bit IEEE SPFP, or 128-bit, value. Some of the texture addressing operations are done in 32-bit instead of 24-bit.
The NVIDIA's NV30 series internal pixel pipeline provides for three options -- 12-bit integer ("FX"), 16-bit FP per component or 32-bit FP per component.
With the difference between the two architectures from the two fierce competitors, what are the opinions of developers of games and game engines? What are their preferences? What sort of model do they target?
We asked a few developers about this. We are also not too much in the loop, as the case may be, regarding what NVIDIA actually does with its "The Way It's Meant To Be Played" games marketing campaign -- how and if this ties in with the entire "multiple precision choices" issue with regards to NVIDIA and ATI DX9 hardware. The following page are some of the responses we received.
Continued