Dopo due anni di lavoro, il consorzio Khronos, impegnato nello sviluppo di standard grafici, ha pubblicato la specifica Vulkan 1.3, che definisce l'API per l'accesso alle capacità grafiche e computazionali delle GPU. La nuova specifica integra le correzioni e le estensioni accumulate nel corso dei due anni. Si segnala che i requisiti della specifica Vulkan 1.3 sono progettati per hardware grafico di classe OpenGL ES 3.1, garantendo supporto per il nuovo API grafico su tutte le GPU che supportano Vulkan 1.2. Il toolkit Vulkan SDK è previsto per la pubblicazione a metà febbraio. Oltre alla specifica principale, sono pianificate ulteriori estensioni per dispositivi mobili e desktop di fascia media e alta, il cui supporto sarà fornito nell'ambito della release 'Vulkan Milestone'.
È stato presentato un piano per implementare il supporto della nuova specifica e delle estensioni aggiuntive nelle schede grafiche e nei driver. Prodotti che supportano Vulkan 1.3 sono in fase di sviluppo da parte di Intel, AMD, ARM e NVIDIA. Ad esempio, AMD ha annunciato l'imminente supporto di Vulkan 1.3 nella serie di schede grafiche AMD Radeon RX Vega, oltre che in tutte le schede basate sull'architettura AMD RDNA. NVIDIA si prepara a pubblicare driver con supporto per Vulkan 1.3 per Linux e Windows. ARM aggiungerà supporto per Vulkan 1.3 nelle GPU Mali.
Novità principali:
- È stato implementato il supporto per i passaggi di rendering semplificati (Streamlining Render Passes, VK_KHR_dynamic_rendering), che consentono di avviare il rendering senza la necessità di creare passaggi di rendering e oggetti framebuffer.
- Sono state aggiunte nuove estensioni per semplificare la gestione della compilazione del pipeline grafico (pipeline, un insieme di operazioni che trasforma le primitive grafiche vettoriali e le texture in una rappresentazione pixel).
- VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 — aggiungono stati dinamici aggiuntivi per ridurre il numero di oggetti di stato compilati e allegati.
- VK_EXT_pipeline_creation_cache_control — fornisce strumenti avanzati per gestire quando e come compilare i pipeline.
- VK_EXT_pipeline_creation_feedback — offre informazioni sui pipeline compilati per semplificare il profiling e il debug.
- Diverse funzionalità sono state spostate da opzionali a obbligatorie. Ad esempio, ora sono obbligatori l'implementazione dei riferimenti ai buffer (VK_KHR_buffer_device_address) e il modello di memoria Vulkan, che definisce come i thread eseguiti in parallelo possono accedere ai dati condivisi e alle operazioni di sincronizzazione.
- Sono stati forniti strumenti per un controllo preciso delle sottogruppi (VK_EXT_subgroup_size_control), grazie ai quali i produttori possono supportare dimensioni multiple delle sottogruppi, mentre gli sviluppatori possono scegliere la dimensione richiesta.
- È stata introdotta l'estensione VK_KHR_shader_integer_dot_product, che può essere utilizzata per ottimizzare le prestazioni dei framework di machine learning, grazie all'accelerazione hardware delle operazioni di prodotto scalare.
- In totale, sono stati inclusi 23 nuovi estensioni:
- VK_KHR_copy_commands2
- VK_KHR_dynamic_rendering
- VK_KHR_format_feature_flags2
- VK_KHR_maintenance4
- VK_KHR_shader_integer_dot_product
- VK_KHR_shader_non_semantic_info
- VK_KHR_shader_terminate_invocation
- VK_KHR_synchronization2
- VK_KHR_zero_initialize_workgroup_memory
- VK_EXT_4444_formats
- VK_EXT_extended_dynamic_state
- VK_EXT_extended_dynamic_state2
- VK_EXT_image_robustness
- VK_EXT_inline_uniform_block
- VK_EXT_pipeline_creation_cache_control
- VK_EXT_pipeline_creation_feedback
- VK_EXT_private_data
- VK_EXT_shader_demote_to_helper_invocation
- VK_EXT_subgroup_size_control
- VK_EXT_texel_buffer_alignment
- VK_EXT_texture_compression_astc_hdr
- VK_EXT_tooling_info
- VK_EXT_ycbcr_2plane_444_formats
- Aggiunto un nuovo tipo di oggetti VkPrivateDataSlot. Implementate 37 nuove funzioni e oltre 60 strutture.
- Aggiornata la specifica SPIR-V 1.6, che definisce una rappresentazione intermedia universale per tutte le piattaforme, applicabile sia per la grafica che per i calcoli paralleli. SPIR-V prevede l'allocazione di una fase di compilazione separata per i shader in rappresentazione intermedia, permettendo la creazione di frontend per vari linguaggi di alto livello. Un codice intermedio unificato viene generato separatamente da diverse implementazioni di alto livello, utilizzabile dai driver OpenGL, Vulkan e OpenCL senza un compilatore di shader integrato.
- Proposta una concezione di profili di compatibilità. Google ha preparato per primo un profilo di base (baseline profile) per la piattaforma Android, semplificando la definizione del livello di supporto delle funzionalità avanzate di Vulkan sui dispositivi, che vanno oltre la specifica Vulkan 1.0. Per la maggior parte dei dispositivi, il supporto del profilo potrà essere garantito senza installare aggiornamenti OTA.
Ricordiamo che l'API Vulkan si distingue per la semplificazione radicale dei driver, il trasferimento della generazione dei comandi GPU sul lato dell'applicazione, la possibilità di collegare strati di debug, l'unificazione dell'API per diverse piattaforme e l'uso di una rappresentazione intermedia precompilata del codice per l'esecuzione sulla GPU. Per garantire elevate prestazioni e prevedibilità, Vulkan offre alle applicazioni strumenti per gestire direttamente le operazioni della GPU e supporta nativamente l'elaborazione multithread dei comandi GPU, riducendo al minimo l'overhead introdotto dal driver, mentre le funzionalità gestite dal driver diventano notevolmente semplificate e più prevedibili. Ad esempio, operazioni come la gestione della memoria e la gestione degli errori, implementate in OpenGL sul lato del driver, sono trasferite al livello dell'applicazione in Vulkan.
Vulkan copre tutte le piattaforme disponibili e fornisce un'unica API per sistemi desktop, mobili e Web, consentendo l'utilizzo di un'unica API per diverse GPU e aree di applicazione. La sua architettura multilivello consente ai produttori di hardware di impiegare strumenti di sviluppo comuni per la validazione del codice, il debugging e il profiling. Per la creazione di shader è offerto un nuovo rappresentazione intermedia portabile SPIR-V, basata su LLVM e che utilizza tecnologie di base comuni con OpenCL. Per la gestione di dispositivi e schermi, Vulkan propone l'interfaccia WSI (Window System Integration), che affronta compiti simili a quelli di EGL in OpenGL ES. Il supporto per WSI è nativamente disponibile in Wayland: tutte le applicazioni che utilizzano Vulkan possono essere eseguite in un ambiente non modificato. server Wayland. La possibilità di lavoro attraverso WSI è garantita anche per Android, X11 (con DRI3), Windows, Tizen, macOS e iOS.
Fonte: opennet.ru
