API grafiche di alto e basso livello: differenze e come funzionano

Le API grafiche non sono un pezzo di hardware, ma un pezzo di software, ma è essenziale per il rendering della grafica che si presenta sul nostro schermo e senza di essa la comunicazione tra le applicazioni e il GPU non sarebbe possibile. In questo articolo spieghiamo in modo accessibile cosa sono le API grafiche e rompiamo alcuni miti ad esse correlati.

È necessario tenere presente che le GPU non eseguono programmi, ma eseguono un elenco di istruzioni. Ma da dove viene questo elenco e come arriva alla GPU?

API grafiche di alto e basso livello: differenze

Cos'è un'API grafica?

Macchina OpenGL

Le API grafiche sono ciò che consente alle applicazioni di comunicare con la GPU per contrassegnare come deve disegnare il fotogramma successivo o parte di esso. Il concetto si basa sull'astrazione che è la creazione in un linguaggio di programmazione di cosa sia una GPU, per comprendere il concetto di astrazione supponiamo che al posto di una GPU abbiamo una macchina per bibite collegata.

L'API della macchina del rinfresco sarebbe una libreria con le seguenti funzioni: lancia moneta, restituisci il resto, seleziona il rinfresco e consegna il rinfresco, in modo tale che il programma possa interagire, questa parte dell'API è chiamata dal Front-End, e quello che facciamo con esso è l'elenco delle istruzioni, beh in una GPU questo elenco si chiama DisplayList o screen list.

Buffer suoneria DisplayList

Detto elenco di schermate viene letto da un software che non è altro che il driver della scheda grafica, questo trasforma l'elenco in un microcodice che la GPU può capire e lo copia su una parte del RAM memoria a cui la GPU accede sempre. Per leggere l'elenco delle schermate, copia l'elenco nella memoria interna dei processori dei comandi e avvia il rendering della scena o di quella parte di essa con le istruzioni dall'elenco delle schermate.

Questo processo viene eseguito continuamente in ogni frame che la GPU esegue il rendering e invia allo schermo, indipendentemente dal fatto che si utilizzi un PC da gioco, uno smartphone o una console per videogiochi.

Quali sono le API grafiche oggi?

API gráficas

Le API grafiche più utilizzate oggi sono le seguenti:

  • Vulcano: Sostituisce OpenGL, viene utilizzato in tutti i tipi di sistemi operativi, che si dice sia indipendente dalla piattaforma, ma è l'API principale di Google.
  • Metallo: API grafica di Apple, utilizzata in macOS e ottimizzata appositamente per la sua architettura GPU.
  • DirectX: L'API di Microsoft per Windows e Xbox, era divisa in più versioni a seconda della piattaforma, ma recentemente l'hanno unificata in un'unica versione.
  • GNM/GNMX/GNM++: L'API grafica per le console SONY PlayStation 4 e PlayStation 5, GNMX è un'API di alto livello, GNM è l'API della versione di basso livello su PS4 e GNM ++ su PS5.
  • NVN: L'API grafica di Nintendo Switch, utilizzata esclusivamente in questa serie di console.
  • OpenGL: L'API che ha dato il via a tutto, originariamente nota come IrisGL e progettata per le workstation Silicon Graphics, si è evoluta fino a diventare l'API per PC, console e successivamente smartphone. Raggiungo la versione 4 essendo Vulkan un rebranding di OpenGL 5.

Computer vs grafica

DX11 contro DX12

Le GPU sono processori altamente complessi che da tempo hanno smesso di essere semplici giocattoli per il rendering di videogiochi, oggi vengono utilizzati in campi come l'intelligenza artificiale o il calcolo ad alte prestazioni, che ha portato all'evoluzione delle API grafiche e vanno oltre la grafica.

Attualmente le applicazioni non inviano un unico elenco ma più elenchi, uno dei quali è la grafica e il resto dell'informatica, dove la GPU viene utilizzata per risolvere problemi specifici che non hanno nulla a che fare con il rendering della grafica, quest'ultima funziona in modo completamente asincrono e quindi non dipende dall'elenco delle schermate.

Ad esempio, può darsi che un'applicazione di progettazione grafica utilizzi la potenza della GPU per risolvere un effetto speciale su una fotografia, solo perché la GPU è più attrezzata per risolvere quel problema rispetto a un CPU. Grazie alle liste di calcolo puoi farlo utilizzando le risorse gratuite della GPU per risolvere quei piccoli problemi

API grafiche di alto livello e di basso livello: in cosa differiscono?

API Gráficas Alto Bajo

Quando parliamo di un'API di basso livello ci riferiamo ad un'API che gira vicino alla GPU, che è in fondo allo stack mentre il driver è in alto, un'API di alto livello è quindi quella che richiede un driver che generi il display elenco. Poiché alcune attività del driver non vengono eseguite nell'API di alto livello, ciò che si ottiene teoricamente è che il tempo durante l'esecuzione dell'elenco delle schermate da parte della CPU è più breve, questo significa finire il frame in meno millisecondi o dare più tempo per migliorare la grafica di quella stessa cornice.

In realtà, è falso che le API di basso livello non abbiano un driver in quanto può essere letto e ascoltato in alcuni punti, ma questo è molto più semplice e appesantisce il lavoro quando si eseguono determinate attività essenziali per l'applicazione, questo consentirà agli sviluppatori di ottimizzare il tempo di ogni frame il più possibile controllando il processo di creazione dell'elenco delle schermate.

Tuttavia, molte volte per gli sviluppatori può essere molto più comodo utilizzare un'API di alto livello, a causa del fatto che il tempo di sviluppo aggiuntivo non vale economicamente o semplicemente perché il vantaggio che si può ottenere adattando il gioco a un'API il livello basso è impercettibile.

Il mito della console e del PC

C'è un mito secondo cui poiché una console ha un hardware unico, significa che le API sono molto più ottimizzate rispetto al PC dove ci sono molte configurazioni diverse, ma è proprio il driver che abbiamo installato che genera l'elenco delle schermate. La differenza è che nelle console questo driver è statico e non riceve aggiornamenti sulle prestazioni o modifiche durante l'intera vita commerciale della console.