DirectX 11 - seznámení s budoucností
16.2.2009, Petr Štefek, recenze
V dnešním článku nahlédneme pod pokličku budoucího rozhraní DirectX 11, které je do značné míry vskutku revolučním API, jež bude zajímavé jak pro vývojáře, tak pro nás uživatele. Blýská se nám tedy na lepší časy?
Kapitoly článku:
- DirectX 11 - seznámení s budoucností
- DirectX 11 - co nás čeká za novinky?
- DirectX 11 - zázrak jménem Compute Shader (CS)
- Tesselace – staronová technika v akci
- Tesselator - krok zpět nebo logické vyústění?
- Závěr - blýská se na lepší časy?
Nejčastěji skloňovaným slovem ve spojení s DirectX 11 je výraz Compute Shader (volně přeloženo výpočetní shader). Zjednodušeně řečeno se jedná rozšíření grafické pipeline o možnost počítání bežných (obecných) algoritmů, které posunuje rozhraní DirectX 11 o něco dále od striktního zaměření na rendering.
Díky struktuře pipeline a jejich jednotlivých úrovní jsou nepříjemné limity ve vykonávání obecného kódu. Ten sice můžeme vložit do pixel shaderu, ale opět nemáme svobodu v užívání datových struktur (větvení kódu) a sdílení dat mezi pixely (a tudiž i vlákny) je poměrně náročné. Vše je korunováno nutností vykreslování trojúhelníků a hledání řešení na výše zmíněné problémy.
DirectX 11 Compute Shader vývojářům ovšem do značné míry pomůže překonat problém v práci s datovými strukturami a vykonávání obecného kódu. Stejně jako další plně programovatelné úrovně DirectX 10 a DirectX 11 pipeline, bude mít k dispozici jasně dané množství shader procesorů.
Hardware pro tyto účely bude muset být mnohem více flexibilní než je tomu u současných GPU a podporovat například nahodné čtení/zápis, neregulérní pole, mnohonásobné výstupy, přímé vyvolávání individuálních vláken nebo jejich skupin podle potřeby programátora. Daĺe můžeme jmenovat 32 tisíc sdílených registrů, management skupin vláken, atomické instrukce, synchrpmizaci konstrukcí a možnost vykonávat neplánované vstupně výstupní operace.
Výpočetní shader, ale nemá jen pozitivní stránky a jeho využití znamená, že libovolné vlákno v něm procesované ztrácí spojení s geometrií scény (obecně každé vlákno odpovídá pixelu). Znamená to ovšem pouze to, že pro použití například vzorků textur není automaticky počítán LOD, ale je ho třeba specifikovat dodatečně. Další funkce jako je anti-aliasing, alpha blending nebo depth culling nemohou být z podstaty funkce CS vykonávaný na této úrovni pipeline.
Možnosti, které spolu s výpočetním shaderem přícházejí, jsou téměř nekonečné, ale v naprosté většině případů pomohou vývojářům udělat některé speciální efekty a techniky, které nejsou možné udělat za pomocí klasického pixel shaderu. Příkladem těchto „hi-tech“ vymožeností může být tzv. A-Buffer pro superkvalitní vyhlazování hran objektů nebo pokročilou průhlednost objektů, dále mohou využit například pokročilý deferred shading (stínování) , pokročilé post-processing efekty a mnoho dalších technik.
Výpočetní shader je zde také pro jiné nasazení než jen pro případy renderování, což dokažují možnosti, jako je inverzní kinematika, fyzika, umělá inteligence (AI) a mnoho dalších úloh, které jsou obvykle přidělovány procesoru. Výhodou zpracování těchto dat ve výpočetním shaderu je jejich rychlá dostupnost právě v GPU. Teoreticky je možné zpracovávat věci jako umělá inteligence (AI) současně na GPU a CPU, pokud najdeme algoritmus, který nám poskytne vždy stejné výsledky na obou typech procesorů.
Dobrým příkladem může HDR rendering, kde data v pixel shaderu vyžadují několikanásobný průchod a pár dalších triků pro všechny pixely scény. Přes fakt, že sdílení dat (CS) zpomaluje některé operace, tak je stále mnohem rychlejší než několik průchodů v pixel shaderu. Výpočetní shader je tak ideální pro tento typ algoritmů.
Když se nyní vrátíme poněkud zpátky k článku o OpenCL, tak si jistě vzpomenete, že jsme v něm mluvili o sdílení datových struktur mezi OpenCL a OpenGL, kde tato spolupráce představuje jakýsi prototyp dokonalé symbiózy. DirectX 11 má tzv. Compute Shader ve svých specikacích a je jednou z klíčových vlastností, což ovšem neznamená, že konkurenční OpenCL (nejedná se o úplně přímou konkurenci) neumí to samé v bledě modrém a dokonce jsou jeho možnosti mnohem širší, neboť není svazován rozhraním DirectX 11. To znamená skoro naprostou svobodu ve zpracovávání obecných úloh, které obvykle má na starosti CPU.
OpenGL ustoupilo do pozadí před přibližně 5 lety, kdy se drtivě prosadilo DirectX. S příchodem OpenCL je možné, že možnosti tohoto spojení budou ku prospěchu profesionálním programům, jako jsou CAD/CAM aplikace nebo vizualizační programy. Přes všechnu flexibilitu OpenCL je nepravděpodobné, že by nahradilo, nebo nějak výrazně konkurovalo DirectX 11. Jeho užitek uvidíme spíše u klasických aplikací, které do dnešní doby počítaly výhradně procesory (zpracování videa, zvuku nebo grafiky atd.).
Díky struktuře pipeline a jejich jednotlivých úrovní jsou nepříjemné limity ve vykonávání obecného kódu. Ten sice můžeme vložit do pixel shaderu, ale opět nemáme svobodu v užívání datových struktur (větvení kódu) a sdílení dat mezi pixely (a tudiž i vlákny) je poměrně náročné. Vše je korunováno nutností vykreslování trojúhelníků a hledání řešení na výše zmíněné problémy.
DirectX 11 Compute Shader vývojářům ovšem do značné míry pomůže překonat problém v práci s datovými strukturami a vykonávání obecného kódu. Stejně jako další plně programovatelné úrovně DirectX 10 a DirectX 11 pipeline, bude mít k dispozici jasně dané množství shader procesorů.
Hardware pro tyto účely bude muset být mnohem více flexibilní než je tomu u současných GPU a podporovat například nahodné čtení/zápis, neregulérní pole, mnohonásobné výstupy, přímé vyvolávání individuálních vláken nebo jejich skupin podle potřeby programátora. Daĺe můžeme jmenovat 32 tisíc sdílených registrů, management skupin vláken, atomické instrukce, synchrpmizaci konstrukcí a možnost vykonávat neplánované vstupně výstupní operace.
Výpočetní shader, ale nemá jen pozitivní stránky a jeho využití znamená, že libovolné vlákno v něm procesované ztrácí spojení s geometrií scény (obecně každé vlákno odpovídá pixelu). Znamená to ovšem pouze to, že pro použití například vzorků textur není automaticky počítán LOD, ale je ho třeba specifikovat dodatečně. Další funkce jako je anti-aliasing, alpha blending nebo depth culling nemohou být z podstaty funkce CS vykonávaný na této úrovni pipeline.
Možnosti, které spolu s výpočetním shaderem přícházejí, jsou téměř nekonečné, ale v naprosté většině případů pomohou vývojářům udělat některé speciální efekty a techniky, které nejsou možné udělat za pomocí klasického pixel shaderu. Příkladem těchto „hi-tech“ vymožeností může být tzv. A-Buffer pro superkvalitní vyhlazování hran objektů nebo pokročilou průhlednost objektů, dále mohou využit například pokročilý deferred shading (stínování) , pokročilé post-processing efekty a mnoho dalších technik.
Výpočetní shader je zde také pro jiné nasazení než jen pro případy renderování, což dokažují možnosti, jako je inverzní kinematika, fyzika, umělá inteligence (AI) a mnoho dalších úloh, které jsou obvykle přidělovány procesoru. Výhodou zpracování těchto dat ve výpočetním shaderu je jejich rychlá dostupnost právě v GPU. Teoreticky je možné zpracovávat věci jako umělá inteligence (AI) současně na GPU a CPU, pokud najdeme algoritmus, který nám poskytne vždy stejné výsledky na obou typech procesorů.
Dobrým příkladem může HDR rendering, kde data v pixel shaderu vyžadují několikanásobný průchod a pár dalších triků pro všechny pixely scény. Přes fakt, že sdílení dat (CS) zpomaluje některé operace, tak je stále mnohem rychlejší než několik průchodů v pixel shaderu. Výpočetní shader je tak ideální pro tento typ algoritmů.
Když se nyní vrátíme poněkud zpátky k článku o OpenCL, tak si jistě vzpomenete, že jsme v něm mluvili o sdílení datových struktur mezi OpenCL a OpenGL, kde tato spolupráce představuje jakýsi prototyp dokonalé symbiózy. DirectX 11 má tzv. Compute Shader ve svých specikacích a je jednou z klíčových vlastností, což ovšem neznamená, že konkurenční OpenCL (nejedná se o úplně přímou konkurenci) neumí to samé v bledě modrém a dokonce jsou jeho možnosti mnohem širší, neboť není svazován rozhraním DirectX 11. To znamená skoro naprostou svobodu ve zpracovávání obecných úloh, které obvykle má na starosti CPU.
OpenGL ustoupilo do pozadí před přibližně 5 lety, kdy se drtivě prosadilo DirectX. S příchodem OpenCL je možné, že možnosti tohoto spojení budou ku prospěchu profesionálním programům, jako jsou CAD/CAM aplikace nebo vizualizační programy. Přes všechnu flexibilitu OpenCL je nepravděpodobné, že by nahradilo, nebo nějak výrazně konkurovalo DirectX 11. Jeho užitek uvidíme spíše u klasických aplikací, které do dnešní doby počítaly výhradně procesory (zpracování videa, zvuku nebo grafiky atd.).