Vilka är skillnaderna och vilken ska du använda?

By rik

År 2015 introducerades DirectX 12 samtidigt med Windows 10, vilket markerade en ny era för både spelare och spelutvecklare. Denna version av Microsofts DirectX, som har potential att reducera belastningen på processorn (CPU) samtidigt som den ökar grafikkortets (GPU) prestanda, etablerade sig snabbt som en viktig faktor inom spelvärlden.

Men är det så enkelt som att bara byta från DirectX 11 till 12 för att uppleva prestandaförbättringar? Låt oss granska skillnaderna mellan dessa två versioner för att skapa klarhet i frågan.

Vad är Microsofts DirectX?

Som vi förklarade i vår genomgång av Microsoft DirectX, är DirectX en samling applikationsprogrammeringsgränssnitt (API:er) som används för att hantera multimediarelaterade uppgifter, inklusive spelutveckling på Microsoft-baserade plattformar som Windows och Xbox. Låt oss först kort förklara vad ett API är.

Ett API möjliggör kommunikation mellan två eller flera program, vilket vi förklarar mer detaljerat i vår artikel om API:er. Det kan liknas vid en telefon: om din mamma skickar ett sms med en inköpslista, tar din telefon emot den informationen och presenterar den för dig. Det är i grunden vad ett API gör.

Vad skiljer DirectX 11 och DirectX 12 åt?

Den mest grundläggande skillnaden är att DirectX 12 är den senaste versionen. En avgörande skillnad ligger i hur de interagerar med datorns hårdvara. Spel utvecklade med DirectX 11 tenderar att bara använda två till fyra CPU-kärnor. Oftast kommunicerar en av dessa kärnor med GPU:n och berättar vad den ska göra.

De övriga kärnorna används sedan för att hantera CPU-intensiva uppgifter som spelets partiklar eller renderingsavstånd. DirectX 12, å andra sidan, fördelar CPU:ns arbetsbörda över flera kärnor och låter varje kärna kommunicera direkt med GPU:n samtidigt.

DirectX 12 introducerar också avancerade funktioner som asynkrona beräkningar och pipeline-tillståndsobjekt (PSO). Asynkron beräkning ökar GPU-användningen genom att tillåta flera uppgifter att köras parallellt, vilket frigör grafikkortets fulla potential.

Förutom att rendera grafik hanterar GPU:n en rad andra uppgifter, som att köra maskininlärningsalgoritmer. Med DirectX 11 kan GPU:n endast utföra en av dessa uppgifter åt gången och i en bestämd ordning. Det leder till prestandaförluster eftersom GPU:ns resurser inte utnyttjas fullt ut.

Tänk dig en servitör på en restaurang. Först tar servitören emot din dryckesbeställning. När dryckerna är serverade frågar servitören om din huvudrätt. Beställningen hanteras i steg. Servitören kommer inte fråga om efterrätt innan huvudrätten är avklarad. Även om detta är funktionellt är det inte optimalt.

I datorsammanhang skulle varje servitörs uppgift hanteras av olika GPU-resurser. Medan du väntar på din dryck kommer GPU-resurserna som behövs för att hantera din huvudrättsförfrågan att vara inaktiva. Tack vare DirectX 12:s asynkrona beräkning kan servitören ta hela din beställning samtidigt, likt en snabbmatsrestaurang. Detta maximerar GPU:ns användning och förbättrar spelprestandan.

DirectX 12 introducerade även pipeline state objects (PSO). När ett spels geometri skickas till GPU:n för rendering, hanteras tolkningen och renderandet av denna data av olika hårdvaruinställningar. Detta utgör grafikpipelinen, ett flöde av datainmatning och -utmatning som sker när GPU:n renderar bilder. Grafikpipelinen i DirectX 11 är dock inte perfekt.

Pipelinen består av en uppsättning olika tillstånd, som rasteriseringstillstånd, blandningstillstånd och djupstencilstillstånd. I DirectX 11 finns beroenden mellan dessa tillstånd, vilket innebär att ett tillstånd inte kan slutföras förrän det föregående tillståndet är definierat. Detta minskar GPU-användningen och ökar CPU-belastningen, vilket leder till sämre prestanda.

För att lösa detta problem introducerade DirectX 12 PSO:er, objekt som beskriver hela grafikpipelinens tillstånd. PSO:er kan jämföras med en flaska som innehåller de olika tillstånd och komponenter som krävs för att skapa en bild. Det gör att GPU:n kan förberäkna alla beroende tillstånd istället för att ständigt omberäkna tillstånd baserat på den aktuella grafikpipelinen.

Detta minskar kraftigt CPU-belastningen i DirectX 11 och förbättrar prestandan. Hur ser skillnaden ut i praktiken? Enligt Microsoft kan DirectX 12 minska CPU-belastningen med upp till 50 procent och öka GPU-prestandan med upp till 20 procent. Men dessa betydande förbättringar innebär inte att alla användare kommer att uppleva samma resultat.

Varför är det inte enkelt att byta från DirectX 11 till DirectX 12?

DirectX 11 släpptes första gången för Windows Vista den 27 oktober 2009. Mellan lanseringen av DirectX 11 och DirectX 12 2015, ligger ett gap på sex år. Under den tiden har tusentals spel utvecklats med DirectX 11. Att byta från DirectX 11 till DirectX 12 är därför inte en enkel process.

DirectX 11 klassas som ett högnivå-API. Det betyder att det är enklare för utvecklare att arbeta med, vilket resulterar i stabila, välpolerade och spelbara spel. DirectX 12, å andra sidan, är ett lågnivå-API och skiljer sig markant från DirectX 11. Det låter utvecklare finjustera optimering på en mer detaljerad nivå, men kräver även gedigen kunskap för att användas effektivt.

Det innebär att ett spel utvecklat i DirectX 12 faktiskt kan ha sämre prestanda beroende på utvecklarens kunskaper om API:et. Även om DirectX 12 har potential till förbättringar, beror det mycket på hur väl utvecklaren lyckas implementera det. Därför väljer många utvecklare att hålla sig till högnivå-API:er som DirectX 11.

DX 11 vs. DX 12: Vilket ska du välja?

Svaret beror på flera faktorer, bland annat vilket spel du vill spela. Exempelvis körs Guild Wars 2 på DirectX 11. Även om ditt operativsystem och hårdvara stöder DirectX 12, finns inte möjligheten att välja det i Guild Wars 2 eftersom spelet inte har stöd för det. Det är helt och hållet spelutvecklarens (ArenaNet) beslut.

Bildkälla: Martin Kerstein/Guild Wars 2

Det tog nio år för ArenaNet att byta från DirectX 9 till DirectX 11. Vissa spel har dock stöd för både DirectX 11 och DirectX 12, som Fortnite (läs vår guide till Fortnite), Battlefield 5 och Shadow of the Tomb Raider. Användare kan växla mellan de två versionerna i spelets inställningar.

Förekomsten av spel som stöder både DirectX 11 och 12 väcker naturligtvis frågan om prestanda. Leder valet av DX 11 eller DX 12 till en märkbar skillnad i spelprestanda? Följande video illustrerar skillnaderna mellan DirectX 11 och DirectX 12 i ett antal spel. Den visar nyckeltal som genomsnittliga bildrutor per sekund, CPU-användning och GPU-användning med en AMD Ryzen 3600, Nvidia GeForce RTX 3060 Ti och 16 GB DDR4 RAM.

Resultaten är på många sätt överraskande. Ibland är den visuella skillnaden liten mellan DX 11 och DX 12, trots flera års skillnad mellan lanseringsdatum. Det är även noterbart att det ofta är skillnader i GPU- och CPU-användning, där DX 12-versionerna av spelen tenderar att kräva mindre resurser än de äldre DX 11-versionerna.

Förutom spelstödet beror valet mellan DirectX 11 och DirectX 12 även på din hårdvara. Nästan alla moderna grafikkort har stöd för DirectX 12, men detsamma gäller inte äldre grafikkort som Radeon HD 4870. Detta grafikkort, som släpptes 2008, har endast stöd för upp till DirectX 10. Det innebär att det inte kan köra de flesta moderna spel som använder DirectX 11 och DirectX 12.

Är DirectX 12 rätt val för dig?

Sammanfattningsvis är bytet från DirectX 11 till DirectX 12 inte så enkelt som det låter. Det beror på en rad faktorer som hårdvara, programvara, operativsystem och om ett spel överhuvudtaget stöder båda versionerna. Alla dessa aspekter måste beaktas innan du fattar ett beslut, vilket sannolikt även kommer att vara fallet för framtida generationer av DirectX.