Vulkan (API) - Vulkan (API)

Vulkan
Vulkan logo.svg
Originalautor(en) AMD , DICE (ursprüngliches Mantle- Design)
Entwickler Khronos Group (gespendete und abgeleitete Variante, als Vulkan)
Erstveröffentlichung 16. Februar 2016 ; vor 5 Jahren ( 2016-02-16 )
Stabile Version 1.2.195 (5. Oktober 2021 ; vor 7 Tagen ) [±] ( 2021-10-05 )
Repository
Geschrieben in C
Betriebssystem Android , Linux , Fuchsia , BSD Unix , QNX , Windows , Nintendo Switch , Stadia , Tizen , macOS , IOS , Raspberry Pi
Typ 3D-Grafik und Berechnungs- API
Lizenz Apache-Lizenz 2.0
Webseite vulkan .org

Vulkan ist eine plattformübergreifende API mit geringem Overhead , ein offener Standard für 3D-Grafik und Computing . Vulkan zielt auf leistungsstarke Echtzeit-3D-Grafikanwendungen wie Videospiele und interaktive Medien ab . Im Vergleich zu OpenGL , Direct3D 11 und Metal soll Vulkan eine höhere Leistung und eine ausgewogenere CPU- und GPU- Auslastung bieten und bietet eine deutlich niedrigere API und paralleles Tasking für die Anwendung. Zusätzlich zu seiner geringeren CPU-Auslastung wurde Vulkan entwickelt, um Entwicklern eine bessere Verteilung der Arbeit auf mehrere CPU-Kerne zu ermöglichen .

Vulkan wurde erstmals von der gemeinnützigen Khronos Group auf der GDC 2015 angekündigt . Die Vulkan API wurde ursprünglich von Khronos als "Next Generation OpenGL Initiative" oder "OpenGL next" bezeichnet, aber die Verwendung dieser Namen wurde eingestellt, als Vulkan angekündigt wurde .

Vulkan ist abgeleitet von und auf Komponenten von integrierten AMD ‚s Mantle API, die von AMD zu Khronos mit der Absicht des Gebens Khronos ein Fundament , auf dem ein Low-Level - API beginnen gespendet entwickeln , dass sie in der gesamten Branche standardisieren konnten.

Vulkan ist nicht abwärtskompatibel mit OpenGL.

Merkmale

OpenGL und Vulkan sind beide Rendering-APIs. In beiden Fällen führt die GPU Shader aus , während die CPU alles andere ausführt.

Vulkan soll gegenüber anderen APIs sowie seinem Vorgänger OpenGL eine Vielzahl von Vorteilen bieten . Vulkan bietet einen geringeren Overhead, eine direktere Kontrolle über die GPU und eine geringere CPU-Auslastung. Das Gesamtkonzept und der Funktionsumfang von Vulkan ähnelt Mantle, das später von Microsoft mit Direct3D 12 und Apple mit Metal übernommen wurde.

Zu den beabsichtigten Vorteilen von Vulkan gegenüber APIs der vorherigen Generation gehören die folgenden.

Einheitliche API

Eine einzige API für Desktop- und mobile Grafikgeräte, während diese zuvor auf OpenGL bzw. OpenGL ES aufgeteilt waren.

Plattformübergreifend

Verfügbarkeit auf mehreren modernen Betriebssystemen im Gegensatz zu Direct3D 12; Wie OpenGL ist die Vulkan-API nicht an ein einzelnes Betriebssystem oder einen Geräteformfaktor gebunden. Ab der Veröffentlichung läuft Vulkan auf Android , Linux , BSD Unix , QNX , Nintendo Switch , Raspberry Pi , Stadia , Fuchsia , Tizen , Windows 7 , Windows 8 und Windows 10 ( MoltenVK bietet frei lizenzierte Drittanbieter-Unterstützung für iOS und macOS basierend auf Metal)

Niedrigere CPU Nutzung

Reduzierter Treiber-Overhead, weniger CPU-Auslastung.

Reduzierte Belastung der CPUs durch die Verwendung von Batching , sodass die CPU mehr Rechen- oder Rendervorgänge ausführen kann als sonst.

Multithread-freundlich

Bessere Skalierung auf Multi-Core-CPUs. Direct3D 11 und OpenGL 4 wurden ursprünglich für die Verwendung mit Single-Core-CPUs entwickelt und nur für die Ausführung auf Multi-Core-Prozessoren erweitert. Selbst wenn Anwendungsentwickler die Erweiterungen verwenden, skaliert die API regelmäßig nicht gut auf Multicores.

Vorkompilierte Shader

OpenGL verwendet die Hochsprache GLSL zum Schreiben von Shadern , die jeden OpenGL-Treiber dazu zwingt, seinen eigenen Compiler für GLSL zu implementieren . Dies wird dann zur Laufzeit der Anwendung ausgeführt, um die Shader des Programms in den Maschinencode der GPU zu übersetzen. Im Gegensatz zu Vulkan sollen Treiber Shader aufnehmen, die bereits in ein intermediäres Binärformat namens SPIR-V (Standard Portable Intermediate Representation) übersetzt wurden, analog zum Binärformat, in das HLSL- Shader in Direct3D kompiliert werden . Durch Zulassen der Shader-Vorkompilierung wird die Anwendungsinitialisierungsgeschwindigkeit verbessert und eine größere Vielfalt von Shadern kann pro Szene verwendet werden. Ein Vulkan-Treiber muss nur GPU-spezifische Optimierung und Codegenerierung durchführen, was zu einer einfacheren Treiberwartung und schließlich zu kleineren Treiberpaketen führt (derzeit müssen GPU-Anbieter noch OpenGL/CL enthalten). Die Entwickler von Anwendungen können nun proprietären Shader-Code verbergen.

Andere

  • Einheitliche Verwaltung von Rechenkernen und grafischen Shadern , wodurch die Verwendung einer separaten Rechen-API in Verbindung mit einer Grafik-API entfällt.
  • Raytracing über die VK_KHR_ray_tracing-Erweiterung

OpenGL vs Vulkan

OpenGL Vulkan
Eine einzige globale Zustandsmaschine Objektbasiert ohne globalen Status
Staat ist an einen einzigen Kontext gebunden Alle Zustandskonzepte sind in einem Befehlspuffer lokalisiert
Operationen können nur sequentiell ausgeführt werden Multithread-Programmierung ist möglich
GPU-Speicher und Synchronisierung sind normalerweise versteckt Explizite Kontrolle über Speicherverwaltung und Synchronisation
Umfangreiche Fehlerprüfung Vulkan-Treiber führen zur Laufzeit keine Fehlerprüfung durch;
es gibt eine Validierungsschicht für Entwickler

NVIDIA stellt fest, dass "OpenGL für viele Anwendungsfälle immer noch eine großartige Option ist, da es eine viel geringere Komplexität und einen viel geringeren Wartungsaufwand als Vulkan aufweist, während es in vielen Fällen immer noch eine hervorragende Gesamtleistung bietet."

AMD behauptet: „Vulkan unterstützt eine metallene Steuerung, die eine schnellere Leistung und eine bessere Bildqualität unter Windows 7, Windows 8.1, Windows 10 und Linux ermöglicht. Keine andere Grafik-API bietet die gleiche leistungsstarke Kombination aus Betriebssystemkompatibilität, Rendering-Funktionen, und Hardware-Effizienz."

Versionen

Vulkan 1.1

Auf der SIGGRAPH 2016 kündigte Khronos an, dass Vulkan automatische Multi-GPU-Funktionen ähnlich wie Direct3D 12 unterstützen wird. Die in der API enthaltene Multi-GPU-Unterstützung macht SLI oder Crossfire überflüssig, was Grafikkarten erfordert das gleiche Modell. API-Multi-GPU ermöglicht es der API stattdessen, die Arbeitslast intelligent auf zwei oder mehr völlig unterschiedliche GPUs aufzuteilen. Beispielsweise können integrierte GPUs, die in der CPU enthalten sind, in Verbindung mit einer dedizierten High-End-GPU für einen leichten Leistungsschub verwendet werden.

Am 7. März 2018 wurde Vulkan 1.1 von der Khronos Group veröffentlicht. Dieses erste große Update der API standardisierte mehrere Erweiterungen, wie Multi-View, Gerätegruppen, prozess- und API-übergreifende Freigabe, erweiterte Rechenfunktionen, HLSL-Unterstützung und YCbCr-Unterstützung. Gleichzeitig brachte es auch eine bessere Kompatibilität mit DirectX 12, explizite Multi-GPU-Unterstützung, Raytracing- Unterstützung und legte den Grundstein für die nächste GPU-Generation. Neben Vulkan 1.1 wurde SPIR-V auf Version 1.3 aktualisiert.

Vulkan 1.2

Am 15. Januar 2020 wurde Vulkan 1.2 von der Khronos Group veröffentlicht. Dieses zweite große Update der API integriert 23 weitere häufig verwendete, bewährte Vulkan-Erweiterungen in den Basis-Vulkan-Standard. Einige der wichtigsten Features sind „Timeline-Semaphoren für eine einfach zu verwaltende Synchronisation“, „ein formales Speichermodell zur präzisen Definition der Semantik von Synchronisations- und Speicheroperationen in verschiedenen Threads“ und „Deskriptor-Indizierung, um die Wiederverwendung von Deskriptor-Layouts durch mehrere Shader zu ermöglichen“ . Die zusätzlichen Funktionen von Vulkan 1.2 verbessern seine Flexibilität bei der Implementierung anderer Grafik-APIs zusätzlich zu Vulkan, darunter "einheitliches Puffer-Standardlayout", "skalares Blocklayout" und "separate Schablonenverwendung".

Geplante Funktionen

Bei der Veröffentlichung von OpenCL 2.2 kündigte die Khronos Group an, dass OpenCL nach Möglichkeit mit Vulkan konvergieren wird, um die Flexibilität der OpenCL-Softwarebereitstellung über beide APIs zu ermöglichen. Dies wurde jetzt von Adobes Premiere Rush demonstriert, der den Open-Source-Compiler clspv verwendet, um erhebliche Mengen an OpenCL-C-Kernelcode zu kompilieren, um auf einer Vulkan-Laufzeit für die Bereitstellung auf Android ausgeführt zu werden.

Geschichte

Die Khronos Group startete im Juli 2014 mit einem Kickoff-Meeting bei Valve ein Projekt zur Entwicklung einer Grafik-API der nächsten Generation . Auf der SIGGRAPH 2014 wurde das Projekt mit einem Aufruf zur Teilnahme öffentlich bekannt gegeben.

Laut US-Patent- und Markenamt wurde die Marke für Vulkan am 19. Februar 2015 angemeldet.

Vulkan wurde auf der Game Developers Conference 2015 offiziell benannt und angekündigt , obwohl bereits zuvor Spekulationen und Gerüchte über eine neue API existierten und diese als " glNext " bezeichneten.

2015

Anfang 2015 entwickelte und präsentierte LunarG (finanziert von Valve ) einen Linux-Treiber für Intel, der die Vulkan-Kompatibilität mit der integrierten Grafik der HD 4000-Serie ermöglichte, obwohl die Open-Source-Mesa-Treiber erst später in diesem Jahr vollständig mit OpenGL 4.0 kompatibel waren. Es besteht weiterhin die Möglichkeit der Sandy Bridge-Unterstützung, da sie Computing über Direct3D11 unterstützt.

Am 10. August 2015 gab Google bekannt, dass zukünftige Android- Versionen Vulkan unterstützen werden. Android 7.x "Nougat" hat am 22. August 2016 die Unterstützung für Vulkan gestartet. Android 8.0 "Oreo" bietet volle Unterstützung.

Am 18. Dezember 2015 gab die Khronos Group bekannt, dass die Version 1.0 der Vulkan-Spezifikation fast fertig sei und veröffentlicht werde, sobald konforme Treiber verfügbar seien.

2016

Die Spezifikation und das Open-Source-Vulkan SDK wurden am 16. Februar 2016 veröffentlicht.

2018

Am 26. Februar 2018 gab die Khronos Group bekannt, dass die Vulkan-API für alle auf macOS und iOS über die MoltenVK- Bibliothek verfügbar ist , die es Vulkan ermöglicht, auf Metal zu laufen . Weitere neue Entwicklungen wurden gezeigt SIGGRAPH 2018. Zuvor MoltenVK eine proprietäre war und kommerziell lizenzierten Lösung, aber Ventil hat diese Anordnung mit Entwicklern Brenwill Workshop Ltd zu Open-Source - MoltenVK unter der Apache - 2.0 - Lizenz und als Ergebnis ist die Bibliothek jetzt auf GitHub . Valve gab außerdem bekannt, dass Dota 2 ab dem 26. Februar 2018 unter macOS mit der Vulkan-API laufen kann , die auf MoltenVK basiert.

2019

Am 25. Februar 2019 wurde die Vulkan Safety Critical (SC) Working Group angekündigt, um die Vulkan-GPU-Beschleunigung in sicherheitskritische Branchen zu bringen.

Der Streaming- Cloud-Gaming- Dienst Stadia von Google verwendet Vulkan auf Linux-basierten Servern mit AMD-GPUs .

2020

Am 15. Januar 2020 wurde Vulkan 1.2 veröffentlicht.

Neben der Veröffentlichung von Vulkan 1.2 veröffentlichte die Khronos Group einen Blog-Beitrag, in dem die HLSL-Unterstützung in Vulkan angesichts der Verbesserungen des DXC-Compilers von Microsoft und des glslang-Compilers von Khronos sowie der neuen Funktionen in Vulkan 1.2, die die HLSL-Unterstützung verbessern, den Status "produktionsbereit" erreicht hat .

Am 3. Februar 2020 gab die Raspberry Pi Foundation bekannt, dass sie an einem Open-Source-Vulkan-Treiber für ihren Raspberry Pi , einen beliebten Einplatinencomputer, arbeitet. Am 20. Juni 2020 gab ein Grafikingenieur bekannt, dass er nach zweijähriger Arbeit einen erstellt hatte, der VkQuake3 mit über 100 FPS auf dem kleinen Computer ausführen konnte.

Am 17. März 2020 hat die Khronos Group die Raytracing- Erweiterungen veröffentlicht, indem sie die zuvor vorhandene Nvidia- Implementierung mit einigen geringfügigen Änderungen übernommen hat. Am 23. November 2020 wurden diese Raytracing-Erweiterungen fertiggestellt.

Am 24. November 2020 gab die Raspberry Pi Foundation bekannt, dass ihr Treiber für den Raspberry Pi 4 Vulkan 1.0-konform ist.

Unterstützung über Anbieter hinweg

Screenshot von vulkaninfo, der Informationen zu unterstützten Vulkan-Instanzen anzeigt

Erste Spezifikationen besagten, dass Vulkan auf Hardware funktionieren wird, die derzeit OpenGL ES 3.1 oder OpenGL 4.x und höher unterstützt. Da Vulkan-Unterstützung neue Grafiktreiber erfordert, bedeutet dies nicht unbedingt, dass jedes vorhandene Gerät, das OpenGL ES 3.1 oder OpenGL 4.x unterstützt, über Vulkan-Treiber verfügt.

Intel, Nvidia und AMD

Alle drei großen PC-Hersteller stellen die Vulkan-API-Implementierungen in Form von Treibern für die Linux- und Windows-Systeme kostenlos zur Verfügung. Vulkan 1.1 wird von neueren Hardwarelinien wie Intel Skylake und höher, AMD GCN 2nd und höher sowie Nvidia Kepler und höher unterstützt. AMD, Arm, Imagination Technologies, Intel, Nvidia und Qualcomm unterstützen seit der zweiten Jahreshälfte 2018 aktuelle Hardware mit Vulkan 1.1-Treibern. Mesa 18.1 unterstützt mit RADV- und ANVIL-Treibern AMD- und Intel-Hardware. Ist-Zustand in Mesa 3D von RADV und ANVIL siehe Mesamatrix.

Google-Android

Die Hardware vieler Android-Geräte unterstützt die OpenGL ES-Spezifikation. Beispiele Android 7.0 Nougat (Vulkan 1.0). Android 9.0 Pie und Android 10 für Vulkan 1.1.

Apfel

Juni 2021 gibt es keine native Unterstützung für die Vulkan-API von Apple-Geräten. Unterstützung für iOS und macOS wurde von Apple nicht angekündigt. Es wird versucht, dieses Problem mit einer Open-Source-Bibliothek MoltenVK zu umgehen, die eine Vulkan-Implementierung zusätzlich zur Metal- Grafik-API auf iOS- und macOS-Geräten bietet . Es hat jedoch einige Einschränkungen.

Qualcomm

Adreno 5xx (2018) und 6xx Serien für mobile Qualcomm Snapdragon Plattformen (Snapdragon 820 etc.) GPUs unterstützen Vulkan 1.1 über sein Adreno GPU SDK. Das SDK basiert auf Android Studio IDE und Android NDK wird benötigt, um alle seine Funktionen nutzen zu können.

Siehe auch

Anmerkungen

Verweise

Weiterlesen

Externe Links