**Vulkan** on Khronos Groupin julkaisema ohjelmointirajapinta. Ennen ensimmäistä julkaisua on myös käytetty epävirallista termiä *glNext* tai *OpenGL Next*.

Vulkan on suunniteltu laajempaan käyttöön kuin aikaisempi OpenGL: rajapinta tukee muutakin käyttöä kuin tietokonegrafiikan ohjelmointirajapintana käyttöä. Muita tuettuja toimintoja ovat GPGPU-käyttöön tarkoitettu laskentakapasiteetti ilman näyttötoimintoa tai vastaavaa.

Vulkan on suunniteltu käytettäväksi grafiikkaprosessoreilla, digitaalisilla signaaliprosessoreilla sekä kiinteätoimisilla laitteilla.

Vulkan myös toimii lähempänä laitteistotasoa ja ajurit jättävät enemmän vastuuta sovelluskehittäjälle kuten tilaseurannan, muistihallinnan, synkronoinnin ja vikatilanteiden käsittelyn.

Historia
--------

Vulkan pohjautuu AMD:n Mantle-rajapintaan, jonka AMD lahjoitti Khronokselle uuden matalamman tason API:n kehityksen pohjaksi.

Vulkanin ensimmäinen versio 1.0 julkaistiin 16. helmikuuta 2016.

Vulkanin on tarkoitus tukea laajasti olemassa olevia alustoja, kuten Linux sekä Windows. Apple oli aluksi mukana mutta siirtyi sitten kehittämään omaa Metal-rajapintaansa. Microsoftin DirectX 12 tulee vain Windows 10:lle. MoltenVK on julkaistu Apache-lisenssillä macOS- ja iOS-alustoille: MoltenVK toimii kevyenä rajapintana Applen Metal-rajapinnan päällä.
Muun muassa Nintendo Switch on virallisesti sertifioitu Vulkanin kanssa yhteensopivaksi.

Vulkan tukee GPGPU-käyttöä nimellä *Compute Pipeline*.

Vulkan rajapintaan on ydinmäärittelyn lisäksi joukko rekisteröityjä laajennuksia, jotka nimetään tekijän tai kehittäjän mukaan. Laajennuksien on oltava tuettuja useimpien valmistajien laitteistoilla, oltava tehokkaita ja ratkaistava jokin todellinen ongelma.

### Vulkan 1.1

Maaliskuussa 2018 Khronos julkaisi määrittelystä version 1.1.

Syyskuussa 2018 julkaistu muistimalli (*memory consistency model*) kuvailee miten säikeet rinnakkaissuorituksessa voivat käsitellä jaettua dataa ja synkronoida keskenään. Malli sallii kääntäjille ja laitteistolle mahdollisuuden järjestää ja optimoida muistikäsittelyä.

### Vulkan 1.2

Tammikuussa 2020 Khronos julkaisi määrittelystä version 1.2.

Marraskuussa 2020 Khronos julkaisi Vulkan-, GLSL- ja SPIR-V -määrittelyitä koskevat laajennukset säteenseurantatuelle. Määrittelyn ennakkoversio julkaistiin maaliskuussa 2020. Tyypillinen käyttökohde on videopeleissä rasterointimenetelmän kanssa, jossa säteenseurannalla tuotetut varjot ja valaistus yhdistetään. Lisäksi tukea voi hyödyntää *offline*-renderöinnissä.

Huhtikuussa 2021 esiteltiin *Vulkan Video* -laajennus, joka on tarkoitettu laitteistokiihdytettyyn videokuvan käsittelyyn kuten purkuun ja pakkaukseen. Määrittely valmistui joulukuussa 2022.

### Vulkan 1.3

Tammikuussa 2022 julkaistu versio 1.3 siirtää eräitä valikoituja laajennuksia osaksi ydinmäärittelyä. Tavoitteena on vähentää ominaisuuksien fragmentoitumista, kun kehittäjillä ei ole selkeää kuvaa milloin tai mitkä laitteet tukevat eri ominaisuuksia.
Vulkan Videoon on lisätty tuki AV1-koodekille H.264- ja H.265-tuen rinnalle.

Toiminnot
---------

Rajapinnan yhteydessä käytetään termejä *isäntämuisti* (engl. *host*) ja *laitemuisti* (engl. *device*). Laitteen muistin hallinta ja liittäminen isäntämuistiin varattuun objektiin on sovelluksen tehtävä Vulkan-rajapinnassa. Korkeamman tason rajapinnat kuten OpenGL suorittavat läpinäkyvästi osan tästä muistihallinnasta.

Vulkan tukee monisäikeistä käsittelyä. Sen käyttämästä synkronoinnista käytetään termiä *ulkoinen synkronointi* (engl. *external synchronization*), jolloin on sovelluksen vastuulla varmistua ettei samaa objektia muokata useammasta säikeestä yhtä aikaa. Synkronointiin käytettäviä toimintoja ovat *aidat* (engl. *fences*), *tapahtumat* (engl. *events*) ja *semaforit* (engl. *semaphores*). Lisäksi on *esteitä* (engl. *barriers*), joita voidaan käyttää suoritusesteinä (`vkCmdPipelineBarrier`) tai muistiesteinä (`vkMemoryBarrier`). Aikaisemmat rajapinnat kuten DirectX ja OpenGL ovat käsitelleet nämä taustalla, mutta Vulkan mahdollistaa suoran käsittelyn.

Rajapintaa käyttävä sovellus käynnistää yhden tai useamman *instanssin* (engl. *instance*). Instanssiin voidaan liittää yksi tai useampi fyysinen laite, joita voidaan käyttää yhden tai useamman loogisen laitteen kautta. Loogisilla laitteilla on yksi tai useampi jono, joiden kautta komentoja käsitellään. Hierarkia on suunniteltu joustavuutta varten.

Diagnostiikkaa ja virheidenjäljitystä varten voidaan ottaa käyttöön lisätoimintoja kerroksittain (engl. *layers*), joita julkaistavassa sovellusversiossa ei tarvita.

Vulkan Safety Critical
----------------------

Khronos on perustanut työryhmän kehittämään turvakriittisiin järjestelmiin suunnatun version Vulkan SC, joka korvaisi OpenGL SC:n. Version tavoitteena on tukea standardeja RTCA DO-178C, EASA ED-12C, FACE (engl. *Future Airborne Capability Environment*) ja ISO 26262. Version tavoitteena on tukea grafiikkaa ja laskentaa rajapinnan avulla.
Vulkan SC on arvioitu MISRA C -ohjeistuksen mukaiseksi.
Vulkan SC -määrittelyn versio 1.0 on julkaistu 1. maaliskuuta 2022.

Katso myös
----------

* Direct3D
* Mantle
* Metal
* OpenCL
* OpenGL

Lähteet
-------

1. 1 2 3  OpenGL:n korvaajan ja DirectX 12:n haastajan ensimmäinen versio julkaistiin – Mikrobitti *www.mikrobitti.fi*. Viitattu 18.2.2016.
2. ↑  Vulkan 1.3.277 - A Specification (päivittyvä määrittely) *khronos.org*.  1.2.2024. Viitattu 2.2.2024. (englanniksi)
3. 1 2 3 4 5 6 7 8 9  Sellers, Graham: *Vulkan Programming Guide*. Addison-Wesley, 2017. ISBN 978-0-13-446454-1. (englanniksi)
4. ↑  Gordon Mah Ung: Mantle is a Vulkan: AMD's dead graphics API rises from the ashes in OpenGL's successor  6.3.2015. PC World. Viitattu 29.12.2017.
5. ↑  OpenGL's successor is ready to improve gaming graphics *Engadget*. Viitattu 18.2.2016.
6. ↑  Vulkan is coming to macOS and iOS, but no thanks to Apple  26.2.2018. Ars Technica. Viitattu 27.2.2018.
7. ↑  Free and Open-Source Vulkan on macOS and iOS  26.2.2018. Valve Corporation. Viitattu 4.4.2018.
8. ↑  Nintendo Switch Listed as Vulkan and OpenGL Conformant *mynintendonews.com*.  19.12.2016. Viitattu 23.11.2020. (englanniksi)
9. ↑  9.1. Compute Pipelines Khronos Group.  Arkistoitu 27.7.2016. Viitattu 20.1.2017.
10. ↑  Khronos Vulkan Registry *khronos.org*. Viitattu 5.2.2022. (englanniksi)
11. ↑  Streamlining Render Passes *khronos.org*. Viitattu 5.2.2022. (englanniksi)
12. ↑  Khronos Group Releases Vulkan 1.1 *khronos.org*. Viitattu 26.1.2022. (englanniksi)
13. 1 2  Vulkan has just become the world’s first graphics API with a formal memory model. So, what is a memory model and why should I care? *khronos.org*.  13.9.2018. Viitattu 27.11.2021. (englanniksi)
14. ↑  Khronos Group Releases Vulkan 1.2 *khronos.org*.  15.1.2020. Viitattu 26.1.2022. (englanniksi)
15. ↑  Daniel Koch: Vulkan Ray Tracing Final Specification Release *khronos.org*.  23.11.2020. Viitattu 23.11.2020. (englanniksi)
16. 1 2 3  Ray Tracing In Vulkan *khronos.org*.  17.3.2020. Viitattu 23.11.2020. (englanniksi)
17. ↑  An Introduction to Vulkan Video *khronos.org*.  13.4.2021. Viitattu 15.4.2021. (englanniksi)
18. ↑  Khronos Finalizes Vulkan Video Extensions for Accelerated H.264 and H.265 Decode *khronos.org*.  19.12.2022. Viitattu 24.12.2022. (englanniksi)
19. ↑  Khronos Strengthens Vulkan Ecosystem with Release of Vulkan 1.3, Public Roadmap and Profiles *khronos.org*.  25.1.2022. Viitattu 26.1.2022. (englanniksi)
20. ↑  Vulkan 1.3 and Roadmap 2022 *khronos.org*. Viitattu 26.1.2022. (englanniksi)
21. ↑  Khronos Releases AV1 Decode in Vulkan Video with SDK Support for H.264/H.265 Encode *khronos.org*.  1.2.2024. Viitattu 2.2.2024. (englanniksi)
22. ↑  Understanding Vulkan Synchronization *khronos.org*. Viitattu 27.11.2021. (englanniksi)
23. 1 2  Michael Larabel: Vulkan For Planes & Cars - Khronos Starting Vulkan Safety Critical WG  25.2.2019. Phoronix. Viitattu 4.3.2019.
24. ↑  Vulkan SC Overview *khronos.org*. Viitattu 2.12.2020. (englanniksi)
25. ↑  Khronos Group Begins Work on a New Standards Initiative to Bring Vulkan GPU Acceleration to Safety Critical Industries  25.2.2019. Khronos. Viitattu 4.3.2019. (englanniksi)
26. ↑  An update from the Khronos Vulkan SC Working Group on Offline Pipelines, MISRA C alignment and rigorous conformance testing *khronos.org*. Viitattu 24.8.2021. (englanniksi)
27. ↑  Khronos Releases Vulkan SC 1.0 Open Standard for Safety-Critical Accelerated Graphics and Compute *khronos.org*.  1.3.2022. Viitattu 10.4.2022. (englanniksi)

Aiheesta muualla
----------------

* Khronos Releases Vulkan 1.0 Specification
* Vulkan 1.0.102 - A Specification
* Conformant Products