Core Architecture
Each of R300’s eight pixel pipelines is capable of addressing 16 textures through a single pass, multi-clock loopback for a total fill-rate of 2.6 GP/sec. By supporting a single texturing operation per-pipeline, the application of 16 textures requires the use of 16 clock cycles. For complex pixel shading operations, a greater number of clock cycles are required as well.
![Dissecting The ATI RADEON 9700 PRO [ 8-Pixel Pipeline architecture @ 867 x 418 ] > View Full-Size in another window.](images/01-s.jpg) 8-Pixel Pipeline architecture
|
|
Each of ATI’s pixel pipelines can execute three instructions per-clock. The first of these is a texture lookup, followed by an address operation, and then a color operation. Simultaneous execution of these three operations allows for minimal cycle consumption in simple pixel shader ops, as much of the work can be completed in a single cycle. With that said, a complex pixel shader nearing the hardware limit of 160 instructions will require more than a few cycles to complete.
![Dissecting The ATI RADEON 9700 PRO [ Pixel shader unit @ 496 x 430 ] > View Full-Size in another window.](images/02-s.jpg) Pixel shader unit
|
|
As per the DirectX 9 specification, R300 supports data precision that is substantially greater than previous generations of hardware. Most graphics hardware has supported 32-bit integer formats, where internal rendering accuracy was an integer falling between 32 and 48-bpp. Now supported is 128-bit float point precision, which obviously is dramatically more accurate.
ATI’s design is slightly confusing to most, for saying that it provides 128-bit floating point precision is accurate, though not entirely accurate. R300’s texture address logic supports 32-bits per-channel (128-bit floats), where the shader logic uses a 24-bit per-channel float point accuracy, totaling out to a precision of 96-bits per-pixel. The output format can either be reduced to a format of lower accuracy, or expanded all of the way to a 128-bit float.
Why the move to 128-bit floating point?
In supporting higher precision formats, two primary tasks are accomplished. The first is derived from rendering artifacts associated with multi-pass rendering. Each rendering pass in multi-pass rendering results in a precision loss of roughly 50%. With multiple passes, precision levels can quickly drop to a point where artifacts (color banding) become apparent. Increased precision works to alleviate this by starting at a higher base precision, allowing more room for quality loss without a noticeable effect. The second reason is a bit more interesting.
Lighting is a primary aspect of 3D rendering. Proper lighting effects make the difference between an immersive, realistic environment and one that is dull and clearly fake. With the use of floating point data formats, the dynamic range output can be increased considerably to allow for great realism and realistic over bright lighting. ATI has demonstrated this with their Natural Light demo, as seen in the image below. The right side uses floating point accuracy and a high dynamic range, where the left does not.
![Dissecting The ATI RADEON 9700 PRO [ Floating point precision in action @ 838 x 595 ] > View Full-Size in another window.](images/03-s.jpg) Floating point precision in action
|
|