DirectX 9.0 - Shader Model 3.0
Samostatnou kapitolu stojí za to věnovat podpoře nového grafického API, a to DirectX 9.0c. Dlouho se diskutovalo o názvu tohoto rozhraní, ale nakonec určil Microsoft vzhledem k malým změnám jen písmenko „c“. Oficiálně se tato verze nazývá DirectX 9.0 Shader Model 3.0, což již samo o sobě naznačuje, že Pixel a Vertex Shadery se vyskytují ve verzi 3.0.
Tomu odpovídá i název celé architektury čipu GeForce 6800, který zní CineFX 3.0. Nejdříve se podíváme na rozdíly mezi Shadery verze 2.0 a 3.0, abychom viděli, jaké změny GeForce 6800 přináší. Zde jsou změny pro Vertex Shader, kde VS_2_a je Vertex Shader 2.0 Extended:
VS_2_0 | VS_2_a | VS_3_0 | |
# of instruction slots | 256 | 256 | >= 512 |
Max # of instructions executed | 65535 | 65535 | >=65535 |
Instruction Predication | - | x | x |
Temp Registers | 12 | 13 | 32 |
# constant registers | >=256 | >=256 | >=256 |
Static Flow Control | x | x | x |
Dynamic Flow Control | - | x | x |
Dynamic Flow Control Depth | - | 24 | 24 |
Vertex Texture Fetch | - | - | x |
# of texture samplers | - | - | 4 |
Geometry Instancing Support | - | - | x |
Z tabulky je vidět, že rozdílů není tolik, ale na druhou stranu se mezi nimi vyskytují faktory jako je predikce instrukcí, dynamická kontrola toku, Texture Fetch apod., které jsem popisoval výše jako součást grafické pipeline, a které jsou místy velmi důležité. Upozorňuji, že toto jsou požadavky pro Vertex Shader 3.0, takže jakýkoliv GPU bez těchto hodnot nemůže Shader Modelu 3.0 vyhovovat.
Ještě se podíváme na odlišnosti v Pixel Shaderu verze 3.0:
PS_2_0 | PS_2_a | PS_2_b | PS_3_0 | |
Dependant Texture Limit | 4 | No Limit | 4 | No Limit |
Texture Instruction Limit | 32 | Unlimited | Unlimited | Unlimited |
Position Register | - | - | - | x |
Instruction Slots | 32 + 64 | 512 | 512 | >= 512 |
Executed Instructions | 32 + 64 | 512 | 512 | >=65535 |
Interpolated Registers | 2 + 8 | 2 + 8 | 2 + 8 | 10 |
Instruction Predication | - | x | - | x |
Index Input Registers | - | - | - | x |
Temp Registers | 12 | 22 | 32 | 32 |
Constant Registers | 32 | 32 | 32 | 224 |
Arbitrary Swizzling | - | x | - | x |
Gradient Instructions | - | x | - | x |
Loop Count Register | - | - | - | x |
Face Register (2-sided Lighting) | - | - | - | x |
Dynamic Flow Control | - | - | - | 24 |
Opět tu máme úpravy hlavně v různých limitech, počtech instrukcí, registrů apod. Součástí je opět dynamické řízení toku, což se stane velmi užitečným nástrojem programátorů. Upraven je také High Precision Mode, který byl v PS 2.0 24 bitů - nyní je podmínkou FP32, což znamená, že mu nebudou čipy ATi při zachování FP24 vyhovovat.
Rozepisovat se detailně o DirectX 9.0 Shader Model 3.0 by vydalo na celý článek, tak se zatím musíte smířit s tímto výčtem změn. Ostatně, hlavním předmětem je GeForce 6800 Ultra, jejíž popis dále pokračuje.