După doi ani de muncă, consorțiul de standarde grafice Khronos a publicat specificația Vulkan 1.3, care definește un API pentru accesarea capacităților grafice și de calcul ale GPU-urilor. Noua specificație încorporează corecții și extinderi acumulate pe parcursul a doi ani. Se observă că cerințele specificației Vulkan 1.3 sunt concepute pentru echipamentele grafice din clasa OpenGL ES 3.1, ceea ce va asigura suport pentru noul API grafic în toate GPU-urile care acceptă Vulkan 1.2. Instrumentele Vulkan SDK sunt planificate să fie publicate la mijlocul lunii februarie. Pe lângă specificația principală, este planificat să ofere extensii suplimentare pentru dispozitivele mobile și desktop de gamă medie și înaltă, care vor fi acceptate ca parte a ediției „Vulkan Milestone”.
În același timp, a fost prezentat un plan pentru implementarea suportului pentru noua specificație și extensii suplimentare în plăcile grafice și driverele de dispozitiv. Produsele care acceptă Vulkan 1.3 sunt pregătite de Intel, AMD, ARM și NVIDIA. De exemplu, AMD a anunțat că va oferi în curând suport pentru Vulkan 1.3 în seria de plăci grafice AMD Radeon RX Vega, precum și pentru toate plăcile bazate pe arhitectura AMD RDNA. NVIDIA se pregătește să publice drivere care acceptă Vulkan 1.3 pentru Linux и WindowsARM va adăuga suport Vulkan 1.3 pentru plăcile grafice Mali.
Principalele inovații:
- A fost implementat suportul pentru treceri de randare simplificate (Streamlining Render Passes, VK_KHR_dynamic_rendering), permițându-vă să începeți randarea fără a crea treceri de randare și obiecte framebuffer.
- Au fost adăugate noi extensii pentru a simplifica gestionarea compilației conductelor de grafică (pipeline, un set de operații care transformă primitivele și texturile graficelor vectoriale în reprezentări de pixeli).
- VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 - adăugați stări dinamice suplimentare pentru a reduce numărul de obiecte de stare compilate și atașate.
- VK_EXT_pipeline_creation_cache_control - Oferă controale avansate asupra când și cum sunt compilate conductele.
- VK_EXT_pipeline_creation_feedback - Oferă informații despre conductele compilate pentru a ușura profilarea și depanarea.
- O serie de caracteristici au fost transferate de la opțional la obligatoriu. De exemplu, implementarea referințelor de buffer (VK_KHR_buffer_device_address) și modelul de memorie Vulkan, care definește modul în care firele concurente pot accesa datele partajate și operațiunile de sincronizare, sunt acum obligatorii.
- Controlul subgrupurilor cu granulație fină (VK_EXT_subgroup_size_control) este furnizat astfel încât furnizorii să poată oferi suport pentru mai multe dimensiuni de subgrup și dezvoltatorii pot selecta dimensiunea de care au nevoie.
- A fost furnizată extensia VK_KHR_shader_integer_dot_product, care poate fi utilizată pentru a optimiza performanța cadrelor de învățare automată datorită accelerării hardware a operațiunilor cu produse punct.
- Sunt incluse un total de 23 de noi extinderi:
- VK_KHR_copiere_comenzi2
- 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_sincronizare2
- VK_KHR_zero_initialize_workgroup_memory
- VK_EXT_4444_formats
- VK_EXT_stare_dinamică_extinsă
- VK_EXT_extended_dynamic_state2
- VK_EXT_robustețea_imaginei
- VK_EXT_inline_uniform_block
- VK_EXT_pipeline_creation_cache_control
- VK_EXT_pipeline_creation_feedback
- VK_EXT_data_private
- VK_EXT_shader_demote_to_helper_invocation
- Controlul mărimii_subgrupului_VK_EXT
- VK_EXT_texel_buffer_alignment
- VK_EXT_texture_compression_astc_hdr
- VK_EXT_tooling_info
- VK_EXT_ycbcr_2plane_444_formats
- S-a adăugat un nou tip de obiect VkPrivateDataSlot. Au fost implementate 37 de comenzi noi și peste 60 de structuri.
- Specificația SPIR-V 1.6 a fost actualizată pentru a defini o reprezentare intermediară de umbrire care este universală pentru toate platformele și poate fi utilizată atât pentru grafică, cât și pentru calcul paralel. SPIR-V implică separarea unei faze separate de compilare a shader-ului într-o reprezentare intermediară, care vă permite să creați front-end-uri pentru diferite limbaje de nivel înalt. Pe baza diferitelor implementări la nivel înalt, un singur cod intermediar este generat separat, care poate fi utilizat de driverele OpenGL, Vulkan și OpenCL fără a utiliza compilatorul de shader încorporat.
- A fost propus conceptul de profiluri de compatibilitate. Google a fost prima companie care a pregătit un profil de bază pentru platformă. Android, ceea ce va simplifica determinarea nivelului de suport al dispozitivului pentru funcțiile avansate Vulkan dincolo de specificația Vulkan 1.0. Pentru majoritatea dispozitivelor, suportul pentru profiluri va fi obținut fără actualizări OTA.
Să reamintim că API-ul Vulkan se remarcă prin simplificarea radicală a driverelor, transferul generației de comenzi GPU către aplicație, capacitatea de a conecta straturi de depanare, unificarea API-ului pentru diverse platforme și utilizarea unui program precompilat. reprezentare intermediară a codului pentru execuție pe partea GPU. Pentru a asigura performanță și predictibilitate înaltă, Vulkan oferă aplicațiilor control direct asupra operațiunilor GPU și suport nativ pentru procesarea comenzilor GPU cu mai multe fire, ceea ce minimizează supraîncărcarea driverului și face capabilitățile la nivel de șofer mult mai simple și mai previzibile. De exemplu, operațiuni precum gestionarea memoriei și gestionarea erorilor, implementate în OpenGL pe partea șoferului, sunt mutate la nivelul aplicației în Vulkan.
Vulkan acoperă toate platformele disponibile și oferă o singură API pentru desktop, mobil și web, permițând o singură API comună pentru diverse GPU-uri și domenii de aplicații. Arhitectura multi-strat a Vulkan, care permite crearea de instrumente care funcționează cu orice GPU, permite producătorilor de hardware să utilizeze instrumente comune pentru revizuirea codului, depanare și profilare în timpul dezvoltării. Pentru crearea de shadere, este oferită o nouă reprezentare intermediară portabilă (IR) numită SPIR-V, bazată pe LLVM și care partajează tehnologii de bază cu OpenCL. Pentru gestionarea dispozitivelor și a afișajelor, Vulkan oferă interfața Window System Integration (WSI), care îndeplinește sarcini similare cu EGL în OpenGL ES. Suportul WSI este disponibil din cutie în Wayland - toate aplicațiile bazate pe Vulkan pot rula într-un mediu nemodificat. servere Wayland. De asemenea, este prevăzută posibilitatea de a lucra prin WSI Android, X11 (cu DRI3), Windows, Tizen, macOS și iOS.
Sursa: opennet.ru
