A Microsoft a GDC alkalmával lényegében teljesen leleplezte a DirectX 12 véglegeshez nagyon közeli specifikációját. Bár véglegesítés még mindig nincs, de már nagyon kicsi az esély, hogy bármi változzon.
Magáról az API-ról már igen sokat írtunk, így arról is elmélkedtünk, hogy mi kellhet a támogatásához. Szerencsére nem változtak jelentősen a specifikációk, így a korábbi írásaink lényegében továbbra is helytállóak, de van ami módosult. Többek között a bekötési modell esetében apró változások álltak be. Az új és végleges szintekről az alábbi táblázat ad felvilágosítást:
Szint | TIER_1 | TIER_2 | TIER_3 |
---|---|---|---|
Leíróhalmaz mérete | 65 536 | 1 048 576 | nincs limitálva |
Leírótáblák száma | 5 | 5 | nincs limitálva |
UAV-k száma az összes shader lépcsőn | 8 | 64 | teljes leíróhalmaz |
CBV-k száma shader lépcsőnként | 14 | 14 | teljes leíróhalmaz |
SRV-k száma shader lépcsőnként | 128 | teljes leíróhalmaz | teljes leíróhalmaz |
Mintavételezők száma shader lépcsőnként | 16 | teljes leíróhalmaz |
teljes leíróhalmaz |
A korábbi opcióhoz képest annyi változott, hogy a TIER_1 szint esetében az UAV-k száma az összes shader lépcsőn maximum 8 lehet, szemben a korábbi 64-gyel. Ez tulajdonképpen annyit jelent, hogy az Intel Haswell és Broadwell lapkákban található IGP-k tudása részben elvész. A Gen7.5 és Gen8 architektúra ugyanis képes lenne 64 UAV-t kezelni, de más szempontok miatt a TIER_1 szintre lesz limitálva, így a támogatott UAV-k száma is 8-ra lesz korlátozva a hardveres tudás ellenére is.
A Microsoft az előadáson egyébként azt jelezte, hogy a TIER_2 szintet a DirectX 12-t támogató, Steam statisztikákban szereplő hardverek szempontjából a játékosok 44%-a eléri, de ezt nehezen tudtuk elképzelni, hiszen a technikai specifikációk szerint csak a GeForce GTX 960, 970 és 980 jelzésű VGA-k sorolhatók ide. Erre vonatkozóan rákérdeztünk a lehetőségekre, és kiderült, hogy a vállalat úgy hitte, hogy több NVIDIA architektúra is képes 64 UAV-t kezelni, így érthető miért jött ki a furcsa eredmény.
Némi kutatás után lényegében elmondható, hogy a TIER_1 szintet az Intel Haswell és Broadwell lapkákban található IGP-k, azaz a Gen7.5 és Gen8 architektúra támogatja, kiegészítve az NVIDIA Fermi és Kepler architektúrára épülő grafikus vezérlőkkel, illetve az NVIDIA GM107-es lapkával, amely az első generációs Maxwell architektúrára alapoz. A TIER_2 szintet a második generációs Maxwell architektúra támogatja, értve ezalatt a GM204-es és a GM206-os lapkákat, míg a TIER_3-as szint az Xbox One és az AMD GCN architektúrájára épülő Radeonok kiváltsága.
Az egyéb újításokra rátérve visszaköszön mindaz, amit a Microsoft a DirectX 11.3 bemutatásakor már megismerhettünk. Ezek be lesznek sorolva az új Feature Level szintekbe. Utóbbiról általánosan még a DirectX 11.1-et elemző cikkünkben írtunk, így az friss információk megértéséhez érdemes elolvasni az alábbi oldalt.
A DirectX 12 négy futtatási szintet különböztet meg, vagyis a kiöregedett szinteket a Microsoft eltávolította. Az új API-ban elérhető futtatási szintek különbségeit az alábbi táblázatban foglaljuk össze:
Feature Level: | 12_1 | 12_0 | 11_1 | 11_0 |
---|---|---|---|---|
Shader modell | 5.0 | 5.0 | 5.0 | 5.0 |
Geometry shader támogatás | van | van | van | van |
Stream out támogatás | van | van | van | van |
Compute shader támogatás | van | van | van | van |
Tesszelláció támogatás | van | van | van | van |
Gather4 támogatás | van | van | van | van |
BC4/BC5 támogatás | van | van | van | van |
BC6H/BC7 támogatás | van | van | van | van |
Occlusion query-k támogatása | van | van | van | van |
Alpha-to-coverage támogatás | van | van | van | van |
Logikai operációk támogatása | van | van | van | opcionális |
TIR funkció elérhetősége | van | van | van | nincs |
Minimálisan előírt bekötési szint | TIER_2 | TIER_2 | TIER_1 | TIER_1 |
Raster order views támogatás | opcionális | nincs | nincs | nincs |
Opcionális Typed UAV loads szint | TIER_2 | TIER_1 | nincs | nincs |
Konzervatív raszterizáció | opcionális | nincs | nincs | nincs |
A futtatási szintek támogatása szempontjából a DirectX 12 nagyon laza pórázon lóg. A D3D_FEATURE_LEVEL_11_0 lényegében nem változott. A D3D_FEATURE_LEVEL_11_1 szint esetében viszont a Microsoft elengedte a 64 UAV kezelésének követelményét, így ezt a szintet mostantól az NVIDIA Kepler és Fermi architektúrája is képes kezelni, ahogy az első generációs Maxwell architektúrára alapozó GM107-es lapka, illetve az Intel Gen7.5 és Gen8 architektúrára épülő IGP-i is. Itt megint az Intel húzta a legrövidebbet, ugyanis a raster order views funkciót a hardvereik képesek lennének támogatni, de ez a D3D_FEATURE_LEVEL_11_1 szinten nem elérhető, tehát ismét buktak egy képességet. Erre valószínűleg egy gyártófüggő kiterjesztést fognak készíteni, amit egyébként a DirectX 12 megenged.
A D3D_FEATURE_LEVEL_12_0 és a D3D_FEATURE_LEVEL_12_1 szint alapvető igénye lényegében csak a bekötési modell TIER_2 szintje, így a többi opcionális funkció miatt a GM204-es és a GM206-os NVIDIA lapkák, illetve a GCN architektúrára épülő Radeonok képesek támogatni. Az igazi kérdés az, hogy az opcionális funkciókból mit támogatnak ezek a hardverek. Erre vonatkozóan a Microsoft nem válaszolt. Erről részleteket majd a gyártók közölnek. Nagyon valószínű, hogy a GM204-es és a GM206-os lapkákon meg lesz oldva a támogatás, de erre lehetőség van az GCN architektúráján is.
A Typed UAV loads esetében a GCN architektúrára épülő Radeonok biztosan kezelik a legmagasabb szintet, míg a GM204-es és a GM206-os NVIDIA lapkáknál biztosan adott a TIER_1 szint, és nagyon valószínű a TIER_2 támogathatósága.
Végül újítás lesz még a Volume Tiled Resources funkció, amely a Tiled Resources képesség kiegészítése a 32 bites 3D-s textúrák kezelésével. Ez egy abszolút opcionális funkció lesz ugyanis a GM204-es és GM206-os lapkák, illetve a GCN architektúrára épülő Radeonok kezelik magát a képességet, de eltérő 3D-s textúraméret mellett. Éppen ezért ezt a funkciót a programokba kétszer kell majd implementálni. Fontos kiemelni azt is, hogy az explicit memóriamenedzsment következtében a Tiled Resources működése megváltozott, így nagyrészt az adott videojáték-motorba kell implementálni magát a funkciót, így a DirectX 12 erre csupán csoportosítást kínál.