facebook rss twitter

Review: NVIDIA's GeForce 6800 Ultra GPU

by Ryszard Sommefeldt on 14 April 2004, 00:00

Tags: NVIDIA (NASDAQ:NVDA)

Quick Link: HEXUS.net/qaxl

Add to My Vault: x

GPU Technologies - CineFX 3.0

Being a new generation of GPU, there's plenty of new technology that the GPU implements, all bundled under marketing names for your convenience.

CineFX 3.0

CineFX 3.0 is the new shading and texturing engine and the basic beating heart of the new GPU. It supports Microsoft's Shader Model 3.0 in hardware, exposed via the latest DirectX 9.0c runtime update on supporting hardware. OpenGL 1.5 gets the nod too, the hardware functionality exposed to that API (although I'm unsure of the specifics at this point).

I'll cover Shader Model 3.0 in a separate page.

Vertex Shader

The API compliance means a few new things that the GPU does in hardware. Unlimited instruction length in vertex shaders are possible. Vertex programs in the geometry pipeline can branch to other parts of the program and utilise flow control (basic if..then statements) to choose different code paths while executing.

It appears that to implement branching and flow control the GPU evaluates all branches in the vertex shader, effectively executing the entire shader before executing the chosen branch. Vertex shaders can also loop, along with calling and returning from other vertex shaders. Combine that with branching and you get arguably easier to write vertex shaders and shaders that are easier to program for multiple levels of effects, depending on application settings.

Application developers can modify the vertex stream output by the shader units so as to apply slightly different effects to the vertex data. This allows identical batches of geometry to take on slightly different positions, displacements and other effects.

Displacement mapping, where geometry is affected by a texture, is also possible in hardware on GeForce 6. Geometry is created by the vertex program and a texture is applied to physically manipulate that geometry. The resulting effect is rather like bump mapping, but happens at the geometry level, rather than just affecting the texture applied to the geometry.

Of course the vertex shader specification in Shader Model 2.0 is supported completely, SM3.0 being a superset.

Pixel Shader

The pixel/fragment processor in CineFX 3.0 is also new. By far the largest new feature here is the support for multiple render targets. Multiple render targets allow the pixel shader program to render to separate target surfaces for each of its needed functions, letting the developer combine them later. You save memory bandwidth by not needing to process the vertex data separately for each effect pass, the vertex shader output feeding into the fragment processor only once. The render targets (each have to be the same size, but can contain different surface formats) are then combined for the final output.

NVIDIA's press documentation has a nice example where they process the geometry data singly, then apply depth, colour, a HDR glow effect, normal map and lighting to create a nice HDR lit scene.

Floating point texture blending and shading are all done on GeForce 6, at up to 32-bit bit throughout. FP32 is the preferred format for data. It's a big step from NV3x, where FP16 was the preferred format and FP32 took a giant performance hit in many cases.

The floating point filtering is perhaps the most exciting new parts of the fragment processor, given that everyone expected FP32 shading to be 'fixed' in NV40. The filtering and blending are somewhat unexpected, the capability only being known recently and most people enthusiastic about what it will enable in terms of effects.

The pixel shader hardware can also run pixel shader programs that do looping, branching and flow control, like the vertex shader hardware.