Po dvou letech práce konsorcium Khronos, které se zabývá vývojem grafických standardů, zveřejnilo specifikaci Vulkan 1.3, která definuje API pro přístup k grafickým a výpočetním schopnostem GPU. Nová specifikace zahrnuje opravy a rozšíření, které se nahromadily za poslední dva roky. Uvádí se, že požadavky specifikace Vulkan 1.3 jsou navrženy pro grafické zařízení třídy OpenGL ES 3.1, což umožní podporu nového grafického API na všech GPU, které podporují Vulkan 1.2. Nástroje Vulkan SDK by měly být zveřejněny v polovině února. Kromě hlavní specifikace se plánuje nabídnout další rozšíření pro mobilní a stolní zařízení střední a vyšší třídy, jejichž podpora bude realizována v rámci edice „Vulkan Milestone“.
Současně byl představen plán realizace podpory nové specifikace a dalších rozšíření v grafických kartách a ovladačích zařízení. Produkty s podporou Vulkan 1.3 připravují k vydání společnosti Intel, AMD, ARM a NVIDIA. Například společnost AMD oznámila brzkou podporu Vulkan 1.3 v řadě grafických karet AMD Radeon RX Vega a také ve všech kartách postavených na architektuře AMD RDNA. Společnost NVIDIA se chystá publikovat ovladače s podporou Vulkan 1.3 pro Linux a Windows. Společnost ARM přidá podporu Vulkan 1.3 do GPU Mali.
Hlavní novinky:
- Byla implementována podpora zjednodušených průchodů vykreslování (Streamlining Render Passes, VK_KHR_dynamic_rendering), které umožňují začít vykreslování bez vytváření průchodů vykreslování a objektů framebufferu.
- Byla přidána nová rozšíření pro zjednodušení správy kompilace grafického konveje (pipeline, soubor operací, který přetváří vektorové grafické primitivy a textury na pixelové zobrazení).
- VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 — přidávají další dynamické stavy pro snížení počtu kompilovaných a připojených objektů stavu.
- VK_EXT_pipeline_creation_cache_control — poskytuje rozšířené nástroje pro správu toho, kdy a jak kompilovat konveje.
- VK_EXT_pipeline_creation_feedback — poskytuje informace o zkompilovaných konvejích pro zjednodušení profilování a ladění.
- Některé funkce byly převedeny z volitelných na povinné. Například povinnou se nyní stala implementace vyrovnávacích odkazů (VK_KHR_buffer_device_address) a model paměti Vulkan, který určuje, jak mohou paralelně běžící vlákna přistupovat ke sdíleným datům a synchronizačním operacím.
- Byly poskytnuty prostředky pro přesné řízení podskupin (VK_EXT_subgroup_size_control), díky kterým mohou výrobci poskytovat podporu pro různé velikosti podskupin a vývojáři si mohou vybrat požadovanou velikost.
- Bylo poskytnuto rozšíření VK_KHR_shader_integer_dot_product, které lze použít pro optimalizaci výkonu frameworků strojového učení díky hardwarovému urychlení operací skalárního součinu.
- Celkem bylo zařazeno 23 nových rozšíření:
- 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
- Byl přidán nový typ objektů VkPrivateDataSlot. Bylo implementováno 37 nových příkazů a více než 60 struktur.
- Bylo aktualizováno specifikace SPIR-V 1.6, která definuje univerzální mezivrstvu shaderů pro všechny platformy, kterou lze použít jak pro grafiku, tak pro paralelní výpočty. SPIR-V zahrnuje vyčlenění samostatné fáze kompilace shaderů do mezivrstvy, což umožňuje vytvářet front-endy pro různé vysoce úrovňové jazyky. Na základě různých vysoce úrovňových realizací je zvlášť generován jednotný mezikód, který mohou používat ovladače OpenGL, Vulkan a OpenCL bez použití vestavěného kompilátoru shaderů.
- Byla navržena koncepce profilů kompatibility. První společnost Google připravila základní profil (baseline profile) pro platformu Android, který usnadní určení úrovně podpory pokročilých funkcí Vulkan na zařízení, které přesahují specifikaci Vulkan 1.0. U většiny zařízení bude podpora profilu možná bez nutnosti instalace OTA aktualizací.
Připomínáme, že API Vulkan vyniká radikálním zjednodušením ovladačů, přesunem generování příkazů GPU na stranu aplikace, možností připojení ladicích vrstev, unifikací API pro různé platformy a použitím předkompilovaného mezikódu pro vykonání na straně GPU. Aby byla zajištěna vysoká výkonnost a předvídatelnost, Vulkan poskytuje aplikacím prostředky pro přímé ovládání operací GPU a integrovanou podporu pro vícethreadové zpracování příkazů GPU, což minimalizuje režijní náklady zavedené ovladačem, zatímco funkce realizované na straně ovladače se významně zjednodušují a stávají se předvídatelnějšími. Například operace jako správa paměti a zpracování chyb, realizované v OpenGL na straně ovladače, jsou ve Vulkanu přesunuty na úroveň aplikace.
Vulkan pokrývá všechny dostupné platformy a poskytuje jednotné API pro stolní a mobilní systémy a web, což umožňuje používat jedno společné API pro různé grafické procesory a oblasti použití. Díky víceúrovňové architektuře Vulkan, která předpokládá vytvoření nástrojů pracujících s jakýmikoli GPU, mohou výrobci hardwaru při vývoji využívat standardní nástroje pro kontrolu kódu, ladění a profilování. Pro vytváření shaderů je nabízeno nové přenositelné mezikódo SPIR-V, založené na LLVM a používající společné technologie s OpenCL. Pro management zařízení a obrazovek Vulkan nabízí rozhraní WSI (Window System Integration), které řeší přibližně ty samé úkoly jako EGL v OpenGL ES. Podpora WSI je již předinstalována v Waylandu – všechny aplikace využívající Vulkan mohou být spouštěny v prostředí nemodifikovaných. servery Wayland. Možnost práce přes WSI je také zajištěna pro Android, X11 (s DRI3), Windows, Tizen, macOS a iOS.
Zdroj: opennet.ru
