Wulkan

Wulkan
Oryginalni autorzy AMD , DICE (oryginalny projekt płaszcza )
Deweloperzy Grupa Khronos (wariant podarowany i pochodny, jako Vulkan)
Pierwsze wydanie 16 lutego 2016 ; 7 lat temu ( 2016-02-16 )
Wersja stabilna 1.3.244 (18 marca 2023 ; 1 dzień temu ( 18.03.2023 ) )
Magazyn
Napisane w C
System operacyjny Android , Linux , Haiku , Fuchsia , BSD Unix , QNX , Windows , Nintendo Switch , Stadia , Tizen , macOS , iOS , iPadOS , tvOS , Raspberry Pi , vxWorks
Typ Grafika 3D i obliczeniowe API
Licencja Licencja Apache 2.0
Strona internetowa vulkan.org _

Vulkan to niskonakładowe , wieloplatformowe API , otwarty standard dla grafiki 3D i obliczeń .

Vulkan jest ukierunkowany na wysokowydajne aplikacje grafiki 3D działające w czasie rzeczywistym, takie jak gry wideo i media interaktywne , oraz wysoce zrównoleglone obliczenia . Vulkan ma oferować wyższą wydajność i bardziej efektywne procesora i karty graficznej w porównaniu ze starszymi interfejsami API OpenGL i Direct3D 11 . Czyni to, udostępniając znacznie niższy poziom API dla aplikacji niż starsze interfejsy API, który bardziej przypomina sposób działania nowoczesnych procesorów graficznych.

Vulkan jest porównywalny z interfejsem API Metal firmy Apple i Direct3D 12 firmy Microsoft i jest trudniejszy w użyciu niż interfejsy API wyższego poziomu OpenGL i Direct3D 11. Oprócz mniejszego zużycia procesora, Vulkan został zaprojektowany tak, aby umożliwić programistom lepszą dystrybucję pracy między wieloma rdzeniami procesora .

Vulkan został po raz pierwszy ogłoszony przez organizację non-profit Khronos Group na GDC 2015. API Vulkan było początkowo określane jako „ inicjatywa OpenGL nowej generacji ” lub „OpenGL next” przez Khronos, ale używanie tych nazw zostało przerwane, gdy „Vulkan” został ogłoszony.

Vulkan wywodzi się i jest zbudowany na komponentach interfejsu API Mantle firmy AMD , który został przekazany przez AMD firmie Khronos z zamiarem zapewnienia Khronosowi podstawy, na której można rozpocząć opracowywanie interfejsu API niskiego poziomu, który mógłby ujednolicić w całej branży.

Cechy

Zarówno OpenGL, jak i Vulkan renderują interfejsy API. W obu przypadkach GPU wykonuje shadery , podczas gdy CPU wykonuje wszystko inne.

Vulkan ma zapewnić wiele zalet w porównaniu z innymi interfejsami API, a także swoim poprzednikiem, OpenGL . Vulkan oferuje niższy narzut, bardziej bezpośrednią kontrolę nad GPU i mniejsze zużycie procesora. Ogólna koncepcja i zestaw funkcji Vulkan jest podobny do koncepcji widzianych w Mantle , a później przyjętych przez Microsoft z Direct3D 12 i Apple z Metal .

Zamierzone zalety Vulkan w porównaniu z interfejsami API poprzedniej generacji obejmują:

Ujednolicony interfejs API

Vulkan zapewnia jeden interfejs API zarówno dla stacjonarnych, jak i mobilnych urządzeń graficznych, podczas gdy wcześniej były one podzielone odpowiednio między OpenGL i OpenGL ES .

Platforma krzyżowa

Vulkan jest dostępny w wielu nowoczesnych systemach operacyjnych. Podobnie jak OpenGL, w przeciwieństwie do Direct3D 12, interfejs API Vulkan nie jest ograniczony do jednego systemu operacyjnego lub formatu urządzenia. Vulkan działa natywnie na systemach Android , Linux , BSD Unix , QNX , Haiku , Nintendo Switch , Raspberry Pi , Stadia , Fuchsia , Tizen oraz Windows 7 , 8 , 10 i 11 . MoltenVK zapewnia wsparcie innych firm na wolnej licencji dla systemów macOS , iOS i tvOS poprzez zawijanie interfejsu Metal API firmy Apple.

Mniejsze zużycie procesora

Vulkan zmniejsza obciążenie procesorów dzięki zastosowaniu przetwarzania wsadowego i innych optymalizacji niskiego poziomu, zmniejszając w ten sposób obciążenie procesora i pozostawiając procesorowi swobodę wykonywania większej liczby obliczeń lub renderowania, niż byłoby to możliwe w innym przypadku.

Przyjazny dla wielu wątków projekt

Direct3D 11 i OpenGL 4 zostały początkowo zaprojektowane do użytku z procesorami jednordzeniowymi i otrzymały tylko ulepszenia do wykonania na wielu rdzeniach. Nawet jeśli twórcy aplikacji korzystają z ulepszeń, te interfejsy API regularnie nie skalują się dobrze na wielu rdzeniach. Vulkan oferuje lepszą skalowalność na wielordzeniowych procesorach dzięki zmodernizowanej architekturze wątków.

Wstępnie skompilowane shadery

OpenGL używa języka wysokiego poziomu GLSL do pisania shaderów , co zmusza każdy sterownik OpenGL do zaimplementowania własnego kompilatora dla GLSL. Jest to następnie wykonywane w czasie wykonywania aplikacji w celu przetłumaczenia shaderów programu na kod maszynowy GPU. W przeciwieństwie do tego, sterowniki Vulkan mają pobierać shadery już przetłumaczone na pośredni format binarny o nazwie SPIR-V (Standard Portable Intermediate Representation), analogiczny do formatu binarnego, w który shadery HLSL są kompilowane w Direct3D . Umożliwienie wstępnej kompilacji modułu cieniującego zwiększa szybkość inicjowania aplikacji i pozwala na użycie większej liczby modułów cieniujących na scenę. Sterownik Vulkan musi tylko przeprowadzać optymalizację i generowanie kodu pod kątem GPU, co skutkuje łatwiejszą konserwacją sterowników i potencjalnie mniejszymi pakietami sterowników. Twórcy aplikacji mogą teraz łatwiej zaciemniać zastrzeżony kod modułu cieniującego, ponieważ moduły cieniujące nie są przechowywane bezpośrednio jako kod źródłowy, jednak dostępne są narzędzia, które mogą dekompilować SPIR-V do czytelnego dla człowieka kodu wysokiego poziomu .

Inni

OpenGL kontra Vulkan

OpenGL Wulkan
Jedna globalna maszyna stanów Oparte na obiektach bez stanu globalnego
Stan jest powiązany z jednym kontekstem Wszystkie koncepcje stanu są zlokalizowane w buforze poleceń
Operacje mogą być wykonywane tylko sekwencyjnie Możliwe jest programowanie wielowątkowe
Pamięć GPU i synchronizacja są zwykle ukryte Jawna kontrola nad zarządzaniem pamięcią i synchronizacją
Rozbudowane sprawdzanie błędów
Sterowniki Vulkan nie sprawdzają błędów w czasie wykonywania; istnieje warstwa sprawdzania poprawności dla programistów

NVIDIA twierdzi, że „OpenGL jest nadal świetną opcją dla wielu przypadków użycia, ponieważ ma znacznie mniejszą złożoność i obciążenie konserwacyjne niż Vulkan, a jednocześnie w wielu przypadkach nadal zapewnia doskonałą ogólną wydajność”.

AMD twierdzi, że „Vulkan obsługuje sterowanie zbliżone do metalu, zapewniając wyższą wydajność i lepszą jakość obrazu w systemach Windows 7, Windows 8.1, Windows 10 i Linux. Żaden inny graficzny interfejs API nie oferuje tak potężnej kombinacji kompatybilności z systemem operacyjnym, funkcji renderowania i wydajność sprzętu”.

Wersje

Vulkan 1.1

Na SIGGRAPH 2016 Khronos ogłosił, że Vulkan otrzyma wsparcie dla automatycznych funkcji multi-GPU, podobnych do tego, co oferuje Direct3D 12. Obsługa wielu GPU zawarta w API eliminuje potrzebę SLI lub Crossfire, które wymagają kart graficznych ten sam model. Zamiast tego API multi-GPU umożliwia interfejsowi API inteligentne dzielenie obciążenia między dwa lub więcej całkowicie różnych procesorów graficznych. Na przykład zintegrowane procesory graficzne wbudowane w procesor mogą być używane w połączeniu z wysokiej klasy dedykowanym procesorem graficznym w celu niewielkiego zwiększenia wydajności.

7 marca 2018 r. Grupa Khronos wydała Vulkan 1.1. Ta pierwsza duża aktualizacja interfejsu API ustandaryzowała kilka rozszerzeń, takich jak wiele widoków, grupy urządzeń, udostępnianie między procesami i interfejsami API, zaawansowane funkcje obliczeniowe, obsługa HLSL i obsługa YCbCr. Jednocześnie przyniosła lepszą kompatybilność z DirectX 12, wyraźną obsługę wielu procesorów graficznych, ray tracingu i położyła podwaliny pod następną generację procesorów graficznych. Wraz z Vulkan 1.1 SPIR-V został zaktualizowany do wersji 1.3.

Vulkan 1.2

15 stycznia 2020 r. Grupa Khronos wydała Vulkan 1.2. Ta druga duża aktualizacja API integruje 23 dodatkowe powszechnie używane, sprawdzone rozszerzenia Vulkan z podstawowym standardem Vulkan. Niektóre z najważniejszych funkcji to „semafory osi czasu do łatwej synchronizacji”, „formalny model pamięci do precyzyjnego definiowania semantyki synchronizacji i operacji pamięciowych w różnych wątkach” oraz „indeksowanie deskryptorów umożliwiające ponowne wykorzystanie układów deskryptorów przez wiele shaderów” . Dodatkowe funkcje Vulkan 1.2 zwiększają jego elastyczność, jeśli chodzi o implementację innych graficznych interfejsów API na Vulkan, w tym „jednolity standardowy układ bufora”, „układ bloków skalarnych” i „oddzielne użycie szablonu”.

Vulkan 1.3

25 stycznia 2022 r. Grupa Khronos wydała Vulkan 1.3. Ta trzecia duża aktualizacja API integruje 23 dodatkowe powszechnie używane, sprawdzone rozszerzenia Vulkan z podstawowym standardem Vulkan. Vulkan 1.3 koncentruje się na zmniejszeniu fragmentacji, sprawiając, że nowe funkcje nie są opcjonalne, aby urządzenie można było uznać za obsługujące Vulkan 1.3. Nowe funkcje w Vulkan 1.3 obejmują dynamiczne renderowanie, dodatkowy stan dynamiczny, ulepszony interfejs API synchronizacji i profile urządzeń.

Planowane funkcje

Wypuszczając OpenCL 2.2, Khronos Group ogłosiła, że ​​OpenCL będzie zbieżny tam, gdzie to możliwe, z Vulkan, aby umożliwić elastyczność wdrażania oprogramowania OpenCL za pośrednictwem obu interfejsów API. Zostało to zademonstrowane przez Adobe Premiere Rush przy użyciu kompilatora open source clspv do skompilowania znacznych ilości kodu jądra OpenCL C do uruchomienia w środowisku wykonawczym Vulkan w celu wdrożenia na Androida.

Historia

Grupa Khronos rozpoczęła projekt tworzenia graficznego interfejsu API nowej generacji w lipcu 2014 r. od spotkania inauguracyjnego w Valve . Na SIGGRAPH 2014 projekt został publicznie ogłoszony zaproszeniem dla uczestników.

Według Urzędu Patentów i Znaków Towarowych Stanów Zjednoczonych znak towarowy Vulkan został zgłoszony 19 lutego 2015 r.

Vulkan został formalnie nazwany i ogłoszony na Game Developers Conference 2015, chociaż spekulacje i plotki wokół nowego API istniały już wcześniej i określały je jako „ glNext ”.

2015

Na początku 2015 roku LunarG (finansowany przez Valve ) opracował i zaprezentował sterownik dla Linuksa dla Intela, który umożliwił kompatybilność Vulkan ze zintegrowaną grafiką z serii HD 4000, mimo że otwarte sterowniki Mesa nie były w pełni kompatybilne z OpenGL 4.0 aż do końca tego roku. Nadal istnieje możliwość obsługi Sandy Bridge, ponieważ obsługuje on obliczenia przez Direct3D11.

10 sierpnia 2015 r. Google ogłosił, że przyszłe wersje Androida będą obsługiwać Vulkan. Android 7.x „Nougat” uruchomił obsługę Vulkan 22 sierpnia 2016 r. Android 8.0 „Oreo” ma pełne wsparcie.

18 grudnia 2015 r. Grupa Khronos ogłosiła, że ​​wersja 1.0 specyfikacji Vulkan jest prawie ukończona i zostanie wydana, gdy będą dostępne zgodne sterowniki.

2016

Pełna specyfikacja Vulkan i pakiet Vulkan SDK typu open source zostały wydane 16 lutego 2016 r.

2018

26 lutego 2018 roku Khronos Group ogłosiła, że ​​API Vulkan stało się dostępne dla wszystkich na macOS i iOS za pośrednictwem biblioteki MoltenVK , która umożliwia Vulkanowi działanie na Metal . Inne nowe rozwiązania zostały pokazane na targach SIGGRAPH 2018. Wcześniej MoltenVK było rozwiązaniem zastrzeżonym i licencjonowanym komercyjnie, ale firma Valve zawarła umowę z deweloperem Brenwill Workshop Ltd na open-source MoltenVK na licencji Apache 2.0, w wyniku czego biblioteka jest teraz dostępna na GitHub . Zawór ogłosił również, że od 26 lutego 2018 roku Dota 2 może działać na systemie macOS przy użyciu interfejsu API Vulkan, który jest oparty na MoltenVK.

2019

25 lutego 2019 r. ogłoszono, że grupa robocza Vulkan Safety Critical (SC) ma wprowadzić akcelerację GPU Vulkan do branż o kluczowym znaczeniu dla bezpieczeństwa.

strumieniowego przesyłania gier w chmurze Google Stadia korzysta z Vulkan na serwerach opartych na systemie Linux z procesorami graficznymi AMD .

2020

15 stycznia 2020 roku został wydany Vulkan 1.2.

Wraz z wydaniem Vulkan 1.2, Khronos Group opublikowała post na blogu, w którym uznano, że obsługa HLSL w Vulkan osiągnęła status „gotowy do produkcji”, biorąc pod uwagę ulepszenia kompilatora DXC firmy Microsoft i kompilatora glslang Khronos oraz nowe funkcje w Vulkan 1.2, które poprawiają obsługę HLSL .

3 lutego 2020 r. Fundacja Raspberry Pi ogłosiła, że ​​pracuje nad sterownikiem Vulkan typu open source dla popularnego komputera jednopłytkowego Raspberry Pi . 20 czerwca 2020 roku inżynier grafik ujawnił, że po dwóch latach pracy stworzył taki, który był w stanie uruchomić VkQuake3 z prędkością ponad 100 klatek na sekundę na małym komputerze.

17 marca 2020 roku Khronos Group wydała rozszerzenia Ray Tracing , oparte na zastrzeżonym rozszerzeniu Nvidii, z kilkoma głównymi rozszerzeniami i wieloma pomniejszymi zmianami, które z kolei były oparte na interfejsie API OptiX firmy Nvidia. 23 listopada 2020 r. sfinalizowano te rozszerzenia Ray Tracing.

24 listopada 2020 r. Fundacja Raspberry Pi ogłosiła, że ​​ich sterownik dla Raspberry Pi 4 jest zgodny z Vulkan 1.0.

2022

25 stycznia 2022 roku został wydany Vulkan 1.3.

1 marca 2022 r. wydano Vulkan SC 1.0, który zapewnia grafikę i obliczenia Vulkan dla branży o krytycznym znaczeniu dla bezpieczeństwa, a jednocześnie jest oparty na standardzie Vulkan 1.2.

1 sierpnia 2022 r. Fundacja Raspberry Pi ogłosiła, że ​​ich sterownik dla Raspberry Pi 4 jest zgodny z Vulkan 1.2.

1 września 2022 r. Wydano Mesh Shading dla Vulkan

Wsparcie różnych dostawców

Zrzut ekranu przedstawiający vulkaninfo , pokazujący informacje o obsługiwanych instancjach Vulkan i vkcube , programie do testowania implementacji Vulkan w systemie

Wstępne specyfikacje wskazywały, że sterowniki Vulkan można zaimplementować na dowolnym sprzęcie obsługującym OpenGL ES 3.1 lub OpenGL 4.x i nowsze. Ponieważ obsługa Vulkan wymaga nowych sterowników graficznych, niekoniecznie oznacza to, że każde istniejące urządzenie obsługujące OpenGL ES 3.1 lub OpenGL 4.x będzie miało dostępne sterowniki Vulkan.

Intel

Od lutego 2023 r. firma Intel podzieliła obsługę sterowników Vulkan na systemy Windows i Linux . Wszystkie sterowniki zostały opracowane przez firmę Intel.

W systemie Windows Skylake do Ice Lake obsługuje Vulkan do wersji 1.3, z ograniczoną obsługą w przyszłości, ponieważ przyszłe aktualizacje będą obejmować tylko poprawki bezpieczeństwa. Iris i wyższe są w pełni obsługiwane.

W systemie Linux istnieje niepełna obsługa Vulkan dla Haswell , która nie jest zgodna z Vulkan 1.0, wraz z Haswell, Ivy Bridge i Broadwell są obsługiwane przez starszy sterownik Vulkan w Mesa o nazwie HASVK, a Skylake i nowsze są obsługiwane przez sterownik w Mesa o nazwie ANV.

AMD

W systemie Windows Vulkan 1.2 jest obsługiwany od GCN 1.0 do GCN 3.0, bez planowanych dalszych aktualizacji. GCN 4.0 i nowsze obsługują Vulkan 1.3.

W systemie Linux istnieje wiele różnych sterowników Vulkan z różną i nakładającą się obsługą sprzętu. Istnieje sterownik Vulkan o otwartym kodzie źródłowym o nazwie AMDVLK, opracowany przez AMD, który odzwierciedla obsługę systemu Windows. Istnieje również zastrzeżony sterownik o nazwie AMDGPU-PRO, którego nie zaleca się używać większości użytkowników.

Istnieje również zalecany sterownik o nazwie RADV w Mesa opracowany przez Valve, Red Hat, Google i inne. Ten sterownik obsługuje wszystkie karty GCN i RDNA , jednak dla GCN 1.0 do GCN 2.0 należy włączyć jego eksperymentalną obsługę w module jądra amdgpu .

NVIDIA

W systemach Windows i Linux dostępny jest sterownik Vulkan opracowany przez firmę NVIDIA, który obsługuje Vulkan 1.2 na kartach Kepler bez planowanych dalszych aktualizacji. Maxwell i nowsze obsługują Vulkan 1.3.

W Linuksie planowany jest eksperymentalny, niekompletny sterownik Vulkan typu open source dla Mesy o nazwie NVK, który ma obsługiwać Turing i nowsze.

Android i mobilne GPU

Większość nowoczesnych urządzeń z Androidem obsługuje Vulkan. Android 7.0 Nougat zawiera opcjonalną obsługę Vulkan 1.0, Android 9.0 Pie zawiera opcjonalną obsługę Vulkan 1.1, a Android 10 wymaga, aby wszystkie 64-bitowe urządzenia obsługiwały Vulkan 1.1. W systemie Linux i niektórych urządzeniach z Chrome OS sterownik Mesa typu open source zapewnia obsługę sprzętu Arm Mali (Midgard i Bifrost), Qualcomm Adreno i Broadcom VideoCore VI .

Jabłko

Od czerwca 2022 r. urządzenia Apple nie zapewniają natywnej obsługi interfejsu API Vulkan. Obsługa Vulkan jest dostępna za pośrednictwem biblioteki open source MoltenVK , która zapewnia implementację Vulkan oprócz interfejsu Metal Graphics API dostępnego na urządzeniach z systemem iOS i macOS, chociaż ma pewne ograniczenia w odniesieniu do niektórych zaawansowanych funkcji API. Obsługiwany jest Vulkan 1.3. W czerwcu 2022 r. wersja 1.3.217 Vulkan dodała obsługę obiektów Metal, ułatwiając import i eksport między dwoma interfejsami API.

Kompatybilność wsteczna

Vulkan nie jest wstecznie kompatybilny z OpenGL , chociaż istnieją pewne projekty, które implementują OpenGL na Vulkan, takie jak Google ANGLE i Mesa 's Zink.

Vulkan nie jest również kompatybilny z innymi graficznymi interfejsami API, takimi jak Direct3D , Metal i Mantle , jednak implementacje tych interfejsów API istnieją na szczycie Vulkan:

  • Direct3D ma wiele implementacji, a mianowicie DXVK dla Direct3D 9, 10 i 11 oraz VKD3D-Proton dla obsługi Direct3D 12. Inne, starsze wersje Direct3D mogą być dostępne jako biblioteki innych firm, takie jak D8VK dla Direct3D 8.
  • Metal ma w fazie rozwoju implementację innej firmy o nazwie Indium , przeznaczoną do użycia z warstwą kompatybilności Darling .
  • Mantle ma w fazie rozwoju implementację innej firmy o nazwie GRVK , która obsługuje starsze gry Mantle.

specyficzne dla platformy zaimplementowane na Vulkan mogą również działać na alternatywnych platformach. Na przykład DXVK zapewnia alternatywną bibliotekę współdzieloną przeznaczoną do natywnego używania w systemie Linux (bez warstwy kompatybilności z Wine ), aby pomóc w przenoszeniu gier.

Zobacz też

Notatki

Dalsza lektura

Linki zewnętrzne