A Microsoft formálisan véglegesítette a DirectX 12-t

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:

A DirectX 12 végleges bekötési modellje
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:

Tiled Resources szintek eltérései
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:

Az aszinkron compute kezelése az AMD Radeonok esetében
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
Az aszinkron compute kezelése az NVIDIA GeForce-ok esetében
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.

Azóta történt

Előzmények

Hirdetés