ATi Takes Over 3D Technology Leadership With Radeon 9700

Page 1:Introduction

Page 2:Unusual Launch Preparations

Page 3:ATi's Radeon 9700 'VPU'  An Introduction

Page 4:Radeon 9700  Fully Loaded

Page 5:AGP 8x

Page 6:The Vertex Shaders

Page 7:Pixel Shader 2.0 Specification

Page 8:The Pixel Rendering Pipelines

Page 9:HyperZ III

Page 10:Smoothvision 2.0  FSAA

Page 11:Smoothvision 2.0  Anisotropic Filtering

Page 12:Display Output

Page 13:Performance Evaluation
Pixel Shader 2.0 Specification
When, a bit more than a year ago, NVIDIA released GeForce3, which was the first 3D chip to include vertex as well as pixel shaders, the world of 3D developers welcomed the vertex shader, but criticized the halfhearted specs of the pixel shader. DirectX 9 is supposed to finally improve this situation, even though the new pixel shader 2.0 spec doesn't seem to be as much of a leap forward as one would have expected. The most important addition to the pixel shader spec is certainly the inclusion of 64bit and 128bit floating point color precision. Besides that, new instructions have been added and the maximum number of pixel shader instructions has been increased to (a still measly looking) 160, but there is still now flow control. NVIDIA's upcoming 'NV30' will go several steps further than that, but more about this in three or four months' time, when NVIDIA's new chip's review units will finally hit the reviewers' desks.
Floating Point Precision Color
As already mentioned, the most important new spec of PS 2.0 is the inclusion of 64 or even 128bit floating point color precision. Why is that so important?
So far, the highest color precision we could use on a PC was 32bit. A 32bit integer number can be anything between 0 and 232 1 = 4,294,967,295. If you look at it from that point of view, you could say that 32bit color supports more than 4 billion different colors. Is that not enough?
First of all, 32bit color does not really allow 4 billion colors. In fact, only 24 bit are used for the 'RGB' (=red/green/blue) color information. The remaining 8 bit usually carry the 'alpha' value. 224 is only 16,777,216, and this is the number you certainly know as 'true color,' 16.7 million different colors. Still, this number looks rather respectable. However, if we look at it more closely, we can see that 32bit color is even less impressive. The 24 bits that carry the color information consist of 8 bit for red, 8 bit for green and 8 bit for blue. This means that for each elementary color, you've got a precision of a measly 8bit, allowing integer values from 0 to 255. That's not really a lot, is it? This 8bit per color channel precision has one serious flaw, it doesn't allow a whole lot of dynamic. Dynamic means the difference between the lowest and the highest value. If we forget about the '0' value for a minute, and just start at '1,' then we can see that the biggest dynamic from this value to the max is only 255. This is what game developers are fighting with  they want to have very dark, as well as very bright areas in their 3D worlds, and the range from 1 to 255 for each color channel just isn't good enough.
Now in the computer world, there's two different ways of handling numbers. The easiest to understand are, of course, integer numbers, which are stored 'just as they are.' Floating point numbers work differently. Here the number consists of a sign bit, a few bits for the exponent and quite a lot of bits for the mantissa. The formula would be x = m*2e , where 'x' is the number, 'm' is the mantissa and 'e' is the exponent. As you can see, the smallest as well as largest floating point number is specified by the exponent, while the mantissa defines the precision. In the case of a 128bit FP number, each color channel has a 32bit floating point precision (IEEE single precision, remember 'SSE'?), which consists of 1 sign bit, 8 exponent bits (7 plus sign) and 23 mantissa bits. This allows a dynamic range from 0.00000000000000000000000000000000000000294 (=2128 ) to 170,000,000,000,000,000,000,000,000,000,000,000,000 (=2127 ), and with 23bit, a much higher precision than the 8bit precision of the 32bit color values.
The increase in dynamics as well as precision enables a quantum leap in terms of image quality. It also opens the door for a lot of new effects that weren't really possible before.
On the left you see the same scene in 32bit color and on the right you see the dramatic increase in color and brightness dynamics due to the usage of 128bit FP color precision.
ATi shows a demo of a low polygon car that is visually enhanced with dot3 bump mapping using a 64bit precision normal map. This kind of effect was impossible with 32bit integer normal maps, as you can see in the demo pictures below.
Unfortunately, 128bit color requires four times the memory bandwidth of 32bit color. It's going to take a while until memory technology will caught up with that.
 Introduction
 Unusual Launch Preparations
 ATi's Radeon 9700 'VPU'  An Introduction
 Radeon 9700  Fully Loaded
 AGP 8x
 The Vertex Shaders
 Pixel Shader 2.0 Specification
 The Pixel Rendering Pipelines
 HyperZ III
 Smoothvision 2.0  FSAA
 Smoothvision 2.0  Anisotropic Filtering
 Display Output
 Performance Evaluation