DirectX 12 debuterte samtidig med Windows 10 i 2015 og markerte en ny epoke for både spillere og spillutviklere. Denne versjonen av Microsofts DirectX ble raskt anerkjent for sin evne til å redusere CPU-belastningen og samtidig forbedre grafikkprosessorers (GPU) ytelse.
Men er det virkelig så enkelt som å bare bytte fra DirectX 11 til DirectX 12 for å oppnå bedre ytelse? La oss utforske forskjellene mellom disse to versjonene for å finne svaret.
Hva er Microsofts DirectX?
Som beskrevet i vår artikkel om Microsoft DirectX, er dette en samling av applikasjonsprogrammeringsgrensesnitt (API-er) som brukes til å håndtere multimediarelaterte oppgaver. Dette inkluderer spesielt spillprogrammering for Microsoft-plattformer som Windows og Xbox. La oss kort se på hva API-er er.
Et API muliggjør kommunikasjon mellom to eller flere dataprogrammer. Tenk på det som en telefon. Hvis din mor sender deg en SMS med en handleliste, mottar telefonen disse dataene og viser dem for deg. Dette er et eksempel på et API i praksis.
Hva er forskjellene mellom DirectX 11 og DirectX 12?
Kort sagt, DirectX 12 er den nyeste versjonen av DirectX. En av de mest fremtredende forskjellene ligger i hvordan de samhandler med maskinvaren. Spill utviklet med DirectX 11 benytter typisk bare to til fire CPU-kjerner. Vanligvis er det en kjerne som instruerer GPU-en om hva den skal gjøre.
De resterende kjernene brukes til å håndtere ulike CPU-intensive elementer, som partikler i spillet eller synsavstand. DirectX 12, derimot, fordeler arbeidsmengden over flere kjerner, og lar hver kjerne kommunisere med GPU-en samtidig.
DirectX 12 introduserer også nye funksjoner som asynkron databehandling og pipeline state objects (PSO-er). Asynkron databehandling øker GPU-utnyttelsen ved å la flere oppgaver kjøres parallelt. Dette frigjør det fulle potensialet til GPU-en.
GPU-en utfører en rekke oppgaver i tillegg til grafikkrendering, som å kjøre maskinlæringsalgoritmer. Med DirectX 11 kunne GPU-en kun utføre én oppgave av gangen i en bestemt rekkefølge. Dette kan redusere ytelsen fordi GPU-ressursene ikke utnyttes effektivt.
Tenk på en servitør på en restaurant. Først spør de hva du vil drikke. Etter at drikken er servert, spør de om hovedretten. Bestillingen tas i trinn. Servitøren vil ikke spørre om dessert før hovedretten er spist. Dette er effektivt, men ikke optimalt.
Innen databehandling ville separate GPU-ressurser håndtert hver av servitørens oppgaver. Ressursene for hovedrettbestillingen ville vært inaktive til drikken er servert. DirectX 12s asynkrone databehandling lar servitøren ta hele bestillingen samtidig, som i en fastfoodkjede. Dette maksimerer GPU-bruken og forbedrer spillytelsen.
DirectX 12 introduserte også PSO-er. I DirectX 11, når et spills geometri sendes til GPU-en for rendering, er ulike maskinvareinnstillinger ansvarlige for å tolke dataene. Dette kalles grafikkpipeline, og beskriver flyten av inn- og utdata når GPU-en gjengir bilder. DirectX 11s grafikkpipeline har imidlertid noen begrensninger.
Pipelinjen består av ulike tilstander, inkludert rasteriseringstilstand, blandingstilstand og dybdestensiltilstand. I DirectX 11 er det avhengigheter mellom disse tilstandene, og en tilstand kan ikke fullføres før den forrige er definert. Dette reduserer GPU-utnyttelsen og øker CPU-kostnadene, noe som påvirker ytelsen negativt.
DirectX 12 introduserte PSO-er for å løse dette. PSO-er er objekter som beskriver tilstanden til hele grafikkpipelinen, som en flaske som inneholder alle nødvendige tilstander for å skape et bilde. Dette lar GPU-en forhåndsbehandle avhengige tilstander, istedenfor å kontinuerlig beregne tilstander på nytt basert på gjeldende pipeline.
Dette reduserer CPU-belastningen betydelig sammenlignet med DirectX 11, og gir bedre ytelse. Microsoft hevder at DirectX 12 reduserer CPU-belastningen med opptil 50 prosent og forbedrer GPU-ytelsen med opptil 20 prosent. Selv om dette er betydelige forbedringer, vil du ikke nødvendigvis se de samme resultatene.
Hvorfor det ikke er enkelt å bytte fra DirectX 11 til DirectX 12
DirectX 11 ble først lansert for Windows Vista 27. oktober 2009. Det er dermed et gap på seks år mellom lanseringen av DirectX 11 og DirectX 12 i 2015. I løpet av denne tiden ble tusenvis av spill utviklet med DirectX 11. Overgangen fra DirectX 11 til DirectX 12 er derfor langt fra enkel.
DirectX 11 er en API på høyt nivå, som er enklere for utviklere å jobbe med. Dette resulterer i stabile og velfungerende spill. DirectX 12 er derimot en API på lavt nivå, og er betydelig annerledes enn DirectX 11. Selv om det gir utviklere muligheten til å finjustere optimalisering på et detaljert nivå, krever det også omfattende kunnskap om bruk.
Et spill utviklet i DirectX 12 kan derfor gi dårligere ytelse, avhengig av utviklerens kunnskap om API-et. DirectX 12 har flere forbedringer, men resultatet avhenger i stor grad av hvordan utvikleren implementerer det. Derfor velger mange utviklere å holde seg til API-er på høyere nivå, som DirectX 11.
DX 11 vs. DX 12: Hvilken bør du velge?
Valget avhenger av flere faktorer, som hvilket spill du ønsker å kjøre. For eksempel kjører Guild Wars 2 på DirectX 11. Selv om operativsystemet og maskinvaren din støtter DirectX 12, kan du ikke velge det i Guild Wars 2 fordi spillet ikke støtter det. Dette er utviklerens (ArenaNet) valg.
Bildekreditt: Martin Kerstein/Guild Wars 2
Det tok faktisk ni år før ArenaNet gikk fra DirectX 9 til DirectX 11. Noen spill støtter imidlertid både DirectX 11 og DirectX 12, som Fortnite, Battlefield 5, Shadow of Tomb Raider og flere. Brukere kan velge mellom DirectX 11 og DirectX 12 i spillinnstillingene.
Det at noen spill støtter begge versjonene, reiser spørsmål om spillytelse. Gir DX 11 eller DX 12 bedre ytelse? En video som sammenligner DirectX 11 og DirectX 12 i en rekke spill, viser viktige spesifikasjoner som gjennomsnittlige FPS, CPU-bruk og GPU-bruk med en AMD Ryzen 3600, Nvidia GeForce RTX 3060 Ti og 16 GB DDR4 RAM.
Resultatene er overraskende, med liten visuell forskjell mellom DX 11 og DX 12 i enkelte tilfeller, til tross for flere år mellom lanseringene. Det er også forskjeller i GPU- og CPU-belastning mellom de to DirectX-versjonene, der DX 12-versjonene ofte krever færre ressurser enn DX 11.
I tillegg til spillstøtte, avhenger valget også av maskinvaren din. De fleste moderne GPU-er støtter DirectX 12, men dette gjelder ikke eldre GPU-er, som Radeon HD 4870 fra 2008, som kun støtter DirectX 10. Dette betyr at den ikke kan kjøre de fleste moderne spill som krever DirectX 11 eller DirectX 12.
Er DirectX 12 det riktige valget for deg?
Alt i alt er ikke overgangen fra DirectX 11 til DirectX 12 så enkel som det kan virke. Det avhenger av en rekke faktorer, som maskinvare, programvare, operativsystem og om spillet i det hele tatt støtter begge versjoner. Alle disse faktorene må vurderes før en beslutning tas, og dette vil sannsynligvis også gjelde for fremtidige DirectX-generasjoner.