DirectX 12 půjde blíž k hardwaru, jako Mantle. Poběží i s dnešními GPU

23. 3. 2014

Sdílet

 Autor: Redakce

Na včerejšek Microsoft přislíbil první odhalení DirectX 12, a na GDC 2014 pak skutečně novou verzi tohoto API představil. Přesně jak tvrdily různé spekulace (částečně ovšem vycházející z informací naznačených Microsoftem), půjde o nízkoúrovňové API koncepcí podobné těm používaným na konzolích. Jeho cíle jsou podobné jako u Mantle z dílny AMD a studia DICE: snížit nároky na procesor a objem výkonu, užíraného samotným API, a vytěžit tak více z výkonnostního potenciálu GPU.

DirectX 12 bude podobně jako konzolová API používat mnohem menší míru abstrakce. Ta sice činí programování snadnějším, zároveň ale znamená, že při úkolování programátor komunikuje s rozhraním, které moc neodpovídá povaze hardwaru. Z toho pak plynou výpočetní nároky navíc a neefektivní využití schopností hardwaru. DirectX 12 (respektive komponenta Direct3D) půjde k „železu“ blíž (doslova: „More Direct than ever“) a programátor bude komunikovat s reprezentací bližší grafické architektuře. Programátor tak bude mít větší možnosti a kód se zároveň bude chovat více předvídatelně, jelikož už běh samotný nebude tolik abstrahován ovladačem a API.

Aplikace samotná bude nyní kontrolovat stav grafické pipeline, zdroje a další aspekty vykreslování. V DirectX 11 je reprezentace pipeline poměrně značně abstrahovaná, představuje různé objekty, které lze všechny modifikovat. To však značně komplikuje převod těchto změn přímo na stav hardwaru, jehož fungování se od reprezentace často dosti liší. Je třeba řešit závislosti mezi stavy, ovladač musí často čekat, až procesy doběhnou (tedy až po finální vykreslení). Pod DirectX 12 je proto reprezentace předělána do sady PSO (pipeline state objects), které hardware reprezentují příměji. Jejich modifikace může ovladač přímo převádět na nativní kód a posílat GPU okamžitě. Vše by obecně mělo být mnohem efektivnější a mnohem méně zatěžovat procesor.

 

Změněné vnitřnosti API

V rámci DirectX 11 se práce zadává formou okamžitého kontextu (immediate context), což je série příkazů směřujících na GPU, tento kontext ale jen velmi nepřímo odpovídá použitému hardwaru. I v této oblasti tedy Microsoft zvýší možný výkon tím, že reprezentaci přiblíží k hardwaru blíž. DirectX 12 bude GPU instruovat formou příkazů, které budou obsahovat veškerý potřebný kontext včetně toho, který prostředek použít a potřebných zdrojů. Takový příkaz nebude záviset na předchozím kontextu a bude tedy samostatný. Ovladač tedy může příkazy zpracovávat předem a paralelně. Samotnému GPU jsou nadále odesílány sériově ve frontě, tento proces je však údajně efektivní a brzdou nebude.

Dále DirectX 12 přináší možnost využití tzv. bundlů. To jsou sady příkazů, které programátor může „zaznamenat“ a použít vícekrát, čímž opět ušetří čas CPU. Bundly se dají použít například k opakovanému vykreslování stejného modelu (ovšem třeba i s jinými texturami). Další vylepšení efektivity mají plynout z použití modelu descriptor heaps/tables, který opět bude bližší moderním GPU, či díky dynamickému odkazování zdrojů v shaderových programech. Pokud se o tuto problematiku zajímáte, raději vás odkážu přímo na blogpost Microsoftu, abyste nemuseli trpět pokusy o neodbornou interpretaci.

 

Zátěž CPU nižší o 50 %, škálování na více jader

Microsoft prezentoval první ukázku zlepšení v Direct3D 12 na 3DMarku 11 – graf můžete vidět na obrázku (DirectX 11 je v grafu nahoře, DirectX 12 pod ním). Verze tohoto testu přepsaná pro nové API snižuje zátěž CPU o 50 %, a navíc mnohem lépe rozkládá zátěž mezi dostupná jádra. Hry by tedy měly být mnohem méně limitovány výkonem v jednom vlákně a škálovat dobře na CPU s větším počtem jader. Nešlo o jediné demo: k vidění bylo také demo hry Forza Motorsport 5 pro Xbox One. Ve skutečnosti ale šlo o port na API DirectX 12 a demonstrace běžela na PC s kartou GeForce GTX Titan Black.

 

DirectX 12 bude fungovat na současných grafikách

Jelikož je DirectX 12 „velkou“ verzí API, je samozřejmě ve vzduchu otázka, zda bude vyžadovat nové grafické karty. Nuže v tomto ohledu máme dobré zprávy: AMD přislíbilo podporu na všech GPU založených na architektuře GCN (tedy Radeony HD 7000 a výš, APU Kabini, Temash a Kaveri), Nvidia pak dokonce na všech svých grafikách kompatibilních s DirectX 11 (Fermi, Kepler i Maxwell). A podporu přislíbil i Intel – DirectX 12 dodá novými ovladači grafikám svých procesorů počínaje generací Haswell.

 

Microsoft přislíbil, že DirectX 12 vydá na všech svých platformách – tedy Windows, Xboxu One (přímá kompatibilita konzole s Windows by mohla být pro vývojáře poměrně zajímavým lákadlem), Windows RT a zřejmě i Windows Phone. Na mobilních zařízeních totiž snížené nároky API na CPU zároveň povedou k vyšší výdrži na baterii, proto pro ně DirectX 12 bude neméně důležité.

 

ICTS24

Windows 7?

Microsoft bohužel nesdělil, pro které verze Windows novou verzi API uvolní. Dle současného vývojového plánu by se první várka her využívajících DirectX 12 měla objevit na sklonku roku 2015. Běžná podpora Windows 7 přitom skončí začátkem příštího roku. Bezpečnostní aktualizace sice Microsoft zajistí až do roku 2020, je ale asi celkem reálné, že nové DirectX 12 už pro tuto oblíbenou generaci OS nevydá. Samotné API má v předběžné verzi být dostupné ještě letos, takže všechna naděje ještě ztracena není, nicméně s přibývajícím časem bude čím dál logičtější, aby se Microsoft soustředil jen na Windows 8 a posléze budoucí Windows 9.

Zdroje: Microsoft, Nvidia, PC Perspective, The Tech Report