Hva er forskjellene og hvilke bør du bruke?

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, er DirectX en samling av applikasjonsprogrammeringsgrensesnitt (API) 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.

En 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 en tekstmelding til deg 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 er hvordan de samhandler med maskinvaren din. De fleste spill utviklet med DirectX 11 bruker kun mellom to og fire CPU-kjerner. En av disse kjernene forteller vanligvis 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 arbeidsbelastning over flere kjerner og lar hver kjerne snakke med GPUen samtidig.

  Rysnc-veiledning og 11 eksempler for å bruke den effektivt

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, håndterer din GPU en lang rekke 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. Ytelsen får et slag når dette skjer fordi GPU-ressursene dine ikke blir brukt effektivt.

Tenk på det som en kelner på en restaurant. Når en kelner tar imot 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 en annen GPU-ressurs håndtere hver av servitørens oppgaver. Inntil du mottar drikken din, vil GPU-ressursene som trengs for å ta hovedrettbestillingen din 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å pipeline state objects (PSOer). Med DirectX 11, når et spills geometri sendes til GPUen for å bli gjengitt, er ulike maskinvareinnstillinger ansvarlige for å tolke og gjengi disse dataene. Dette kalles grafikkrørledningen og 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.

  Hvordan kansellerer jeg Starz-abonnement på Amazon

For å komme rundt dette introduserte DirectX 12 PSOer, 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 lar GPUen 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 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 DirectX 11 til DirectX 12

DirectX 11 ble først utgitt for Windows Vista 27. oktober 2009. Så, med DirectX 12 som fulgte 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 det alt annet enn enkelt å flytte fra DirectX 11 til DirectX 12.

DirectX 11 er det som kalles en høynivå API. Enkelt sagt 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 et annet beist enn 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. Noen forbedringer kommer 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.

DX 11 vs. DX 12: Hvilken bør du velge?

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 kan bruke 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.

  Hva er stillegående mekaniske tastaturbrytere og fungerer de egentlig?

Bildekreditt: Martin Kerstein/Guild Wars 2

Tro det eller ei, det tok ni år før ArenaNet byttet fra DirectX 9 til DirectX 11. Noen spill støtter imidlertid både DirectX 11 og DirectX 12, inkludert Fortnite (les Fortnite jukseark), Battlefield 5, Shadow of Tomb Raider og mer. Brukere kan bytte mellom DirectX 11 og DirectX 12 i spillinnstillingene.

Nå har det faktum at noen spill støtter både DirectX 11 og 12 sannsynligvis fått deg til å lure på ytelsen i spillet. Gir det å velge DX 11 eller DX 12 bedre ytelse i spillet? Den følgende videoen illustrerer forskjellene mellom DirectX 11 og DirectX 12 i en rekke spill, og viser viktige spesifikasjoner som gjennomsnittlige bilder per sekund, CPU-bruk, GPU-bruk og mer, ved å bruke en AMD Ryzen 3600, Nvidia GeForce RTX 3060 Ti og 16 GB DDR4 RAM.

Resultatene er overraskende på mange måter, med liten visuell forskjell til tider mellom DX 11 og DX 12, til tross for flere år med forskjell mellom lanseringene. Du har kanskje også lagt merke til forskjellene i GPU- og CPU-belastninger mellom begge DirectX-versjonene, med DX 12-versjonene av hvert spill som vanligvis krever færre ressurser enn den eldre DX 11.

I tillegg til støtte i spillet, vil valg mellom DirectX 11 og DirectX 12 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 den ikke er 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.