DirectX 12 ble utgitt sammen med Windows 10 i 2015. Med utgivelsen innledet Microsofts DirectX 12 en ny æra for spillere og spillutviklere. DirectX 12 er i stand til å redusere CPU-overhead samtidig som den øker GPU-ytelsen, og har raskt fått et navn.
Men er det virkelig så enkelt å øke ytelsen som å bytte fra DirectX 11 til DirectX 12? La oss finne ut av det ved å se på forskjellene mellom DirectX 11 og 12.
Hva er Microsofts DirectX?
Som forklart i vår oversikt over Microsoft DirectX, DirectX er en samling av APIer som brukes til å håndtere oppgaver relatert til multimedia. Dette inkluderer spillprogrammering på Microsoft-baserte plattformer som Windows og Xbox. For å gi litt kontekst, la oss kort snakke om APIer.
Et applikasjonsprogrammeringsgrensesnitt (API) gjør det mulig for to eller flere dataprogrammer å kommunisere med hverandre, noe vi diskuterer i
vår oversikt over APIer. Tenk på det som en telefon. Hvis moren din sender deg en tekstmelding med en handleliste, vil telefonen motta disse dataene og vise dem for deg. Det er egentlig et API.Hva er forskjellene mellom DirectX 11 og DirectX 12?
Så, hva er forskjellene mellom DirectX 11 og DirectX 12? Enkelt sagt, DirectX 12 er den nyeste versjonen av DirectX. En av de mest merkbare forskjellene mellom de to er hvordan de samhandler med maskinvaren din. De fleste spill utviklet med DirectX 11 bruker bare mellom to og fire CPU-kjerner. En av disse kjernene er vanligvis dedikert til å fortelle GPUen hva den skal gjøre.
Spillet bruker deretter de gjenværende kjernene til å håndtere ulike CPU-intensive innstillinger som et spills partikler eller tegneavstand. På den annen side sprer DirectX 12 en CPUs arbeidsmengde over flere kjerner og lar også hver kjerne snakke med GPUen samtidig.
DirectX 12 kommer også med noen fancy bjeller og fløyter. Dette inkluderer asynkron databehandling og pipeline state objects (PSOer). Asynkron databehandling øker GPU-utnyttelsen ved å la flere arbeidsbelastninger jobbe parallelt. Dette låser i hovedsak opp GPUens fulle potensial.
Bortsett fra grafikkgjengivelse, er GPUen din ansvarlig for å håndtere et bredt spekter av andre oppgaver, for eksempel å kjøre maskinlæringsalgoritmer. Med DirectX 11 kan GPU-en bare utføre én av disse oppgavene om gangen og i en bestemt rekkefølge. Når dette skjer, får ytelsen et slag fordi alle GPU-ressursene dine ikke blir brukt.
Tenk på det som en kelner på en restaurant. Når en kelner først tar bestillingen din, spør de deg hva du vil drikke først. Når du mottar drinkene dine, spør de deg hva du vil ha til hovedretten. Bestillingen din tas i trinn. Servitøren kommer ikke til å spørre deg hva du vil ha til dessert før du har spist hovedretten. Selv om dette er effektivt, er det ikke så effektivt som det kunne vært.
I databehandling vil hver av servitørens oppgaver bli håndtert av en annen GPU-ressurs. Inntil du mottar drikken din, vil GPU-ressursene som trengs for å ta hovedrettbestillingen være inaktive. Med DirectX 12s asynkrone databehandling, vil servitøren kunne ta bestillingen din på en gang, som i en hurtigmatkjede. Dette maksimerer GPU-bruken og forbedrer spillytelsen din.
DirectX 12 introduserte også PSOer. Med DirectX 11, når et spills geometri sendes til GPU til gjengis, er en rekke maskinvareinnstillinger ansvarlige for å tolke og gjengi dette data. Dette blir referert til som grafikk-pipeline og er flyten av datainnganger og -utganger som oppstår når GPU-en din gjengir rammer. DirectX 11s grafikkpipeline er imidlertid ikke perfekt.
Denne rørledningen inneholder en samling av forskjellige tilstander, inkludert rasteriseringstilstand, blandingstilstand og dybdestensiltilstand, blant andre komponenter. I DirectX 11 er det avhengigheter mellom disse forskjellige tilstandene. Som et resultat kan en tilstand ikke fullføres før den forrige tilstanden er definert. Dette reduserer GPU-utnyttelsen og øker CPU-kostnadene på bekostning av ytelsen.
For å komme rundt dette introduserte DirectX 12 PSOer, som er objekter som beskriver tilstanden til hele grafikkpipelinen. PSO-er er som en flaske som inneholder de ulike tilstandene og komponentene som trengs for å lage et bilde. Dette gjør at GPUen kan forhåndsbehandle hver avhengig tilstand i stedet for å kontinuerlig beregne tilstander på nytt basert på gjeldende grafikkpipeline.
Dette reduserer CPU-overheaden i DirectX 11 betydelig og forbedrer ytelsen. Så hvordan ser egentlig denne forskjellen ut? Vel, ifølge Microsoft reduserer DirectX 12 CPU-overhead med opptil 50 prosent og forbedrer GPU-ytelsen med så mye som 20 prosent. Selv om det er noen betydelige forbedringer, betyr ikke dette at du vil se de samme resultatene.
Hvorfor det ikke er enkelt å bytte fra DirextX 11 til DirectX 12
DirectX 11 ble først utgitt for Windows Vista 27. oktober 2009. Så, med DirectX 12 som følger i 2015, er det et seks års gap mellom DirectX 11 og DirectX 12. I løpet av denne tiden har tusenvis av spill blitt utviklet med DirectX 11. Dessverre er overgangen fra DirectX 11 til DirectX 12 alt annet enn enkelt.
DirectX 11 er det som kalles en høynivå API. For å si det enkelt er API-er på høyt nivå lettere for utviklere å jobbe med. Resultatet er stabile, polerte og spillbare spill. På den annen side er DirectX 12 et lavt nivå API og er et annet beist sammenlignet med DirectX 11. Selv om det lar utviklere finjustere optimalisering på et granulært nivå, krever det også omfattende kunnskap å bruke.
Når det er sagt, kan et spill utviklet i DirectX 12 ende opp med dårligere ytelse avhengig av utviklerens kunnskap om API. Det er forbedringer som følger med DirectX 12, men det kommer virkelig ned på hvor godt en utvikler kan implementere det. Av denne grunn velger mange utviklere å holde seg til APIer på høyt nivå som DirectX 11.
Bør du velge DirectX 11 eller DirectX 12?
Svaret avhenger av noen få ting, som hvilket spill du prøver å kjøre. For eksempel kjører Guild Wars 2 på DirectX 11. Selv om operativsystemet og maskinvaren bruker DirectX 12, vil du ikke ha muligheten til å velge DirectX 11 i Guild Wars 2 fordi spillet ikke støtter det. Dette er helt og holdent avgjørelsen til utvikleren, ArenaNet.
Tro det eller ei, det tok ni år før ArenaNet byttet fra DirectX 9 til DirectX 11. Det er imidlertid noen spill som støtter både DirectX 11 og DirectX 12. Fortnite (les vårt Fortnite-jukseark), for eksempel. Gjennom spillets innstillinger kan brukere bytte mellom begge versjonene. For å oppsummere, ikke alle spill støtter både DirectX 11 og DirectX 12. For de som gjør det, bytt mellom de to og avgjør selv hvilken som fungerer best på PC-en din.
Om du kan velge mellom DirectX 11 og DirectX 12 vil også avhenge av maskinvaren din. Omtrent alle moderne GPUer vil støtte DirectX 12, men det samme kan ikke sies for eldre GPUer som Radeon HD 4870. Denne GPUen ble utgitt i 2008 og støtter kun opptil DirectX 10. Dette betyr at det ikke ville være i stand til å kjøre de fleste moderne spill, som kjører med DirectX 11 og DirectX 12.
Er DirectX 12 det riktige valget for deg?
Alt i alt er det ikke så svart-hvitt å bytte fra DirectX 11 til DirectX 12 som det høres ut. Det avhenger av en rekke faktorer som maskinvare, programvare, operativsystem og om et spill i det hele tatt støtter begge. Alle disse må vurderes før du tar en beslutning, og dette vil sannsynligvis også gjelde for fremtidige generasjoner av DirectX.