Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door Wout Funnekotter

Hoofdredacteur

De prestaties van Windows 10

Snelheid, accuduur en DX12

361 reacties

DirectX 12

Het gros van de Windows-games maakt gebruik van Microsofts DirectX-api voor het renderen van graphics. De game 'praat' tegen DirectX en DirectX 'praat' vervolgens tegen de driver van AMD, Nvidia of Intel, afhankelijk van wat voor gpu je hebt. Dat is anders dan bij gameconsoles, waar ontwikkelaars de hardware direct kunnen aanspreken. Een dergelijke aanpak is bij pc's natuurlijk ondenkbaar, omdat dan rekening gehouden moet worden met een ontelbaar aantal combinaties van cpu's, gpu's en geheugenconfiguraties. Een api als DirectX, die ontwikkelaars bepaalde zaken uit handen neemt, is dus broodnodig.

DirectX moet daarvoor wel allerlei zaken bijhouden met betrekking tot de commando's die de game naar de grafische kaart stuurt: state changes van objecten, volgorde van instructie-executie en geheugenallocatie, om een paar voorbeelden te noemen. Daarbij worden opdrachten vaak niet direct verstuurd, maar eerst verzameld en in batches afgevuurd. Dat kost allemaal cpu-tijd en veel cpu-tijd is er niet. Als je een game op 60fps wil draaien, is per frame 16,6ms beschikbaar waarin alles moet gebeuren.

Heb je een moderne game-pc met een rappe cpu, dan is dat geen groot probleem. De cpu is dan snel genoeg om geen knelpunt te vormen. Bij systemen met tragere cpu's kun je echter tegen het probleem aanlopen dat de gpu bij het renderen van een frame eerder klaar is dan de cpu, waardoor de cpu wel een knelpunt vormt.

De oplossing

DirectX 12 moet dat voor een deel oplossen, vergelijkbaar met hoe AMD's Mantle dat eerder al deed. De nieuwe versie van Microsoft graphics-api's geeft programmeurs meer controle over de aansturing van de gpu. Dat betekent dat zij taken die eerst door de api afgehandeld werden nu zelf moeten doen, zoals resource tracking, maar doordat de programmeur zelf meer weet heeft van wat er allemaal gebeurt, kan dat wel efficiënter. Daarnaast wordt aan de validatiekant van de data veel tijdwinst geboekt, omdat de api die checks nu efficiënter aanpakt.

Behalve dat er dus minder cpu-cycles nodig zijn voor communicatie met de driver en videokaart, is het in DirectX 12 ook mogelijk om die opdrachten vanaf verschillende cpu-cores aan te leveren, in plaats van vanaf een enkele, zoals dat bij DirectX 11 nog het geval was.

Het effect

Alle wijzigingen hebben tot gevolg dat er minder load op de cpu komt, waardoor je ook met een tragere cpu kunt gamen zonder dat zich een knelpunt vormt. Op systemen met minder krachtige cpu's moeten games met DirectX12 in verhouding dus sneller draaien. Op papier verandert er helemaal niets voor systemen die wel over genoeg cpu-kracht beschikken; daarbij moet je geen grote prestatiewinst verwachten. Datzelfde zagen we overigens al bij Mantle.

Natuurlijk kunnen gameontwikkelaars ervoor kiezen om die vrijgekomen cpu-cycles aan andere zaken te besteden, zoals geavanceerdere physics-berekeningen.

De praktijk

Wat DirectX 12 in de praktijk voor pc-gaming gaat doen is nog niet te zeggen, want er zijn nog geen games die de api ondersteunen. Overigens hebben veel grote ontwikkelaars al wel aangegeven ermee aan de slag te gaan en de veelgebruikte Unreal Engine heeft bijvoorbeeld al DirectX 12-support.

De enige test die vooralsnog beschikbaar is, is de api-overheadtest van 3DMark. Deze kijkt hoeveel draw calls uitgevoerd kunnen worden onder DirectX 11, Mantle en DirectX12, en geeft daarmee een indruk van de efficiëntieverbeteringen in de nieuwe DirectX-versie.

Elke keer als een game iets wil veranderen aan de scene op het scherm, kost dat één of meerdere draw calls. Denk daarbij aan het renderen van geometrie, het tekenen van een texture of aanbrengen van een shader. Het is daarom zaak om zoveel mogelijk van die calls in een bepaald tijdsbestek te kunnen doen. Dat wordt bij DirectX 12 dus bereikt door de overhead sterk terug te dringen en ervoor te zorgen dat alle cpu-threads commando's kunnen aanleveren.

We hebben deze test zowel op ons desktopsysteem als op de meer bescheiden Surface Pro 3 gedraaid. Op het desktopsysteem hebben we de i7 3960X op verschillende manieren getest: met twaalf threads, met zes threads en met slechts één thread.

Het verschil tussen DirectX 11 en 12 is overduidelijk, en ook Mantle weet de oude DirectX-versie uit het water te blazen, al was dat natuurlijk al bekend. Interessanter is dat DX12 nog minder cpu-gelimiteerd lijkt dan Mantle. Schalen we namelijk terug naar één core zonder hyperthreading, dan weet de nieuwe DirectX-versie nog steeds een behoorlijke score neer te zetten, terwijl Mantle ver terugzakt. De Surface Pro 3 laat zien dat ook de minder krachtige Intel-dualcore-cpu met zwakke igp profijt heeft van DX12.

Helaas zijn er op dit moment geen andere cijfers die we over DX12 kunnen publiceren. Wil je dus weten hoeveel verschil de nieuwe api daadwerkelijk in games zal maken, dan moet je geduld hebben tot het moment waarop die games uitkomen. Vermoedelijk zullen we de eerste games met DirectX 12-support aan het einde van dit jaar zien.


Nintendo Switch Samsung Galaxy S8+ LG W7 Samsung Galaxy S8 Google Pixel 2 Sony Bravia A1 OLED Microsoft Xbox One X Apple iPhone 8

© 1998 - 2017 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True

*