Il consorzio Khronos, che si occupa dello sviluppo di standard grafici,
specifica , che definisce l'API per l'accesso alle capacità grafiche e computazionali della GPU. La nuova specifica ha integrato le correzioni accumulate negli ultimi due anni e . I driver con supporto per la nuova versione di Vulkan sono già le aziende Intel, , ARM, Imagination Technologies e . In Mesa, il supporto per Vulkan 1.2 è offerto per i driver (schede AMD) e (Intel). Il supporto per Vulkan 1.2 è stato inoltre implementato nel debugger , e nel set di esempi .
Principali :
- alla prontezza per l'uso generale l'implementazione del linguaggio di programmazione shader , sviluppato da Microsoft per DirectX. Il supporto per HLSL in Vulkan consente l'uso degli stessi shader HLSL nelle applicazioni basate su Vulkan e DirectX, oltre a semplificare la traslazione da HLSL a SPIR-V. Per la compilazione degli shader è consigliabile utilizzare il compilatore di sistema
, rilasciato da Microsoft nel 2017 e basato sulla tecnologia LLVM. Il supporto per Vulkan è implementato tramite un backend separato, che consente di tradurre HLSL in una rappresentazione intermedia degli shader SPIR-V. L'implementazione copre non solo tutte le funzionalità integrate
HLSL, inclusi i tipi matematici, i flussi di controllo, le funzioni, gli insiemi, i tipi di risorse, gli spazi dei nomi, Shader Model 6.2, le strutture e i metodi, ma consente anche di utilizzare estensioni specifiche per Vulkan, come VKRay di NVIDIA. In modalità HLSL sopra Vulkan è stato possibile organizzare il funzionamento di giochi come Destiny 2, Red Dead Redemption II, Assassin’s Creed Odyssey e Tomb Raider. - È stata aggiornata la specifica , che definisce una rappresentazione intermedia universale per tutte le piattaforme degli shader, che può essere utilizzata sia per la grafica che per i calcoli paralleli.
SPIR-V prevede l'assegnazione di una fase separata per la compilazione degli shader in rappresentazione intermedia, consentendo la creazione di frontend per diversi linguaggi di alto livello. Sulla base di diverse implementazioni ad alto livello, viene generato un unico codice intermedio, che può essere utilizzato da driver OpenGL, Vulkan e OpenCL senza l'uso di un compilatore di shader incorporato.
- Nell'API principale di Vulkan sono incluse 23 estensioni, che hanno consentito di aumentare le prestazioni, migliorare la qualità dell'immagine e semplificare lo sviluppo. Tra le estensioni aggiunte:
- (Timeline semaphore), sincronizzazioni unificate con l'host e le code delle periferiche (permettono di utilizzare un solo primitivo per la sincronizzazione bidirezionale tra il dispositivo e l'host, senza l'uso di primitivi separati VkFence e VkSemaphore). I nuovi semafori sono rappresentati da un valore a 64 bit crescente in modo monotono, che può essere monitorato e aggiornato in più thread.

- Possibilità di utilizzare nei shader tipi numerici a bassa precisione;
- Versione compatibile con HLSL della disposizione della memoria;
- Risorse non collegate (bindless), che rimuovono il limite sul numero di risorse disponibili per gli shader grazie all'uso di uno spazio virtuale condiviso tra la memoria di sistema e quella della GPU;
- , che definisce come i thread eseguiti in parallelo possono accedere ai dati condivisi e alle operazioni di sincronizzazione;
- per il riutilizzo dei descrittori di layout in più shader;
- Riferimenti ai buffer.
Elenco completo delle estensioni aggiunte:
- (Timeline semaphore), sincronizzazioni unificate con l'host e le code delle periferiche (permettono di utilizzare un solo primitivo per la sincronizzazione bidirezionale tra il dispositivo e l'host, senza l'uso di primitivi separati VkFence e VkSemaphore). I nuovi semafori sono rappresentati da un valore a 64 bit crescente in modo monotono, che può essere monitorato e aggiornato in più thread.
- oltre 50 nuove strutture e 13 funzioni;
- Preparati versioni abbreviate della specifica per piattaforme di destinazione tipiche, semplificando il lavoro su piattaforme per le quali attualmente non sono supportate tutte le estensioni, e consentendo di fare a meno dell'attivazione selettiva delle funzionalità di base dell'API Vulkan.
- Continua il lavoro su un progetto di portabilità con altre API grafiche. Ad esempio, in Vulkan sono state proposte estensioni che consentono di trasmettere OpenGL (), OpenCL (, ), OpenGL ES (GLOVE, Angle) e DirectX (, ) attraverso l'API Vulkan, e viceversa, per garantire il funzionamento di Vulkan su piattaforme senza il suo supporto nativo ( e per lavorare sopra OpenGL e DirectX, e gfx-rs per lavorare sopra Metal).
Per migliorare la compatibilità con DirectX e HLSL sono state aggiunte estensioni
VK_KHR_host_query_reset, VK_KHR_uniform_buffer_standard_layout, VK_EXT_scalar_block_layout, VK_KHR_separate_stencil_usage, VK_KHR_separate_depth_stencil_layouts, e inoltre in SPIR-V sono state implementate funzionalità specifiche per HLSL.
Tra i piani futuri si segnala lo sviluppo di estensioni per il machine learning, il ray tracing, la codifica e decodifica video, il supporto per VRS (variable-rate shading) e shader Mesh.
Ricordiamo che l'API Vulkan consiste in una semplificazione radicale dei driver, spostando la generazione dei comandi GPU sul lato dell'applicazione, permettendo l'integrazione di strati di debug, unificando le API per diverse piattaforme e applicando una rappresentazione intermedia di codice precompilato da eseguire sul lato GPU. Per garantire elevate prestazioni e prevedibilità, Vulkan offre alle applicazioni strumenti per il controllo diretto delle operazioni GPU e supporto integrato per l'elaborazione multi-thread dei comandi GPU, riducendo al minimo i costi generati dal driver, mentre le funzionalità implementate a livello di driver diventano notevolmente semplificate e più prevedibili. Ad esempio, operazioni come la gestione della memoria e il trattamento degli errori, implementate in OpenGL a livello di driver, in Vulkan sono spostate a livello di applicazione.
Vulkan copre tutte le piattaforme disponibili e fornisce un'unica API per sistemi desktop, mobili e Web, consentendo di utilizzare una singola API comune per diversi processori grafici e ambiti di applicazione. Grazie all'architettura a più livelli di Vulkan, che implica la creazione di strumenti per lavorare con qualsiasi GPU, i produttori di hardware possono utilizzare strumenti standardizzati per il testing del codice, il debug e il profiling durante lo sviluppo. Per la creazione di shader è offerta una nuova rappresentazione intermedia portatile SPIR-V, basata su LLVM e che utilizza tecnologie di base condivise con OpenCL. Per la gestione di dispositivi e schermi, Vulkan offre un'interfaccia WSI (Window System Integration), che risolve fondamentalmente gli stessi compiti di EGL in OpenGL ES. Il supporto WSI è disponibile out of the box in Wayland: tutte le applicazioni che usano Vulkan possono essere eseguite in ambienti con server Wayland non modificati. La possibilità di operare tramite WSI è garantita anche per Android, X11 (con DRI3), Windows, Tizen, macOS e iOS.
Fonte: opennet.ru


