Diit.cz - Novinky a informace o hardware, software a internetu

Geometry shader, DirectX 10

DirectX logo
DirectX 10, na jednu stranu by se dalo říci „staré známé“ rozhraní. Na stranu druhou však budou v této verzi představovat takový malý milník. Od uvedení DirectX 9 před několika lety se toho zas tak moc mezi jeho programátory nedělo, zato výrobce grafických procesorů lákala implementace jedné myšlenky za druhou. A právě proto přinese desítková verze několik věcí, které se spolu shodou okolností sejdou ve stejném momentě. Zaprvé se svezou s uvedením na trh ve stejné lodi s OS Windows Vista a tím i „prvním nástřelem“ Windows Display Driver Model. Pak samozřejmě nesmíme opomenout podporu unifikovaných shaderů v nové verzi rozhraní, kterou přinesou do PC světa grafiky s čipem R600 a kterou ATI hlásá do světa patrně nejvíce. Však jí velmi pěkně běhají v GPU Xenos v Xboxu 360 a v chystaném GPU R600 si jistě také nepovedou špatně. Ale nejen ATI, nýbrž i nVidia a hlavně Microsoft hlásají do světa ještě další věci v čele s řadou dalších chystaných technologií v DirectX 10 a 10.1 a také WDDM 2.0 a 2.1. Takže se na tyto vpravdě revoluční inovace podívejme tročičku podrobněji...

Kapitoly článků

2.  Geometry shader, DirectX 10

Je totiž ten pravý čas doplnit si další díl skládačky s názvem DirectX 10. V této verzi zažije své stylové antré nový typ shaderů: „geometrické shadery“. Ty provádějí primitivní operace s vrcholy, díky čemuž dokáží, narozdíl od vertex shaderů, vytvářet složitější objekty z jednoduchého vstupu. Kupříkladu na vstupu dostane geometry shader instrukci, vytvoří první bod objektu, ten „expanduje“ na přímku, přímku na trojúhelník a tak dále, až máte třeba nějaký lomený jehlan. Na vstupu tedy může být jednoduchá informace/objekt, na výstupu něco podstatně složitějšího, z čehož plyne i to, že padá limitace jednoho jediného vertexu na vstupu a stejného jediného (byť „nějak zpracovaného“) vertexu na výstupu klasických vertex shaderů. Svojí povahou tak geometry shader výpočty spadají někam mezi pixel a vertex shadery. Na stávající architektuře DirectX 9 se pak používají značně neelegantním způsobem, kdy jsou nejprve vstupní údaje spojeny do větších objektů (trojúhelníky, úsečky, pásy, atd.), aby pak mohly být předány k postupnému zpracování úzce zaměřeným vertex shaderům (které si s nimi bez této úpravy neporadí) k prvnímu kolu výpočtů. Jako druhé kolo následuje zpracování v pixel shaderech, kterým zase musí být primitiva rozsekána na jednotlivé fragmenty, jinak by si s tím pixel shadery neporadily. Na výstupu z geometry shaderu pak máte nějaký (otexturovaný) objekt, který jde do rasterizeru, dále pak pixel shaderu a nakonec na výstup, kde se vše poskládá dohromady.

Asi si teď říkáte, jak se s tímto stávající DirectX 9 architektura vypořádá v budoucnu. Inu, s výhledem na odhad náročnosti 3D scény v budoucích hrách, špatně. Na geometry shader výpočty „padne“ hned několik shader jednotek obou stávajících typů. Naproti tomu v R600 a DirectX 10 generaci bude tento problém „přetěžování“ shaderů značně eliminován, vzhledem k tomu (již jen připomínám), že shadery budou unifikované a o optimální přerozdělování shaderových výpočtů (bez ohledu na jejich povahu) se bude starat Thread Arbiter.

Efektivita DirectX

Ale vraťme se na chvíli od hardwarové vrstvy k softwarové. Jedna z věcí, které ATI ve své prezentaci zmiňuje, je spotřeba času na činnosti přímo neprodukující výpočty 3D grafiky. Stávající DirectX 9 při renderingu scény v jistých momentech neprovádějí žádné přímé výpočty, ale pouze „doprovodné aktivity“. Mezi ně patří například momenty, kdy API (aplikační rozhraní, tedy např. Direct3D) přebírá požadavky od samotné hry, momenty, kdy je od API přebírá ovladač grafické karty atd. V DirectX 9 je každá z těchto činností prováděna samostatně a tudíž si vyžádá vždy nějaký ten čas navíc. To je zkrátka realita, není to bug, je to vlastnost, dalo by se zmínit nesmrtelný citát. Ale i když je to neoddělitelná vlastnost, neznamená to, že by se nedala vylepšit a tyto „hluché“ stavy opět o něco zkrátit.

ATI: neefktivnost současného přístupu

DirectX 10 ve spojení s unifikovanými shadery celou tuto činnost zefektivní a hned si povíme jak (již tato věta to ostatně napovídá). Hluchá místa máte prakticky mezi všemi kroky výpočtů. Někde jsou takřka zanedbatelná, jinde docela markantní. DirectX 10 je bude eliminovat jednoduše. Snížením počtů míst, kde by mohl tento problém nastat. Náš vzorový příklad je jasný: geometry shader výpočty. Doposud se prováděly pomocí několika kroků při výpočtech na pixel i vertex shader jednotkách. Nyní je nahradí elegantnost unifikovaných shaderů a Thread Arbiteru. Sníží se tak počet „průchodů“ skrze jednotlivé části renderovací pipeline a tím i počet „hluchých míst“. ATI udává, že v DirectX 9 bylo (vlastně ještě je :-) „hlucho“ ve 40 % času. Pro DirectX 10 to vidí na 20 %.

Možná si teď říkáte, „skvělé, máme navíc 20 % výkonu“. Není tomu tak. Tento ušetřený prostor neznamená navýšení rychlosti výpočtů, nýbrž poskytne herním vývojářům dalších 20 % výpočetního času na zvýšení komplexnosti výpočtů (tedy například k o 20 % detailnějším modelům objektů nebo zvýšení počtu objektů ve scéně). A neplyne z toho jen šance na renderování více „nepřátel v Doomu“, ale také třeba na počítání fyziky více objektů ve scéně, pokud daná grafická karta bude určena k počítání fyzikálních výpočtů.

Další změny v DirectX 10

Vyšší efektivity desítkové verze se týká i několik dalších optimalizací, pro změnu právě v softwarové vrstvě tohoto API. DirectX 10 si budou uchovávat tzv. „state snapshots“ neboli „náhledy stavů“, myšleno v obecném slova smyslu. K tomu přibude dynamická indexace uvnitř shaderů. Náhledy stavů mají za úkol redukovat počet nutných kroků ke zjištění aktuálního stavu daného (elementárního) prvku v renderovacím řetězci. Systém tyto informace nebude muset zjišťovat přímo u zdroje, ale pouze se podívá do náhledu. Indexace shaderů opět zrychluje přístup k nim.

Další novinkou v DirectX 10 bude pohřeb tzv. „capability bits“. Ty doposud sloužily jako informační zdroj o tom, které schopnosti má ten daný grafický akcelerátor, tedy co všechno umí nebo neumí jeho GPU. To bylo pro herní vývojáře doslova noční můrou. Netřeba asi zmiňovat, že z velké části technologií si nVidia a ATI šly vlastní cestou (mimo jiné v návaznosti na to, koho v té či oné době zrovna koupili), přidejme Intel s jeho integrovanými grafikami, rádoby se vrátivší S3, pak třeba také XGI a další a vývojáři aby si pořídili poznámkový blok. DirectX 10 tomuto učiní utrum. Tato verze prostě bude disponovat podporou pro řadu technologií a pokud je dané GPU nebude beze zbytku splňovat, nedostane nálepku „Supports DirectX 10“. Žádné výjimky se nepovolují. Na finální specifikace rozhraní DirectX 10 a v tomto kontextu jeho části Direct3D si počkejme do doby uvedení, stejně tak jako na podporu ze strany výrobců grafických procesorů (tedy ATI a nVidie). Jen pro úplnost si řekněme, že podpora vymožeností přesahujících DirectX 10 specifikace není problémem, výrobci mohou rozšíření klidně implementovat, ale ... jen nám v tom hoši neudělejte moc velký zmatek :-).

Zcela logicky se evoluce dotkne i navýšení parametrů, takže v DirectX 10 povýší třeba počet instrukčních slotů na více než 65 536 (současné grafiky implementují typicky 512), zvýší se značně počet všech možných registrů, textury vzrostou až na 8192×8192 (dokážete si ve spojení s nimi a HDR představit třeba právě zmiňovaný Oblivion?), počet temp registrů roste z 32 na 4 096, počet současně zpracovatelných textur z 16 na 128 atd. Většina navýšení se koná i s ohledem na přidání geometry shaderů do specifikací Shader Modelu 4.0.

Kapitoly článků
2.  Geometry shader, DirectX 10

David "David Ježek" Ježek

Bývalý zdejší redaktor (2005-2017), nyní diskusní rejpal.

více článků, blogů a informací o autorovi

Diskuse ke článku Pod pokličkou unifikovaných shaderů, DirectX 10/10.1 a WDDM 2.0/2.1

Neděle, 8 Duben 2007 - 11:22 | Anonym | Zajímalo by mě kde budou "lidé konzumentní...
Středa, 6 Září 2006 - 21:20 | Anonym | 2 Paja666: ATI pouziva USA v Xenosu? Ano mas...
Středa, 6 Září 2006 - 20:19 | Anonym | Myslim ze je to cele ptakovina, od dlouhe...
Středa, 6 Září 2006 - 16:20 | Anonym | TOM: Taktiku nV bych nazval "vychcanejsi...
Středa, 6 Září 2006 - 14:45 | Anonym | nova verze neceho od ms bude rychlejsi nez ta...
Středa, 6 Září 2006 - 13:36 | Anonym | iLAMA: Podle slovniku je to firma, ktera nerada...
Středa, 6 Září 2006 - 12:38 | Anonym |  Tom: Co je to nVidia ? ;-)
Středa, 6 Září 2006 - 08:04 | Anonym | Jouda: http://www.3dfx.cz/glossary/slovnicek.htm
Středa, 6 Září 2006 - 00:26 | Anonym | To xR: S tim heslem je to vystizne :) Navic bych...
Středa, 6 Září 2006 - 00:07 | Anonym | Ale Tom ma vlastne pravdu. V DX10 samozrejme dale...

Zobrazit diskusi