GeForce 7 nevyhovuje Shader Modelu 3.0
21.10.2005, Zdeněk Kabát, článek
Poměrně překvapující zpráva se objevila serveru The Inquirer, který uveřejnil testy z programu DCT 5.3 určeného pro testy schopností grafických karet. Podle těchto materiálů nepodporuje GeForce 7800GTX plně DirectX 9.0c, konkrétně neprojde testem Pixel shaderu 3.0. ATi pro změnu není úplně nevinné ve Vertex shaderu.
DirectX nebo-li co jsou to ty shadery...
Jedním z hlavní faktorů, na které se v poslední době zameřují nejen vývojáři her, ale hlavně recenzenti a uživatelé grafických karet, je podpora nejnovějších technologií vyžadovaných rozhraním DirectX. Tento standard Microsoftu nás doprovází již celou řadu let a definuje jisté požadavky, které musí vycházet z architektury GPU.
Převratná byla DirectX verze 8, která jako první uvedla programovatelné jednotky, tzv. pixel a vertex shadery. Zatímco pixel shadery se starají osvětlení a další stínování objektů, vertex shadery mají na starosti transformace a geometrické úpravy scény (v DirectX 7 byly tyto funkce podporovány jen přes jednotku T&L = Transform & Lighting). DX8 obsahovala součásti Pixel shader 1.1 a Vertex shader 1.1, které se postupem času vylepšovaly, byly přidávány nové instrukce a požadavky (např. počtu a velikosti registrů, počtu podporovaných instrukcí za takt, přesnosti výpočtů v pipeline atd.).
HDR efekty (zde ve Far Cry) jsou také součástí specifikace DirectX 9
V současnosti je nejnovější verze tohoto rozhraní DirectX 9.0c s podporou Pixel a Vertex shaderů 3.0, neboli Shader Modelu 3.0. Hardwarovou podporu avizuje nVidia u grafických karet série GeForce 6 a GeForce 7, ATi pak u nových Radeonů série X1000. Starší GeForce FX a Radeony 9xxx a Xxxx zvládají jen DX9.0b se Shader Modelem 2.0. Tedy teoreticky.
Poznámka: Jen dodám, že shader je v zásadě "grafický program", který říká pomocí nízkoúrovňového jazyka grafické kartě, co má dělat. Zatímco dříve bylo nutné programovat GPU v assembleru, dnes jsou kódy pro ně velmi podobné programovacím jazykům typu C++. Shadery se skládají z jednotlivých instrukcí, které grafický čip zpracovává ve svých výpočetních jednotkách.
ATi kontruje očerňující kampaní
Možná si vzpomínáte, jak nedávno nVidia vypustila mezi své zákazníky propagační prezentaci, která se snažila co nejvíce pošpinit Multi-GPU technologii ATi CrossFire. Tyto důmyslně vykonstruované prezentace kolikrát dopadnou na úrodnou půdu, ačkoliv obsahují velmi pečlivě vybranou pravdu a komplexně vzato nemají žádnou objektivní informační hodnotu.
Ovšem nelze říct, že ATi je v tomto nevinně, protože na stránkách TechPowerUp! se objevila také prezentace, tentokráte vyzdvihující ATi a hanící nVidii. Původně nebylo zcela jasné, od koho tato kampaň pochází, ale dodatek na serveru již ukazuje skutečně na autorství ATi. Naráží se zde na nedokonalou podporu SM3.0 (téma dnešního článku), na HDR a možnost souběžného zapnutí FSAA, na cenové rozdíly apod. Celou prezentaci si můžete prohlédnout na této stránce.
Pro nás je klíčový jeden konkrétní slide:
Na něm uvádí společnost ATi, že podle serveru X-Bit Labs selhaly grafické karty GeForce 6600GT a 6800 Ultra v testu Pixel shaderu verze 3.0 a dalších v softwaru Microsoft DCT 5.2. Použité ovladače v té době (před 16 měsíci) byly ForceWare 66.81, takže situace se mohla o něco změnit. Podívejme se ale na realitu.
Test Shader Modelu 3.0 na GeForce 6/7
To by bylo k úvodu. Nás ale zajímá věc následující - na serveru The Inquirer vzali GeForce 6800 a GeForce 7800GTX a pokusili se ověřit, zda-li je slide ještě stále pravdivý. Protože byl test na X-Bit Labs prováděn před více než rokem, vzali na Inquireru kromě tehdy použitých ovladačů ForceWare 66.81 také současné oficiální 78.01 a beta verzi bez WHQL certifikace 81.85. Navíc byly vyzkoušeny i 64-bitové Windows XP s ovladači ForceWare 78.01 a 81.84.
Testovací sestava byla postavena na Athlonu 64 X2 4800+ s 1GB paměti Corsair DDR400, to vše na desce Gigabyte GA-K8N-SLI-Pro. Na čistě zformátovaný disk byl kromě operačního systému a ovladačů nainstalován testovací software Display Compatibility Test Kit 5.3 (dále DCT), což je nástroj pro kompletní diagnostiku grafické karty včetně testů DirectX. Jeden plný test v tomto softwaru trval 36 hodin, což znamená, že jsou karty vyšetřeny opravdu detailně.
A výsledek?
Jak můžete ze špatně patrných ikonek vysledovat, GeForce 7800GTX neprošla testem Pixel shaderů 3.0, ale ani 1.2 a 1.3, což je přinejmenším zarážející. Testy se všemi verzemi ovladačů ForceWare dopadly stejně, takže na straně softwaru chyba není. Proč ale nVidia Pixel Shaderu 3.0 nevyhovuje, to na Inquireru dále nerozebírají.
Nicméně je nutné říci, že tento fakt žádným viditelným způsobem nesnižuje kvalitu GeForce 7, protože kdyby docházelo k nějaké nekompatibilitě nebo chybách v obrazu, všimli by si toho minimálně programátoři. Pravděpodobně se jedná jen o nějakou nepatrnou nesrovnalost v přesnosti výpočtů, což se v reálném použití vůbec nemusí projevit. Jako podstatně větší problém považuji chvění textur u anizotropního filtrování při nastavení ovladačů na High Quality. To již ústí ve výraznější obrazové artefakty a přitom to s DirectX 9 nemá nic společného.
Pozn.: Test specifikací zobrazovacího zařízení DCT zkouší opravdu každý drobný aspekt grafických karet. Fakt, že The Inquirer nezveřejnil konkrétní úlohu, ve které GeForce 6/7 specifikaci nesplnila, může znamenat, že se jedná o nějaký druhotný nedostatek. Proto se grafických karet nVidia nebojte a klidně je berte.
R2VB u ATi - vertex shader 3.0 ano či ne?
V této souvislosti se Theo Valich také zmiňuje o technice vertex texturingu na Radeonech série X1000. Nejdříve krátký úvod do problematiky:
Pro displacement mapping, což je lineární posouvání a tvoření nových vrcholů na jednodušším geometrickém modelu pomocí výškové textury (displacement mapy) je třeba, aby byla do vertex shaderu daná textura nahrána. Existují v podstatě tři přístupy, jak to lze realizovat:
- Texturovací jednotka přímo ve vertex pipeline (tj. vertex texturing), což ale znamená velmi náročný design čipu s miliony tranzistorů navíc.
- Použití funkce tzv. vertex fetch, což používá nVidia u NV40/G70. Jde o přímý přístup vertex shaderů do texture cache, odkud mohou nahrát libovolnou texturu, ale neumí ji filtrovat, takže je v praxi tato metoda pomalá a špatně použitelná.
- Render-to-vertex-buffer (R2VB), tedy způsob, který používá ATi u R520. Funguje tak, že pixel shadery danou texturu zpracují a zfiltrují, ale nezapíšou ji do frame bufferu, nýbrž do vertex bufferu, do kterého mají vertex shadery přístup. Jedná se údajně o poměrně rychlou metodu s možností plné lineární filtrace displacement mapy.
Autor článku tvrdí, že požadavkem pro plnou podporu Vertex shaderu 3.0 je hardwarový vertex texturing, a to ve formě TMU určené pro vertex shadery. Ovšem názory na tento fakt se různí a naopak se většina grafických programátorů přiklání k tomu, že vertex texturing není pro podporu Shader Modelu 3.0 potřeba. Pravda je ta, že v SDK dokumentaci k DirectX od Microsoftu není nikde vysloveně definováno, že karta musí VT nutně podporovat, z čehož vyplývá, že je jen jednou z možností realizace potřebných operací.
Úsudek nechám na vás, ale můj názor je ten, že je prakticky jedno, jak displacement mapping provedete, pokud je rychlý a efektivní. Vertex texture fetch u nVidie je také možností, jak DM realizovat, ale R2VB je metodou u moderních grafických karet zatím zjevně nejlepší. Přesto bych počkal, jestli se objeví také test Radeonu X1800 v DCT 5.3.
Zdroje: The Inquirer, TechPowerUp!