DirectX 11 vs. DirectX 12: quali sono le differenze e quale dovresti usare?
DirectX 12 è stato rilasciato insieme a Windows 10 nel 2015. Con il suo rilascio, DirectX 12 di Microsoft ha inaugurato una nuova era per giocatori e sviluppatori di giochi. Capace di ridurre l’overhead della CPU aumentando al contempo le prestazioni della GPU, DirectX 12 si è fatto rapidamente un nome.
Tuttavia, aumentare le prestazioni è davvero semplice come passare da DirectX 11 a DirectX 12? Scopriamolo guardando le differenze tra DirectX 11 e 12.
Cos’è DirectX di Microsoft?
Come spiegato nella nostra panoramica di Microsoft DirectX, DirectX è una raccolta di API utilizzate per gestire le attività relative ai contenuti multimediali. Ciò include la programmazione di giochi su piattaforme basate su Microsoft come Windows e Xbox. Per fornire un contesto, parliamo brevemente delle API.
Un’interfaccia di programmazione dell’applicazione (API) consente a due o più programmi di computer di comunicare tra loro, cosa che discutiamo nella nostra panoramica delle API. Pensalo come un telefono. Se tua madre ti invia un messaggio con una lista della spesa, il tuo telefono riceverà quei dati e li visualizzerà per te. Questa è fondamentalmente un’API.
Quali sono le differenze tra DirectX 11 e DirectX 12?
Quindi, quali sono le differenze tra DirectX 11 e DirectX 12? In parole povere, DirectX 12 è l’ultima versione di DirectX. Una delle differenze più evidenti tra i due è il modo in cui interagiscono con il tuo hardware. La maggior parte dei giochi sviluppati con DirectX 11 utilizza solo da due a quattro core della CPU. Uno di questi core è solitamente dedicato a dire alla GPU cosa fare.
Il gioco utilizza quindi i core rimanenti per gestire varie impostazioni ad alta intensità di CPU come le particelle di un gioco o la distanza di disegno. D’altra parte, DirectX 12 distribuisce il carico di lavoro di una CPU su più core e consente inoltre a ogni core di comunicare con la GPU contemporaneamente.
DirectX 12 viene fornito anche con alcune fantasiose campane e fischietti. Ciò include il calcolo asincrono e gli oggetti di stato della pipeline (PSO). Il calcolo asincrono aumenta l’utilizzo della GPU consentendo a più carichi di lavoro di funzionare in parallelo. Questo essenzialmente sblocca il pieno potenziale della tua GPU.
Oltre al rendering grafico, la tua GPU è responsabile della gestione di un’ampia gamma di altre attività, come l’esecuzione di algoritmi di apprendimento automatico. Con DirectX 11, la GPU può eseguire solo una di queste attività alla volta e in un certo ordine. Quando ciò si verifica, le prestazioni subiscono un calo perché tutte le risorse della GPU non vengono utilizzate.
Pensalo come un cameriere in un ristorante. Quando un cameriere prende per la prima volta il tuo ordine, ti chiede cosa vorresti bere prima. Una volta ricevuti i tuoi drink, ti chiedono cosa vorresti per il corso principale. Il tuo ordine viene preso in passaggi. Il cameriere non ti chiederà cosa vorresti per dessert prima che tu abbia mangiato il piatto principale. Sebbene sia efficace, non è così efficiente come potrebbe essere.
In informatica, ciascuna delle attività del cameriere verrebbe gestita da una diversa risorsa GPU. Fino a quando non riceverai il tuo drink, le risorse della GPU necessarie per prendere l’ordine del tuo piatto principale rimarranno inattive. Con il calcolo asincrono di DirectX 12, il cameriere sarebbe in grado di prendere il tuo ordine tutto in una volta come in una catena di fast food. Ciò massimizza l’utilizzo della GPU e migliora le prestazioni di gioco.
DirectX 12 ha anche introdotto gli OSP. Con DirectX 11, quando la geometria di un gioco viene inviata alla GPU per il rendering, una varietà di impostazioni hardware è responsabile dell’interpretazione e del rendering di questi dati. Questa è definita pipeline grafica ed è il flusso di input e output di dati che si verificano quando la GPU esegue il rendering dei frame. Tuttavia, la pipeline grafica di DirectX 11 non è perfetta.
Questa pipeline contiene una raccolta di stati diversi, tra cui lo stato di rasterizzazione, lo stato di fusione e lo stato di stencil di profondità, tra gli altri componenti. In DirectX 11 esistono dipendenze tra questi diversi stati. Di conseguenza, uno stato non può essere completato finché non viene definito lo stato precedente. Ciò riduce l’utilizzo della GPU e aumenta il sovraccarico della CPU a scapito delle prestazioni.
Per aggirare questo problema, DirectX 12 ha introdotto i PSO, che sono oggetti che descrivono lo stato dell’intera pipeline grafica. I PSO sono come una bottiglia che contiene i vari stati e componenti necessari per creare un’immagine. Ciò consente alla GPU di pre-elaborare ogni stato dipendente invece di dover ricalcolare continuamente gli stati in base alla pipeline grafica corrente.
Ciò riduce significativamente il sovraccarico della CPU riscontrato in DirectX 11 e migliora le prestazioni. Quindi, che aspetto ha effettivamente questa differenza? Bene, secondo Microsoft, DirectX 12 riduce il sovraccarico della CPU fino al 50% e migliora le prestazioni della GPU fino al 20%. Sebbene si tratti di miglioramenti sostanziali, ciò non significa che vedrai gli stessi risultati.
Perché passare da DirextX 11 a DirectX 12 non è semplice
DirectX 11 è stato rilasciato per la prima volta per Windows Vista il 27 ottobre 2009. Quindi, con DirectX 12 successivo nel 2015, si tratta di un intervallo di sei anni tra DirectX 11 e DirectX 12. Durante questo periodo, migliaia di giochi sono stati sviluppati utilizzando DirectX 11. Sfortunatamente, passare da DirectX 11 a DirectX 12 è tutt’altro che facile.
DirectX 11 è ciò che viene chiamato un’API di alto livello. Per dirla semplicemente, le API di alto livello sono più facili da utilizzare per gli sviluppatori. Il risultato sono giochi stabili, rifiniti e giocabili. D’altra parte, DirectX 12 è un’API di basso livello ed è una bestia diversa rispetto a DirectX 11. Sebbene consenta agli sviluppatori di ottimizzare l’ottimizzazione a livello granulare, richiede anche una vasta conoscenza da utilizzare.
Detto questo, un gioco sviluppato in DirectX 12 potrebbe finire con prestazioni peggiori a seconda della conoscenza dell’API da parte dello sviluppatore. Ci sono miglioramenti che derivano da DirectX 12, ma in realtà dipende da quanto bene uno sviluppatore può implementarlo. Per questo motivo, molti sviluppatori scelgono di attenersi ad API di alto livello come DirectX 11.
Dovresti scegliere DirectX 11 o DirectX 12?
La risposta dipende da alcune cose, come il gioco che stai cercando di eseguire. Ad esempio, Guild Wars 2 funziona su DirectX 11. Anche se il tuo sistema operativo e l’hardware utilizzano DirectX 12, non avrai la possibilità di selezionare DirectX 11 in Guild Wars 2 perché il gioco non lo supporta. Questa è interamente la decisione dello sviluppatore, ArenaNet.
Che tu ci creda o no, ArenaNet ha impiegato nove anni per passare da DirectX 9 a DirectX 11. Tuttavia, ci sono alcuni giochi che supportano sia DirectX 11 che DirectX 12. Fortnite (leggi il nostro cheat sheet di Fortnite), per esempio. Attraverso le impostazioni del gioco, gli utenti possono passare da una versione all’altra. Per riassumere, non tutti i giochi supportano sia DirectX 11 che DirectX 12. Per quelli che lo fanno, passa da uno all’altro e determina tu stesso quale funziona meglio sul tuo PC.
La possibilità di scegliere tra DirectX 11 e DirectX 12 dipenderà anche dal tuo hardware. Praticamente qualsiasi GPU moderna supporterà DirectX 12, ma lo stesso non si può dire per le GPU più vecchie come la Radeon HD 4870. Rilasciata nel 2008, questa GPU supporta solo fino a DirectX 10. Ciò significa che non sarebbe in grado di eseguire la maggior parte giochi moderni, che funzionano con DirectX 11 e DirectX 12.
DirectX 12 è la scelta giusta per te?
Tutto sommato, passare da DirectX 11 a DirectX 12 non è così bianco e nero come sembra. Dipende da una varietà di fattori come hardware, software, sistema operativo e se un gioco supporta entrambi. Tutti questi devono essere considerati prima di prendere una decisione, e questo sarà probabilmente vero anche per le future generazioni di DirectX.
Lascia un commento