Pohľad na Direct3D 11
Obe dnes testované grafické karty sú založené na GPUs, ktoré majú ako prvé od svojich výrobcov podporu Direct3D 11. Preto sa na toto posledné grafické rozhranie od Microsoftu teraz pozriem bližšie. Direct3D 11 predstavuje nadstavbu Direct3D 10.1 a momentálne poslednú verziu Direct3D API. Využíva sa teda pre Vistu vyvinutý driver model, čo znamená, že verzia pre Windows XP nebude. Podporované sú preto všetky operačné systémy od Windows Vista (vrátane) vyššie. V dnešnej dobe to znamená – Windows Vista a 7 z desktopových OS. Direct3D 11 funguje z tohto dôvodu so všetkými grafickými kartami, podporujúcimi aspoň Direct3D 10. Microsoft ide dokonca ďalej a ponúka aj mód pre určité Direct3D 9 karty. Jedná sa o tie isté, ktoré sú podporované Aerom.
Ako v prípade Direct3D 10 nie je povolené výrobcom GPUs si vybrať podporu len určitých Direct3D 11 features. Aby mohli byť GPUs označené ako kompatibilné s Techlevelom 11, musia byť podporované všetky nové features Direct3D 11. Hlavné novinky a vylepšenia Direct3D 11 sú nasledovné:
- Multithreading
- DirectCompute
- Shader Model 5
- Dynamic Shader Linkage
- Hardware Tessellation
- BC6H/BC7 Texture Formats
Multithreading podporuje Direct3D už od verzie 9. Nebol však zavedený pre vyšší výkon, ale aby zabránil nestabilite, ktorá by mohla vzniknúť, ak by sa pristúpilo zároveň na dve vlákna. Trend v oblasti CPUs je už dlhšie zameraný na viaceré jadrá, a preto sa rozhodol Microsoft premyslieť celý koncept Multithreadingu. V Direct3D 11 je už zameraný na dosiahnutie vyššieho výkonu. Textúry a geometria sa preto dajú spracovávať naraz pomocou viacerých vlákien. To zjednodušuje streaming, teda efektívne načítavanie údajov a textúr v pozadí. Pre stále väčšie svety v hrách to aj je potrebné. Okrem toho je teraz možné spracovať príkazy pre grafickú kartu pomocou viacerých vlákien, zapísať ich do príslušných bufferov a následne v správnom poradí poslať GPU. Čím viac jadier je k dispozícii, tým je logicky možné viacej rozdeliť jednotlivé príkazy na CPUs.
DirectCompute je rozhranie pre celú GPGPU funkcionalitu v Direct3D 11. Využívajú sa tzv. Compute Shadery. Napriek tomu, že nie sú súčasťou pipeline, môžu pristupovať na rovnaké údaje. Vďaka tomu sa výrazne zjednoduší výmena uskutočnených výpočtov. Preto sa môžu použiť aj pre výpočet fyziky v hre a post-processing efektov. Podľa Microsoftu je možné dosiahnuť až 200% navýšenie výkonu. Ušetrený výkon sa môže použiť na niečo iné. Možné je to vďaka tomu, že všetky vlákna compute shaderov môžu pristupovať na spoločnú, 32 KB veľkú pamäť v GPU.
Shader Model 5.0 je High Level Shader Language (HLSL) nového Direct3D 11.
Výkon GPUs postupne narastal a s ním aj množstvo obmien toho istého shaderu v hrách, ktoré sa musia spravovať. Aby sa počet týchto shaderov znížil, vznikla myšlienka übershaderu. Ten zjednocuje všetky varianty jedného shaderu a pomocou parametra sa počas behu vyberie konkrétny. Jeho problém je ale horší výkon, a preto siahala väčšina vývojárov znovu k veľkému počtu obmien shadera. Tento problém chce Direct3D 11 riešiť pomocou Dynamic Shader Linkage. Shadery ktoré vznikli pomocou DSL obsahujú všetky varianty v optimalizovanej a komprimovanej podobe. Počas behu sa pomocou parametra vyberie ten správny. Pre vývojárov sa táto verzia podobá übershaderu, po stránke výkonu sa však má rovnať verzii s množstvom obmien toho istého shaderu.
Hardvérová teselácia, ktorá mala byť pôvodne zavedená už s Direct3D 10, sa teda konečne dostala do Direct3D. Predchádzajúce pokusy implementovať teseláciu do Direct3D sa nepodarili kvôli slabej podpore zo strany výrobcov GPUs. nVidia sa o to pokúšala už pomocou RT-patches na GeForce 3 a ATi s N-patches (True-Form) na Radeon 8500, ale neúspešne, a preto odpadla v ďalšej generácii táto hardvérová podpora. V Direct3D 11 ide Microsoft zatiaľ najviac flexibilnou cestou a je možné použiť rôzne algoritmy pre teseláciu - subdivisions, PN triangles, bezier patch with displacement atď. Teselátor je v Direct3D 11 podporovaný dvoma novými shader úrovňami. Hull shader vypočíta úroveň teselácie. Využíva na to vertex shaderom vypočítané kontrolné body. Domain shader vytvorí z výsledku teselácie znovu vrcholy. Tie sú zvyškom render-pipeline spracovávané ďalej.
BC6H a BC7 predstavujú nové formáty kompresie pre (HDR) textúry. Po zavedení DXT kompresie pre textúry sa javilo, že táto téma je pre Microsoft uzatvorená. V Direct3D 10 sa len premenovali na BC (Block Compression) a rozšírili o dve varianty rovnakej technológie. BC6H a BC7 v Direct3D 11 sú ale po technickej stránke ozajstné novinky. BC6H slúži na kompresiu formátov so 16 Bitmi na farbu a dosahuje kompresiu až na 1/6 pôvodnej veľkosti. BC7 sa zameriava na formáty textúr ako doteraz, poskytuje ale výrazne lepšiu kvalitu. Dosahuje kompresiu 3:1 pri textúrach bez alpha a 4:1 s alpha kanálom. Oba nové formáty využívajú adaptívny algoritmus, ktorý vie podľa farebných rozdielov použiť pre každý blok 16 pixelov rozličnú kompresiu. Aby sa zabránilo odchýlkam vo výsledku, definuje Direct3D 11 tiež, ako má každý bit po dekompresii vyzerať.
Nové formáty kompresie pre textúry ako aj teselátor sú čisto Direct3D 11 features a budú ich preto môcť využívať jedine Direct3D 11 GPUs. Multithreading bude fungovať s príslušným ovládačom aj na grafických kartách s podporou staršieho Direct3D spolu s osekanou verziou Dynamic Shader Linkage, DirectCompute (4.x) a adaptívnou teseláciou. Určité konštrukcie zo Shader Modelu 5.0 je možné emulovať aj na starších GPUs, využitia v praxi sa ale asi nedočkáme. Ďalšie informácie ako aj všetky prezentácie a zvukové záznamy nájdete na stránkach Microsoft Gamefest 2008 a 2010.
AmOK
1adad1
numlockn
crux2005
yesper
yesper
tutukan1
16cmfan
exot87
icefire
like
exot87
like
technar
Frosty
marcell
crux2005
exot87
Frosty
exot87
Frosty