U vraagt, wij bedienen. Bij deze!
Allereerst even een feitje vooraf: een volledig DX12 compliant GPU is nog niet uit. Ook de 980 Ti niet. Waarom? Komt zo
Het is een beetje een rotzooi met die feature levels, maar er is wel wijs uit te raken. Feature levels slaan gewoon op gegroepeerde features; als een video kaart slechts een deel van de features van een feature level ondersteunt, betekent dat dat er bepaalde hardware niet aanwezig is. Het verwarrende zit hem in het feit dat
compatible iets anders is dan
compliant. Nvidia heeft bijvoorbeeld gewoon mogen zeggen dat hun kaarten
DirectX 11.1 compatible zijn. Maar wat als ik je nu eens vertel dat Nvidia feature level 11_1 pas met Maxwell 2 (960 en hoger) ondersteunt? Fermi, Kepler en Maxwell 1 (750 Ti) ondersteunen allemaal een hele hoop dingen uit 11_1 niet; volgens Nvidia omdat ze niet "gaming gerelateerd" zouden zijn, maar dat is marketing praat. Feit is dat ze nooit een 11.1
compliant kaart hebben geproduceerd pre-Maxwell 2.
Die feature levels bestaan niet zo zeer om aan te geven welke features een GPU wel of niet heeft, elke feature heeft toch z'n eigen feature flag in de API. Die levels bestaan om een indicatie te geven waar de hardware toe in staat is (hier kom ik zo op terug). Het kan echter wel zo zijn dat een chip een feature uit een "hoger" level wel gewoon ondersteunt - die feature kan en mag dan ook gebruikt worden! Let ook op dat een feature level niet gebonden is aan een "gelijke" versie; feature levels 11_2 en 12_1 zijn geen van beide gebonden aan 11.2 of 12.1 (die laatste zou natuurlijk vreemd zijn). Beide zijn gebonden aan 12.0 - in D3D11 bestaat feature level 11_2 dus niet!
Wat wil het dan zeggen als een feature level wel of niet ondersteund wordt? Daar is met D3D12 het eenvoudigst antwoord op te geven, omdat daar een heel duidelijke scheiding aanwezig is. In D3D12 heb je te maken met de volgende feature levels: 11_0, 11_1, 11_2, 12_0 en 12_1. Om DirectX 12
compatible te zijn hoef je alleen 11_0 te ondersteunen. DirectX 12 bevat namelijk geen nieuwe hardware vereisten t/m level 12_0. Het verschil met DirectX 11 zit hem in het feit dat in 12 bepaalde features ineens
samen vereist worden, waardoor de levels er net even iets anders uit zien. 11_0 in DX12 is iets anders dan 11_0 in DX11. Het meeste bestond ook allemaal al, alleen level 12_1 vereist wat nieuwe hardware. Daar is zelfs GCN 1.2 helaas te oud voor.
Ben je al in de war?
Het gaat nu pas echt leuk worden. AMD's VLIW5/VLIW4 chips missen helaas een feature die in DX12 vereist is onder 11_0 (heeft te maken met geheugen addressering). Daarom staan die niet in de lijst, terwijl Evergreen wel de eerste DirectX 11 chips waren (en dus 11_0
compliant zijn...onder DX11). Na de 6000 serie wordt het even iets lastiger, omdat we nu naar GCN versies moeten kijken in plaats van videokaart generaties. GCN 1.0 voldoet aan 11_0, 11_1 en 11_2 - dit zijn alle 7000-serie kaarten met uitzondering van Bonaire (7790), die GCN 1.1 bevat. Je voelt hem al, GCN 1.1 en GCN 1.2 (260, 285, 290) voldoen allemaal aan alle levels behalve 12_1. Fermi, Kepler en Maxwell 1 voldoen alleen aan 11_0 en zitten dus in de allerlaagste groep van DX12. Maxwell 2 voldoet aan 11_0, 11_1, 12_0 en 12_1, maar mist 11_2.
Wat betekent dit nu allemaal? Neem er even deze tabellen bij:
Wikipedia: Direct3D
Allereerst zullen alle kaarten die aan DX12's level 11_0 voldoen inderdaad gewoon werken. Je krijgt met al deze chips gewoon de belangrijkste voordelen van DX12. Het grote verschil zit in de mate waarin men straks
meer kan doen dan voorheen.
Laten we beginnen met Fermi, Kepler en Maxwell 1 - waarschuwing, het wordt een klein beetje technischer. Die voldoen alleen aan 11_0 en zitten in de laagste groep van "resource limits". Die "limits" slaan op wat een chip aan kan (met name qua geheugen addressering). Het makkelijkste voorbeeld zijn UAVs. Een UAV is een buffer (stukje geheugen) waar je vanuit meerdere threads uit mag lezen of naar mag schrijven zonder daarbij fouten te veroorzaken. Wel eens een "access violation" gezien? Dat is min of weer wat er gebeurt als je vanuit de ene thread het geheugen van een ander aanspreekt. Mag eigenlijk niet
In tier 1 mag je maar 8 van die dingen aanmaken en dan is het uit met de pret. In tier 2 zijn dat er al 64 en in tier 3 mag je doen wat je wil. Dus stel dat jij een RTS maakt waarbij je voor elke unit een UAV wil hebben die je vanuit 2 threads aan spreekt. Op tier 1 hardware (Fermi-Maxwell 1) kun je dan dus 16 threads aan het werk houden met die dingen. Op tier 2 (Maxwell 2) zijn dat er al 128. En op tier 3 (GCN, alle versies)? Zo veel je er maar kwijt kunt.
Gaat dit in de praktijk grote impact hebben? Soms wel, maar in het algemeen niet. GCN zal iets meer kunnen hebben en we hebben in de vroege benchmarks ook al gezien dat AMD inderdaad beter draait in die extreme situaties die ze bouwen voor die benchmarks. Dat zijn echter ook echt extreme voorbeelden. Tussen Maxwell 2 en GCN zal maar weinig verschil zitten. Fermi, Kepler en Maxwell 1 zullen in verhouding wel minder profijt van DX12 hebben. Er zal nog steeds veel meer mogelijk zijn dan onder DX11, maar de mate waarin is minder dan bijvoorbeeld met Tahiti.
En hoe zit het dan met feature level 12_1? Daar zitten twee features in die alleen Maxwell 2 momenteel heeft. Conservative Rasterization en Rasterizer Ordered Views. CR is niet zo boeiend voor games, dat is een vrij zware techniek waar games geen gebruik van zullen maken; dat is vooral bedoeld voor precisie werkt. ROVs wel, die zorgen er voor dat die UAVs hierboven weer een stukje efficiënter afgehandeld kunnen worden. Betekent dit dat GCN dan ineens veel achter gaat lopen? Nee. Juist GCN niet, omdat AMD hier al op voorbereid was. Ik heb het al eerder gezegd, maar veel van dit spul komt gewoon van hen vandaan, dus het is niet verwonderlijk dat zij ook het meest flexibel zijn.
Ik hoop dat je de weg niet bent kwijt geraakt tijdens mijn lange muur
TL;DR:
- Fermi t/m Maxwell 1 (750 Ti) voldoen maar nét aan DX12
- GCN voldoet aan álles t/m 12_0 - alleen de meest recente features in 12_1 niet, omdat GCN daar te "oud" voor is.
- Maxwell 2 (900 serie) voldoet wel aan 12_1, maar mist 11_2 waardoor ze technisch gezien beperkt zijn met enkele features
- Maxwell 2 en GCN zullen vrijwel even veel voordeel hebben, ondanks dat geen van beide "compleet" is
- Een GPU die aan 11_0, 11_1, 11_2, 12_0 en 12_1 voldoet en dus volledig DirectX 12 compliant is, bestaat niet
