Vertex shader
Vertex shader je počáteční část 3D pipeline a jeho hlavním úkolem je pracovat s vrcholy, jejichž souřadnice a další informace o nich získá z AGP sběrnice. U GeForce 6800 je to celkem 6 vertex shaderů, které pracují jako MIMD (Multiple Instruction – Multiple Data). Znamená to, že každý vertex shader engine může ve stejnou chvíli pracovat na jiném vrcholu s použitím jiných instrukcí.
Jak vidíte na schématu, každý z šesti vertex enginů obsahuje paralelně pracující skalární a vektorovou jednotku a v jednom cyklu lze tedy provést v každé jednotce 5 operací. Další změnou je ta, že se do vertex shaderu mohou u NV4x nyní dodávat i informace o texturách, což je výhodné zejména při použití hardwarového displacement mappingu.
Displacement mapping je technologie původně užitá v čipu Matrox Parhelia. Princip je jednoduchý – vertex shader načte černobílou texturu, kde jednotlivé odstíny šedé označují hloubku nebo naopak výšku pixelu nad původním povrchem. Jedná se více méně o vrstevnice, které dokáží díky jednoduché 2D textuře vytvořit prostorový efekt. GeForce 6800 dokáže načíst texturu hardwarově již do vertex enginu, ale textura nemůže být filtrovaná, jen MIP-mapovaná.
Položka označená ve schématu Brach Unit je dalším nástrojem DirectX 9.0 Shader Model 3.0 (vysvětlený dále), který dovoluje hardwarovou podporu větvení kódu. Vertex shadery podporují od verze 3.0 neomezeně dlouhý kód.
Pixel pipeline
Další součástí 3D pipeline jsou již výše zmíněné renderovací jednotky, tedy 16 pixel pipeline. Jejich úkol je prostý, vyplňovat již určené polygony/trojúhelníky pixely a nanášet na ně jednotlivé textury, osvětlovat je a vytvářet další efekty. Pixel Shader 2.0 již podporoval mnoho rozšiřujících operací pro hardwarové pixel pipeline.
Ještě než rozeberu tuto část GPU do hloubky se zmíním stručně o tom, co znamenají v tabulce uvedená čísla 16x1 a 32x0 (níže pak podrobněji). Vzhledem k tomu, že NV40 obsahuje 16 renderovacích pipeline, umí vykreslit při standardních scénách právě 16 pixelů v jednom taktu. Ovšem může nastat i situace, kdy není nutné nanášet texturu a počítá se jen s jeho Z-hodnotou a v tomto případě umí GeForce 6800 Ultra vyredenderovat dokonce 32 pixelů za takt. Tento princip bude využit např. v enginu Doom 3.
Nyní se již podívejme na pixel pipeline podrobně. Zde je její schéma:
Každá pixel pipeline obsahuje jednu TMU (texturovací jednotka) a dvě jednotky pro zpracování shaderů (v přesnosti FP32). Tyto dvě shader jednotky dokáží pracovat buď duálně nebo mohou spolupracovat, což znamená, že architektura je superskalární (zvládá několik instrukcí současně). Když si trochu započítáme, tak GeForce 6800 má čtyřikrát více renderovacích pipeline než GeForce FX 5950 Ultra a navíc dvakrát více shaderů, efektivně tedy umí zpracovat až 8x více pixelů za takt.
Dále nám v texturovacích jednotkách dochází k filtrování textur. Zde se pokusím situaci trochu zjednodušit. NV40 dokáže provést v jednom cyklu bilineární filtrování a za normálních okolností potřebuje k trilineárnímu filtrování cykly dva. Ale vzhledem k tomu, že jsou jednotlivé textury zpracovávány po čtveřicích, je možné, že v případě nevytíženosti všech 4 pipeline dokáže GeForce 6800 provést trilineární filtrování taktéž v jediném cyklu. Jde ale zatím spíše o domněnku. Texturovací jednotka umí také až 16x anizotropní filtrování (128-tap).