Konsorcjum Khronos, zajmujące się opracowaniem standardów graficznych,
specyfikację , definiujący API do uzyskiwania dostępu do możliwości graficznych i obliczeniowych GPU. Nowa specyfikacja uwzględnia poprawki zebrane przez dwa lata i . Sterowniki obsługujące nową wersję Vulkan są już firmy Intel, , ARM, Imagination Technologies i . W Mesa wsparcie dla Vulkan 1.2 zostało zaoferowane w sterownikach (karty AMD) oraz (Intel). Wsparcie dla Vulkan 1.2 zostało również wdrożone w debugerze , i zestawie przykładów .
Podstawowe :
- w pełni gotową do powszechnego użytku implementację języka programowania shaderów , opracowanego przez firmę Microsoft dla DirectX. Wsparcie HLSL w Vulkan pozwala na użycie tych samych shaderów HLSL w aplikacjach opartych na Vulkan i DirectX, a także upraszcza translację z HLSL do SPIR-V. Do kompilacji shaderów zaleca się użycie wbudowanego kompilatora
, który został udostępniony przez firmę Microsoft w 2017 roku i bazuje na technologii LLVM. Wsparcie dla Vulkan zostało zrealizowane przez oddzielny backend, pozwalający na translację HLSL do pośredniej reprezentacji shaderów SPIR-V. Implementacja obejmuje nie tylko wszystkie wbudowane możliwości
HLSL, w tym typy matematyczne, przepływy kontrolne, funkcje, zbiory, typy zasobów, przestrzenie nazw, Shader Model 6.2, struktury i metody, ale także umożliwia korzystanie z specyficznych dla Vulkan rozszerzeń, takich jak VKRay od NVIDIA. W trybie HLSL na Vulkan udało się zorganizować działanie takich gier jak Destiny 2, Red Dead Redemption II, Assassin’s Creed Odyssey i Tomb Raider. - Zaktualizowano specyfikację , definiującą uniwersalną dla wszystkich platform pośrednią reprezentację shaderów, która może być stosowana zarówno do grafiki, jak i obliczeń równoległych.
SPIR-V zakłada wydzielenie oddzielnej fazy kompilacji shaderów do pośredniej reprezentacji, co pozwala na tworzenie frontendów dla różnych języków wysokiego poziomu. Na podstawie różnych wysokopoziomowych realizacji generowany jest jednolity pośredni kod, który może być używany przez sterowniki OpenGL, Vulkan i OpenCL bez potrzeby stosowania wbudowanego kompilatora shaderów.
- W głównym API Vulkan zintegrowano 23 rozszerzenia, które zwiększyły wydajność, podniosły jakość wizualizacji i uprościły rozwój. Wśród dodanych rozszerzeń:
- (Timeline semaphore), ujednolicające synchronizacje z hostem i kolejkami urządzeń (pozwalają na użycie jednego prymitywu do wielokierunkowej synchronizacji między urządzeniem a hostem, bez potrzeby stosowania oddzielnych prymitywów VkFence i VkSemaphore). Nowe semafory są przedstawione jako monotonicznie rosnąca 64-bitowa wartość, którą można śledzić i aktualizować w kilku wątkach.

- Możliwość użycia w shaderach typów numerycznych o obniżonej precyzji;
- Zgodna z HLSL wersja rozmieszczenia pamięci;
- Niepowiązane zasoby (bindless), znoszące ograniczenie liczby dostępnych dla shaderów zasobów dzięki wykorzystaniu wspólnej przestrzeni wirtualnej pamięci systemowej i pamięci GPU;
- , definiujący, jak równolegle wykonywane wątki mogą uzyskiwać dostęp do współdzielonych danych i operacji synchronizacji;
- w celu ponownego wykorzystania deskryptorów rozmieszczenia w kilku shaderach;
- Odniesienia do buforów.
Pełna lista dodanych rozszerzeń:
- (Timeline semaphore), ujednolicające synchronizacje z hostem i kolejkami urządzeń (pozwalają na użycie jednego prymitywu do wielokierunkowej synchronizacji między urządzeniem a hostem, bez potrzeby stosowania oddzielnych prymitywów VkFence i VkSemaphore). Nowe semafory są przedstawione jako monotonicznie rosnąca 64-bitowa wartość, którą można śledzić i aktualizować w kilku wątkach.
- ponad 50 nowych struktur i 13 funkcji;
- Przygotowano skrócone wersje specyfikacji dla typowych platform docelowych, upraszczające pracę na platformach, dla których na razie nie są wspierane wszystkie rozszerzenia, i umożliwiające ominięcie selektywnej aktywacji podstawowych funkcji API Vulkan.
- Kontynuowano prace nad projektem zapewniającym przenośność z innymi API graficznymi. Na przykład w Vulkanie zaproponowano rozszerzenia, które umożliwiają translację OpenGL (), OpenCL (, ), OpenGL ES (GLOVE, Angle) oraz DirectX (, ) przez API Vulkan, a także odwrotnie, aby zapewnić działanie Vulkan na platformach bez native wsparcia ( i do działania na OpenGL i DirectX, i gfx-rs do działania na Metal).
W celu poprawy zgodności z DirectX i HLSL dodano rozszerzenia
VK_KHR_host_query_reset, VK_KHR_uniform_buffer_standard_layout, VK_EXT_scalar_block_layou, VK_KHR_separate_stencil_usage, VK_KHR_separate_depth_stencil_layouts, a także w SPIR-V zrealizowano specyficzne możliwości HLSL.
W planach na przyszłość wyróżnia się rozwój rozszerzeń dla uczenia maszynowego, ray tracingu, kodowania i dekodowania wideo, wsparcia VRS (variable-rate shading) oraz shaderów Mesh.
Przypomnijmy, że API Vulkan znacząco upraszcza sterowniki, przenosząc generację komend GPU na stronę aplikacji, umożliwiając dodawanie warstw debugowania, ujednolicając API dla różnych platform oraz stosując skompilowaną wersję pośrednią kodu do wykonania na stronie GPU. Aby zapewnić wysoką wydajność i przewidywalność, Vulkan dostarcza aplikacjom narzędzia do bezpośredniego zarządzania operacjami GPU oraz wbudowane wsparcie dla wielowątkowego przetwarzania komend GPU, co minimalizuje wydatki związane z działaniem sterownika, a funkcjonalności realizowane po stronie sterownika znacznie uproszczają się i stają bardziej przewidywalne. Na przykład, takie operacje jak zarządzanie pamięcią i obsługa błędów, realizowane w OpenGL po stronie sterownika, w Vulkanie zostały przeniesione na poziom aplikacji.
Vulkan obejmuje wszystkie dostępne platformy i dostarcza jednolite API dla systemów desktopowych, mobilnych i Web, umożliwiając korzystanie z jednego wspólnego API dla różnych procesorów graficznych i obszarów zastosowań. Dzięki warstwowej architekturze Vulkan, która umożliwia tworzenie narzędzi działających z dowolnymi GPU, producenci sprzętu mogą wykorzystywać w rozwoju standardowe narzędzia do weryfikacji kodu, debugowania i profilowania. Do tworzenia shaderów zaproponowano nowe przenośne pośrednie reprezentacje SPIR-V oparte na LLVM, wykorzystujące wspólne z OpenCL technologie. Do zarządzania urządzeniami i ekranami Vulkan oferuje interfejs WSI (Window System Integration), który rozwiązuje zbliżone problemy jak EGL w OpenGL ES. Wsparcie WSI z pudełka jest dostępne w Wayland — wszystkie aplikacje używające Vulkan mogą działać w środowiskach niezmodyfikowanych serwerów Wayland. Możliwość działania poprzez WSI jest również zapewniona dla Androida, X11 (z DRI3), Windows, Tizen, macOS oraz iOS.
Źródło: opennet.ru


