A Microsoft a Windows 10 júliusi startjára felkészülve véglegesítette a DirectX 12 specifikációjának jelentős részét, illetve megkezdődött a megfelelőségi teszt véglegesítése is, amire ebben a hónapban szintén sor kerül. A WDDM 2.0-t a vállalat már korábban lezárta, így jól halad a fejlesztés.
A félreértések elkerülése végett már az elején leszögezzük, hogy bizonyos funkciók támogatása különböző szinteken történhet. Ezek TIER_1, TIER_2, TIER_3 – és így tovább – jelzéssel vannak megkülönböztetve. Ezek jelentése minden funkció esetében eltérő. Például a bekötési modell esetében megvan szabva egy bekötési tábla, ahol a különböző szintek képességei le vannak írva. Ugyanez igaz a Tiled Resources funkcióra, amelynek megint van egy teljesen különálló táblázata erre. Az architektúrák ezeket teljesen különállóan támogatják.
Az év első felében persze rengeteg specifikáció megváltozott, főleg a bekötési modell területén, de már az is a legutóbb közölt, immáron tényleg végleges formát használja. Az erre vonatkozó táblázatot a teljesség érdekében bemásoljuk ide:
Szint | TIER_1 | TIER_2 | TIER_3 |
---|---|---|---|
Leíróhalmaz mérete | 1 048 576 | 1 048 576 | több mint 1 048 576 |
Leírótáblák száma | 5 | 5 | nincs limitálva |
UAV-k maximális száma az összes shader lépcsőn | 8 vagy 64 | 64 | teljes leíróhalmaz |
CBV-k maximális száma shader lépcsőnként | 14 | 14 | teljes leíróhalmaz |
SRV-k maximális száma shader lépcsőnként | 128 | teljes leíróhalmaz | teljes leíróhalmaz |
Mintavételezők maximális száma shader lépcsőnként | 16 | teljes leíróhalmaz |
teljes leíróhalmaz |
A véglegesített funkciók szempontjából a hardverek így támogatják a DirectX 12-t:
DirectX 12 funkciók | AMD Radeon | NVIDIA GeForce | Intel HD Graphics | ||||||
---|---|---|---|---|---|---|---|---|---|
Architektúra | GCN1 (S.I.) |
GCN2 (C.I.) |
GCN3 (V.I.) |
Fermi | Kepler | Maxwell (v1) |
Maxwell (v2) |
Gen7.5 | Gen8 |
Bekötési modell | TIER_3 | TIER_1 | TIER_2 | TIER_1 | |||||
Tiled Resources | TIER_1 |
TIER_2 | TIER_1 | TIER_3 | TIER_1 | ||||
Erőforráshalmaz | TIER_2 | TIER_1 | TIER_2 | TIER_1 | |||||
Typed UAV loads | TIER_2 | nincs | TIER_1 | TIER_1 | |||||
Aszinkron DMA | van | nincs | van |
nincs | |||||
Aszinkron shader | van | nincs | van | nincs | |||||
Dupla pontosság | hardverfüggő | hardverfüggő |
inaktív | ||||||
Felezett pontosság | nincs | van | nincs | nincs | van | ||||
Sztereó 3D | van | van | van | ||||||
Shader modell | 5.1 | 5.1 | 5.1 | ||||||
GS bypass | van | nincs | van |
van |
A legtöbb változás a Tiled Resources esetében történt, ahol szigorításokat kapott a TIER_2 szint, így az első generációs GCN nem fért be, illetve a TIER_3-as szint csak a 64x64x64-es méretű 3D-s textúrákat fogadja el. Utóbbi a Microsoft legfurcsább döntése ugyanis az Xbox One és a PlayStation 4 konzolokban található GCN architektúra 64x64x4-es méretű 3D-s textúrákat támogatnak, és a DirectX 12-nek lesz egy mono specifikációja kizárólag az Xbox One-ra, amely ezt kezelni is tudja, de az átfogó támogatást kínáló normál DirectX 12 nem fogadja el. Utóbbi azt is jelenti, hogy ha az adott fejlesztő nem dolgozza át PC-re a konzolon használt formátumra írt rendszert, akkor képtelen lesz a 64x64x4-es méretű 3D-s textúrákra optimalizált effekteket PC-re menteni. Vagy úgy is fogalmazhatunk, hogy a PC-re mindenképpen különálló támogatás kell. Öröm az ürömben, hogy a Vulkan API mindkét opciót támogatni fogja egy-egy opcionális kiterjesztéssel, tehát oda átmenthető a konzolokra írt rendszer, bár a második generációs Maxwellhez ezt akkor is át kell majd írni.
A Microsoft döntése egyébként valahol érthető, mert a hosszabb távú, mondjuk úgy fél évtizedre levetített jövő szempontjából a 64x64x64-es méretű 3D-s textúra jobb, és ezt megéri úgy is bevállalni, hogy bizonyos konzolra írt rendszert majd nem lehet egyszerűen átmenteni PC-re, hagyományos DirectX 12-re.
A Tiled Resources szintjei közötti különbséget az alábbi táblázat részletezi:
Szint | TIER_1 | TIER_2 | TIER_3 |
---|---|---|---|
Shader feedback támogatás | nincs | van | van |
Packed Mips támogatás a textúratömbökhöz | nincs | van | van |
Min/max textúra mintavétel támogatás |
emulált | van | van |
Mintavétel támogatása nem leképzett mozaikokra | nincs | van | van |
Kiterjesztett Texture2D.Sample támogatás |
emulált | van | van |
Volume Tiled Resources | nincs | nincs | van |
Az aszinkron shader vagy aszinkron compute is változott, így amelyik hardver nem képes a compute és a grafikai parancsokat egyszerre fogadni lényegében bukta a képességet. Ezzel kapcsolatban a korábban közölt táblázatok így változtak meg:
Gyártó | AMD | ||||
---|---|---|---|---|---|
Architektúra verzió |
GCN1(S.I.) | GCN2(C.I.) | GCN3(V.I.) | ||
APU-k vagy GPU-k kódneve | Oland, Cape Verde, Pitcairn, Curacao, Tahiti |
Bonaire | Kabini, Temash, Beema, Mullins |
Hawaii, Kaveri |
Tonga, Iceland, Carrizo, Fiji |
Grafikai + compute parancslisták | 1 + 2 | 1 + 16 | 1 + 32 | 1 + 64 |
|
Multiprocesszoronkénti regiszterterület | 256 kB | ||||
Shader processzorra levetített regiszterterület | 4 kB |
||||
Egységnyi operáció sávszélessége | 1,5 bájt/FLOP |
Gyártó | NVIDIA | |||
---|---|---|---|---|
Architektúra verzió |
Maxwell(v2) |
|||
GPU-k kódneve | GM206, GM204, GM200 |
|||
Grafikai + compute parancslisták | 1 + 32 | |||
Multiprocesszoronkénti regiszterterület | 4 x 64 kB |
|||
Shader processzorra levetített regiszterterület | 2 kB |
|||
Egységnyi operáció sávszélessége | 1 bájt/FLOP |
Végül a Typed UAV loads funkció is módosult, így a támogatását bukta minden architektúra az AMD GCN-en és a második generációs Maxwellen kívül.
Bizonyos opcionális funkciók még nincsenek véglegesítve, így a WIndows 10-es WHQL meghajtókból ezek ki is vannak szedve, hiszen még előzetes megfelelőségi teszt sincs rá. Ugyanakkor nagyon nem valószínű, hogy a fennmaradó rövid időben módosulnak, bár nem kizárható. Mindenesetre jelen helyzetben így néz ki a támogatás:
DirectX 12 opcionális funkciók | AMD Radeon | NVIDIA GeForce | Intel HD Graphics | ||
---|---|---|---|---|---|
Architektúra | GCN1(S.I.) GCN2(C.I.) GCN3(V.I.) |
Fermi Kepler(v1) Kepler(v2) Maxwell(v1) |
Maxwell(v2) | Gen7.5 | Gen8 |
Conservative rasterization | nincs | nincs | TIER_1 | nincs | |
Raster Order Views | nincs | nincs | van | van | |
Stencil referencia a pixel shaderben | van | nincs |
nincs | nincs | |
ASTC textúratömörítés |
nincs | nincs |
nincs | nincs |
A D3D_FEATURE_LEVEL szintek esetében a DirectX 12 nagyon bonyolult, mivel ahhoz, hogy egy szintet támogasson a hardver nem kötelező a szinthez kötött opcionális funkciókat támogatni, de ahhoz, hogy ezeket a funkciókat fejlesztő elérje kötelező a hardvernek támogatni a hozzá tartozó szintet. Éppen ezért ebből a szempontból rendkívül bonyolult lett a rendszer, hiszen egy grafikus architektúra úgy is elbukhat opcionális képességeket, hogy azt elvben támogatja, de más meghatározott szinthez kötött kötelező funkciót viszont nem, tehát végeredményben nincs meg a szükséges D3D_FEATURE_LEVEL. Alapvetően így járt az Intelnek mindkét architektúrája, amelyek támogatják a Typed UAV loads funkciót, de ez a D3D_FEATURE_LEVEL_12_0 szinthez van kötve, amit a bekötési modell TIER_1 szintű támogatása mellett nem tudnak elérni, tehát a Typed UAV loads esetében is kiesett a támogatás.
Ebből a szempontból az AMD első generációs GCN architektúrája a D3D_FEATURE_LEVEL_11_1, míg a második és harmadik generációs GCN D3D_FEATURE_LEVEL_12_0, az NVIDIA második generációs Maxwell architektúrája a D3D_FEATURE_LEVEL_12_1, míg az összes többi GeForce architektúra beleértve az első generációs Maxwellt a D3D_FEATURE_LEVEL_11_0 szintet támogatja. Az Intel architektúrái a D3D_FEATURE_LEVEL_11_1 szintre jók.
A bekötési modell szempontjából még meg kell jegyezni, hogy a Microsoft kiemelte ezeket a D3D_FEATURE_LEVEL szintekből szintekből, hogy a fejlesztők szabadabban használhassák az erőforrásokat. A bekötési modellek esetében egyébként a TIER_1 szint egy emuláció lett, vagyis relatíve magas a processzorra rótt többletterhelése. A TIER_2 szint már bindless, vagyis alacsony a többletterhelése, míg a TIER_3 szint explicit bindless, vagyis a bekötés nem jár semmilyen többletterheléssel a processzor oldalán. A bekötési szint szempontjából minden program automatikusan a hardver által támogatott legmagasabb szintet állítja majd be az indításkor, annak érdekében, hogy ahol lehet alacsony legyen a többletterhelés, vagy egyáltalán ne is legyen.