A Microsoft leleplezte a DirectX 12-t

Ez lett a Microsoft DirectX 12

A Microsoft hivatalosan is lerántotta a leplet a korábban már beharangozott DirectX 12 előzetes képességeiről. Minden részlet nem került a helyére, mivel az API még tervezés alatt áll, így olyan dolgok is hozzá lesznek rakva, amelyekről a vállalat jelenleg nem beszél, de az alapokat azért tisztázták. A GDC-n tartott előadás során a redmondi óriáscég elmondta, hogy a rendszert a fejlesztői visszajelzések alapján tervezték, így a DirectX 12 kiszámítható, konzisztens teljesítményt kínál, jól skálázódik, illetve az aktuálisnál alacsonyabb hozzáférést biztosít a hardverekhez.

A fő paraméterek szempontjából a DirectX 12 több helyen másolja a Mantle API-t, míg más területeken a DirectX 11-ben alkalmazott koncepció alapos továbbfejlesztéséről van szó. Ha a Microsoft úgyis a fejlesztők igényeit hozta fel, akkor először vegyük a legnagyobb problémájukat. A mai szabványos API-k egyszerűen nem kínálnak gyakorlatban működő koncepciót a többmagos processzorok kihasználására. Ezt az előadás során is elismerték, azaz burkoltan bevallották, hogy az erre használható deferred context funkció a parancslistával egy totális bukás. Ez persze nem újdonság, hiszen az előbbieket minden fejlesztő elmondja, aki foglalkozott vele, de jó hallani, hogy a szabvány alkotója is realista, mivel a hibákat felismerve új koncepciót építhetnek fel.

Tulajdonképpen ezt tette a Microsoft is. A DirectX 12 új végrehajtási modellje nagyon hasonlít a Mantle API működésére, hiszen a grafikus vezérlő logikai részeihez több parancslista tartozhat, melyekkel párhuzamosan etethető a hardver. Ez lehetőséget ad a parancsok aszinkron végrehajtására, de ez a funkció nem tartozik az alapvető követelmények közé, viszont opcionálisan támogatható, ha az adott gyártó terméke képes rá.

Információink szerint az új végrehajtási modell segítségével képkockánként ötvenezer rajzolási parancs gond nélkül kiadható, ami az aktuális DirectX API kétezres ajánlott szintjéhez képest őrületes előrelépés, de a Mantle százezres szintjét azért nem hozza. Viszont a DirectX 12 újítása a csomag nevű koncepció, ami lényegében az instancing kiterjesztésének vagy továbbgondolásának tekinthető. Tulajdonképpen a csomagok lehetőséget adnak az addig betöltött objektumok lemásolására, viszont a másolatok tulajdonságai lényegesen nagyobb mértékben módosíthatók, mint az instancing 2.0-val. Erre a fejlesztőknek persze több erőforrást kell befektetni, mintha képkockánként több rajzolási parancs hatékony feldolgozását engedne meg az API, de végeredményben a csomagok bevetésével a DirectX 12 minden probléma nélkül képes hozni a Mantle teljesítményét.

A CPU erőforrásainak felszabadítása szempontjából jó hír, hogy a DirectX 12 jelentősen javít az eddig alkalmazott binding modellen. Ez ugyan még mindig nem bindless elvű, így ebből a szempontból a Mantle API, illetve az OpenGL 4.4 a specifikus kiterjesztéseivel előrébb jár, viszont olyannyira sikerült redukálni a bekötésekkel járó processzorhasználatot, hogy ez elvileg nem okozhat majd gondot. Ezen a ponton az új API nagyon épít arra, ahogy az Xbox One IGP-je működik, és nem mellesleg a mai modern grafikus architektúrák is ezzel a modellel dolgoznak.

Hirdetés

A DirectX 11-ben az volt a fő gond, hogy például a program létrehozza az erőforrásokat, majd ezeket beköti számos slotba a futószalag különböző shader lépcsőin. A shaderek ezekből a bekötött slotokból olvassák az adatokat, ami nem szerencsés, mert ha a program különböző erőforrásokból szeretne rajzolni, akkor újra be kell kötni a különböző látképeket a különböző slotokba, és újra ki kell adni a rajzolási parancsot. Itt több probléma is fennáll. Egyrészt a rajzolási parancs nagyon nincs ingyen, és tulajdonképpen ezzel pazaroljuk az erőforrást, emellett a bekötés processzorigényes, ami szintén pazarlás.

A DirectX 12 lényeges változtatása, hogy bevezeti az úgynevezett leírótáblákat, amelyek reprezentálják egy részét a teljes leíróhalmaznak. A leírótáblák módosítása rendkívül olcsó művelet, és az új API ezt használja ki. A program számos látképet készít az erőforrásokról, így pedig kiválasztható, hogy mely erőforrások használata szükséges az adott rajzolási parancshoz. Az előnyök egyértelműek. Csak annyi rajzolási parancs lesz, amennyi feltétlenül szükséges, illetve a bekötések száma is jelentősen redukálódik.

Lényeges változás még, hogy csökkent az állapotváltások többletterhelése is, illetve a shader és a futószalag állapota gyorsítótárazható, amivel meg lehet akadályozni a valós idejű shader újrafordítást. Utóbbit a fejlesztők mindig is utálták az aktuális DirectX API-ban, mivel képtelenek voltak meghatározni ennek bekövetkeztét, így arra is képtelenek voltak, hogy megszüntessék az ebből eredő mikroakadásokat.

A fő kérdés a DirectX 12-vel kapcsolatban előzetesen az volt, hogy a VRAM elérését hogyan oldja meg a Microsoft. A Mantle esetében az AMD rendkívül egyszerű modellt választott, hiszen odaadta a kontrollt a fejlesztők kezébe és ennyi. Vitathatatlan, hogy ez a legegyszerűbb és leghatékonyabb megoldás, ha a fejlesztők megbízhatók, de egy ténylegesen szabványként kigondolt API esetében ez nem kifizetődő. A Microsoft továbbra sem ad teljesen explicit elérést a VRAM-hoz, de jelentősen javítják a sokat kritizált WDDM felületet, hogy a fejlesztők munkája könnyebb legyen. Az alkalmazás megkapja a kontrollt, hogy menedzselje a memóriahalmazokat, és a memóriaallokáció, az erőforrások létrehozása, illetve ezek megsemmisítése rendkívül olcsó lett (amiről egy új driver modell gondoskodik majd). Utóbbi nagyon fontos előrelépés, mert a DirectX 11-ben sok fejlesztő csak a legvégső esetben semmisít meg egy létrehozott erőforrást, így amíg van szabad memóriakapacitás, addig azt használni kell, mert annak felszabadítása vállalhatatlanul költséges.

Végül két érdekes extra, hogy az API-ban megjelent pár speciális erőforrás. Ezek jelenleg az Xbox One IGP-jében található Swizzle Copy motorokhoz valók, de nyilván opcionálisan elérhetők PC-n is, ha valamelyik gyártó készít megfelelő architektúrát kihasználásukhoz.

Az extrák és a támogatás

Az előző oldal igen tömören vázolta fel a DirectX 12-t, illetve az API-nak az összes képessége sem ismert még, de például az előadáson előkerült, hogy a Microsoft nem módosít az aktuális, úgynevezett feature levelekre épülő koncepcióján. Olyannyira nem, hogy a D3D_FEATURE_LEVEL_11_0 és a D3D_FEATURE_LEVEL_11_1 változatlan formában része az új API-nak. Persze a strukturális működés nem ugyanaz, de funkcionális szempontból egyszerűbbnek látta a vállalat, ha ezekhez nem nyúl hozzá. A fentebb nem említett, gyengébb szintek szimplán kikerültek, de ez nem akkora gond.

A jó hír az, hogy a DirectX 12-t mindegyik, legalább DirectX 11-et támogató hardver képes támogatni. Ehhez nyilván szükségesek új driverek, de a hardverek megfelelők. A legtöbb rendszer persze a D3D_FEATURE_LEVEL_11_0 szintet kapja meg, míg az AMD GCN, illetve az Intel Gen7.5 architektúrája a D3D_FEATURE_LEVEL_11_1 szintre nevez be. A többi ismert extra egyelőre opcionális, de az már kiderült, hogy az Xbox One ezeket támogatja, így tekintve, hogy ebben AMD GCN architektúra dolgozik, kitalálható, hogy a támogatás az újabb Radeonokhoz megoldható lesz PC-n is (kivételt képeznek a Swizzle Copy motorokhoz tartozó funkciók).

A jelölés szempontjából még nincs minden tisztázva, de a Microsoft nézőpontja szerint a DirectX 12-t az alapvető követelmények teljesítése esetén fel lehet tüntetni a termék dobozán. Ez persze nem biztos, hogy jó ötlet, mivel előfordulhat majd az is, hogy a rengeteg opcionálisan támogatható funkció közül egyes hardverek nem támogatják pont azt, ami valamely játék valamely effektjéhez kell, így ilyenkor az ominózus grafikai beállítás be sem kapcsolható, hiába díszeleg a dobozon a DirectX 12 felirat.

A Microsoft vélhetőleg a gyártók nyomása alá került, hiszen a fejlesztők egyrészt követelik az újításokat, miközben a felületet támogató cégek igen eltérő irányba fejlesztik a hardvereket, és nem mindenkinek jó az, hogy az API tudása extrém szintre emelkedjen. Egyszerűen képtelenség mindenkit tökéletesen kiszolgálni, így a redmondi óriáscég engedékeny volt. A fejlesztői igényeket kiszolgálják, a gyártóknak pedig engedik a DirectX 12 matrica felhelyezését akkor is, ha nem támogatja a hardver az API összes funkcióját. A tudatos vásárló úgyis utánanéz a hardverek képességeinek, az átlagos felhasználót pedig ez igazából nem is érdekli.

A fejlesztés szempontjából egyébként tervben van egy D3D_FEATURE_LEVEL_12_0 szint, ami információink szerint az Xbox One képességeihez lesz igazítva, de az említett konzol extrái amúgy is elérhetők a specifikus DirectX 11.x API-val. Bár ma még nehéz az egyes API-k összehasonlítása, azért a könnyebb átláthatóság érdekében egy táblázatot összeraktunk a DirectX 12, a DirectX 11.2 és a Mantle képességeiről:

Platform DirectX 11.2 DirectX 12 Mantle
Shader kódba beköthető egyedi textúrák száma 128 128 nincs korlátozva
Támogatott UAV-k száma 64 64 nincs korlátozva
Egyidejűleg írható és olvasható UAV formátumok single uint32 single uint32 bármelyik
Hardveres virtuális textúrázás opcionális opcionális van
Hardveres Tile Pool támogatás nincs nincs van
Leképzőparancsok újrahasznosítása Instancing 2.0 csomagok nincs
VRAM elérése közvetett optimalizált közvetlen
Aszinkron compute nincs opcionális van
Valós idejű shader újrafordítás van nincs nincs
Driver szerver szálak jellemző mennyisége sok kevés nincs
Processzorhasználat bekötéskor van optimalizált nincs
Monolitikus futószalag nincs nincs van
Többszálú leképzés támogatása limitált van van
Fejlett folyamatirányítás nincs nincs van

Fontos megjegyezni, hogy a DirectX 12 esetében még messze a megjelenés, így például csak a D3D_FEATURE_LEVEL_11_1 szintet elemeztük, mivel az ennél jobb elérésről még nincs konkrét információ, illetve a nem ismert részeket egyszerűen kihagytuk az összehasonlításból. Itt többek között gondolunk a több GPU-s támogatásra, amiről a Microsoft csak annyit mondott, hogy a fejlesztők az API-n belül megkapják a kontrollt az elérhető hardverek kihasználására, de a hogyan egyelőre még ismeretlen. Vélhetőleg a Mantle API-hoz hasonló működésre van kilátás, teljesen explicit hardvereléréssel, ezt azonban biztosan nem tudhatjuk.

3DMark DirectX 11-gyel és DirectX 12-vel. Látható a jóval kedvezőbb processzorhasználat. 3DMark DirectX 11-gyel és DirectX 12-vel. Látható a jóval kedvezőbb processzorhasználat.
3DMark DirectX 11-gyel és DirectX 12-vel. Látható a jóval kedvezőbb processzorhasználat. [+]

A DirectX 12 egyébként működik. A 3DMark egy nem publikus verziója már futott a rendszeren, ráadásul ugyanaz a teszt nagyjából 50%-kal gyorsabb volt, mint DirectX 11-ben ugyanazon a hardveren. A Forza Motorsport 5 PC-s verziója is feltűnt, ami azt hivatott bizonyítani, hogy a DirectX 12-vel működhet a játék PC-n is. Ez sajnos egyelőre csak demonstráció, mivel a Microsoft nem tervezi a program kiadását erre a platformra.

A megjelenés szempontjából sok adat még nincs. Az biztos, hogy az API már elérhető egy előzetes konstrukcióban, így a Microsoft várja a fejlesztők jelentkezését. A tervek között szerepel egy 2014 végére tervezett előzetes kiadás, amit bárki elérhet, így a rendszer kipróbálható élesben, ám ekkor még nem garantálják a hibátlan működést, de ez természetes. A megjelenés 2015 végére van ütemezve vélhetőleg a Windows 9-cel párhuzamosan, illetve a Microsoft kijelentette, hogy a startra mindenképp szeretnének DirectX 12-t használó játékot prezentálni. A fejlesztőkön ez valószínűleg nem fog múlni, hiszen ezzel az API-val egyetlen leképzővel támadhatják az Xbox One konzolt, a Windows PC-ket, illetve a Windows telefonokat és tableteket, ami a kiadások szempontjából nagyon kedvező konstrukció.

Abu85

Azóta történt

Előzmények