Vulkan (API)

aus Wikipedia, der freien Enzyklopädie
Vulkan

Vulkan.svg
Basisdaten

Entwickler Khronos Group
Erscheinungsjahr 2016
Betriebssystem plattformübergreifend (u. a. Linux und Windows)[1]
Kategorie API
Lizenz quelloffen
deutschsprachig nein
www.vulkan.org

Vulkan – zunächst Next Generation OpenGL oder glNext genannt – bezeichnet eine Computergrafik-Programmierschnittstelle, die quelloffen ist und auf die Entwicklung plattformübergreifender Anwendungen mit dem Schwerpunkt auf 2D- und 3D-Grafik zielt. Mit der Arbeit an der Schnittstelle wird mehr Rechenleistung durch hardwarenähere Programmierung als bei OpenGL erzielt. Dies entspricht einem geringeren Abstraktionsgrad der Schnittstelle. Auf diese Weise sollte der für OpenGL notwendige Treiberüberbau reduziert werden.

Eigenschaften

Vulkan ist abgeleitet von AMD Mantle;[2] das 2019 zugunsten Vulkans eingestellt wurde. Zu den wesentlichen Anforderungen an Vulkan gehörte, die Trennung von OpenGL für den Desktop und OpenGL ES für eingebettete und mobile Systeme wieder zusammenzuführen. Vulkan soll den Treiber-Overhead reduzieren, indem es deutlich hardwarenäher als OpenGL ist.[3]

Das neue Design berücksichtigt dabei auch Mehrprozessorsysteme besser, die auch bei Smartphone-Platformen dominierend wurden. Während OpenGL4 und Direct3D grundsätzlich nur eine Engine mit einem globalen Zustand hatten, die Berechnungen auf die GPU auslagern konnte, hat man bei Vulkan den Zustand an die Objekte gebunden, und erwartet einen Command Buffer zur GPU, der die Berechnungen beschreibt. Eine multi-threaded Implementation ist hier üblich, die mit gemeinsamen Speicherpuffern und Synchronisationswerten unterstützt werden. Dies erfordert allerdings vom API-Nutzer einen höheren Initialisierungsaufwand, und Fehler in der Command-Ausführung werden nicht direkt ans Hauptprogramm zurückgemeldet.

Für Entwickler bietet Vulkan den Vorteil, dass viele Details kontrollierbar sind, die bei OpenGL vom Treiber erledigt werden. Verglichen mit OpenGL bedeutet das aber auch, dass der initiale Aufwand höher ist, da man sich um diese Details zwingend kümmern muss. Das Hallo-Welt-Programm der Computergraphik, ein buntes Dreieck, benötigt in Vulkan mehr als 1000 Codezeilen, während es in OpenGL in ca. 100 Zeilen machbar ist.[4][5]

Vulkan bietet Unterstützung für SPIR-V als plattformübergreifende Zwischensprache für OpenCL und GLSL.[6] Mit GLAVE existiert seit 2015 auch ein Debugger.[7]

Vulkan 1.0

Am 16. Februar 2016 wurde die Version 1.0 veröffentlicht und zudem unter anderem bereits Unterstützung für das Display-Server-Protokoll Wayland aufgenommen.[1][8][9]

Vulkan 1.1

Zu den wesentlichen Anforderungen von 1.1 gehört die Unterstützung von Mehrfach-GPU Systemen, wie sie bei Direct3D 12 gerade neu 2016 umgesetzt waren. Dabei geht es häufig darum, einen GPU-Core, der auf einem Hauptprozessor integriert ist, auch dann zu nutzen, wenn man eine eigene Grafikkarte im System hat.

Die im Januar 2018 vorgestellte Umsetzung ermöglicht entsprechend mehr Shader-Varianten und genauere Synchronisation. Zusätzlich bringt es eine bessere Unterstützung für Raytracing-Berechnungen, einschließlich Kompatibilität mit der entsprechenden DirectX 12 Schnittstelle. Die Definition für SPIR-V wird auf Version 1.3 angehoben.

Vulkan 1.2

Die im Januar 2020 vorgestellte Version 1.2 zeigt vor allem die Integration von weit verbreiteten Erweiterungen der Integratoren in den Standard. Insbesondere die Definition von Speicherpuffern und Synchronsationsmöglichen für den multi-threaded Betrieb wurden verfeinert. Zur Erleichterung der Einbindung in GUI-Frameworks wurden genaue Festlegungen für Grafikpuffer geschaffen, die flache Objekte beschreiben.

Vulkan 1.3

Version 1.3 wurde am 25. Januar 2022 veröffentlicht.[10] Für das dritte Major Update wurden 23 gebräuchliche Extensions in den Standard aufgenommen.[11] Bei Vulkan 1.3 konzentrierte man sich darauf, die Fragmentierung zu reduzieren, indem man neue Features nicht optional, sondern verpflichtend für Geräte kennzeichnete, die als geeignet für Vulkan 1.3 gelten sollen.[12] Zu den neuen Features gehören Dynamic Rendering, Additional Dynamic State, eine verbesserte Synchronisations-API und Geräteprofile.

Die noch in der Entwicklung befindliche nächste Version soll mit der OpenCL-Schnittstelle zusammengeführt werden. Schon 2019 hatte man dazu demonstriert, wie OpenCL Treiber die Berechnungen an die Vulkan-Implementation durchreichen.

In Planung

Mit dem Release von OpenCL 2.2 kündigte die Khronos Group an, dass OpenCL womöglich mit Vulkan konvergieren werde, um OpenCL-Software über beide APIs ausführbar zu machen.[13][14] Ein Beispiel hierfür ist Adobes Premiere Rush, welches den clspv-Open-Source-Compiler nutzt, um beachtliche Teile des OpenCL-C-Kernel-Codes auf einer Vulkan-Runtime auf Android-Geräten auszuführen.

Unterstützung

Mindestanforderungen um Vulkan-Treiber zu entwickeln, sind OpenGL 4.x und OpenGL ES 3.1. Dazu sollte eine hohe Rechenleistung vorhanden sein.

AMD
unterstützt Vulkan 1.0 deshalb auf allen CPUs (von AMD APU getauft) und Grafikprozessoren mit GCN-Architektur. Vulkan 1.2 wird ab GCN ab der 2. Generation (1.2+) unterstützt.
NVIDIA
unterstützt Vulkan 1.0 und 1.1 ab Compute Capability 3 (Architekturen: Kepler, Maxwell und Pascal, jedoch nicht die älteren Tesla und Fermi). Vollständige Vulkan 1.2 Unterstützung ab der Maxwell Architektur.[15]
Intel
unterstützt zur Zeit ab der 6. Core-Generation (Skylake) Vulkan 1.2,[16] unter Linux mit Mesa 3D zusätzlich Vulkan 1.0 ab der 3. (Ivy Bridge) und Vulkan 1.1 ab der 5. Core-Generation (Broadwell).
ARM
Im Android-ARM-Bereich unterstützen einige Hersteller Vulkan 1.0 und auch Vulkan 1.1 für Android 8.[17] Für den aktuellen Raspberry Pi 4 ist seit Ende November 2020 ein Treiber für Vulkan 1.0 verfügbar.[18] Seit August 2022 unterstützt der Treiber Vulkan 1.2.[19]

Verwendung

Neben der bereits portierten Serious Engine, die mit The Talos Principle die erste Anwendung Vulkans war,[20][21] wird auch die Source-2-Engine die Vulkan-API unterstützen.[22] Das Spiel Dota 2, das die Source-2-Engine verwendet, unterstützt seit Mai 2016 die Vulkan-API.[23] Das im Mai 2016 veröffentlichte Doom bekam einen Monat später die Vulkan-Unterstützung.[24] Außerdem benutzte id Tech 7, die Spiele-Engine des 2020 veröffentlichten Doom Eternal, exklusiv Vulkan.[25] Für weitere Spiele, wie beispielsweise Star Citizen,[26] ist eine Unterstützung oder der Wechsel angekündigt.

Auch weit verbreitete Engines bieten inzwischen Vulkan Support an: Die Spiel-Engine Unity bietet ab der Version 5.6 seit April 2017 Unterstützung für Vulkan[27], die Unreal Engine 4 bietet Vulkan-Support für Android-Anwendungen[28] und die Spiel-Engine Godot wird ab Version 4.0 Vulkan unterstützen.[29]

Literatur

Einzelnachweise

  1. a b Khronos Group: Spezifikationen des Low-Level-API Vulkan veröffentlichtGolem, am 16. Februar 2016.
  2. Gaming: One of Mantle's Futures: Vulkan (englisch) – AMD-Community, am 12. Mai 2015.
  3. Interview mit Neil Trevett (Memento vom 9. Juli 2015 im Internet Archive) (englisch) – Seekscale, am 3. Juli 2015.
  4. Liam Hinzman: Fundamentals of the Vulkan Graphics API: Why Rendering a Triangle is Complicated | Liam Hinzman. 21. Juli 2020, abgerufen am 24. Oktober 2020.
  5. Rendering a Triangle using OpenGL(using Shaders). In: GeeksforGeeks. 21. November 2017, abgerufen am 24. Oktober 2020 (amerikanisches Englisch).
  6. An Introduction to SPIR-V: A Khronos-Defined Intermediate Language for Native Representation of Graphical Shaders and Compute Kernels (englisch; PDF, ≈ 225 KB) – Khronos Group, 2015
  7. GLAVE: A Debug Tool For The New Vulkan Graphics API (englisch) – Phoronix, am 5. März 2015.
  8. Khronos Releases Vulkan 1.0 Specification (englisch) – Khronos Group, am 16. Februar 2016.
  9. 3D-Schnittstelle Vulkan: Linux-Grafiktreiber von Intel und Unterstützung in WaylandHeise, am 17. Februar 2016.
  10. Khronos Strengthens Vulkan Ecosystem with Release of Vulkan 1.3, Public Roadmap and Profiles. 25. Januar 2022, abgerufen am 4. März 2022 (englisch).
  11. Vulkan® 1.3.206 - A Specification (with all registered Vulkan extensions). Abgerufen am 4. März 2022.
  12. Vulkan 1.3 Specification Released. In: GameFromScratch.com. 25. Januar 2022, abgerufen am 4. März 2022 (amerikanisches Englisch).
  13. Breaking: OpenCL Merging Roadmap into Vulkan | PC Perspective. 1. November 2017, abgerufen am 4. März 2022.
  14. SIGGRAPH 2018: OpenCL-Next Taking Shape, Vulkan Continues Evolving. Abgerufen am 4. März 2022 (englisch).
  15. Vulkan Driver Support. 10. Februar 2016, abgerufen am 29. Oktober 2021 (englisch).
  16. Intel releases Vulkan 1.2 drivers. In: News Links. Khronos Group, 24. Januar 2020, abgerufen am 30. Oktober 2021 (englisch): „Intel has published a new graphics driver for its GPUs (Intel 6th, 7th, 8th, 9th and 10th Gen processors) on Windows 10. This new driver (version 26.20.100.7755) comes Vulkan 1.2 support.“
  17. The Khronos Group. 17. Juni 2021, abgerufen am 17. Juni 2021 (englisch).
  18. Eben Upton: Vulkan update: we’re conformant! Raspberry Pi Foundation, 24. November 2020, abgerufen am 24. November 2020 (britisches Englisch).
  19. Eben Upton: Vulkan update: version 1.2 conformance for Raspberry Pi 4. Raspberry Pi Foundation, 1. August 2022, abgerufen am 9. August 2022 (britisches Englisch).
  20. The Talos Principle BETA support for Vulkan is live
  21. Daniel Williams, Ryan Smith: Quick Look: Vulkan Performance on The Talos Principle. In: anandtech. 17. Februar 2016.
  22. Kostenlose Source-2-Engine bietet Vulkan-UnterstützungGolem, am 4. März 2015.
  23. Neuigkeiten – Alle News. Abgerufen am 5. April 2017.
  24. Marc Sauter: Doom: Vulkan macht die Hölle schneller. In: golem.de. 12. Juli 2016.
  25. Vulkan und die Technik hinter Doom Eternal - Interview mit Lead Engine Programmer Billy Khan. 28. Oktober 2020, abgerufen am 27. November 2020.
  26. heise online: Mega-Projekt Star Citizen: Wechsel auf Vulkan könnte zu weiteren Verschiebungen führen. Abgerufen am 5. April 2017.
  27. Peter Steinlechner: Unity: Entwicklung der Engine Unity 5 ist abgeschlossen. In: golem.de. 3. April 2017.
  28. Android Vulkan Mobile Renderer. Abgerufen am 4. März 2022 (amerikanisches Englisch).
  29. Godot Engine: Godot Engine - About Godot 4, Vulkan, GLES3 and GLES2. Abgerufen am 4. März 2022 (englisch).