Das Khronos-Konsortium, das für die Entwicklung grafischer Standards verantwortlich ist,
die Spezifikation , die die API für den Zugriff auf die grafischen und rechnerischen Möglichkeiten von GPUs bestimmt. Die neue Spezifikation umfasst die in den letzten zwei Jahren gesammelten Korrekturen und . Treiber, die die neue Vulkan-Version unterstützen, sind bereits von Intel, , ARM, Imagination Technologies und . In Mesa wird Vulkan 1.2 für die Treiber (AMD-Karten) und (Intel) unterstützt. Die Unterstützung von Vulkan 1.2 ist ebenfalls im Debugger , und im Beispielset .
Haupt :
- HLSL DXC
, der 2017 von Microsoft veröffentlicht wurde und auf LLVM-Technologie basiert, zu verwenden. Die Vulkan-Unterstützung wird über ein separates Backend realisiert, das die Übersetzung von HLSL in das Zwischenformat SPIR-V ermöglicht. Die Implementierung umfasst nicht nur alle eingebauten Funktionen
HLSL, einschließlich mathematischer Typen, Kontrollflüsse, Funktionen, Mengen, Ressourcentypen, Namensräume, Shader Model 6.2, Strukturen und Methoden, und ermöglicht die Verwendung von Vulkan-spezifischen Erweiterungen wie VKRay von NVIDIA. Im HLSL-Modus über Vulkan konnten Spiele wie Destiny 2, Red Dead Redemption II, Assassin’s Creed Odyssey und Tomb Raider problemlos betrieben werden. - Spezifikation aktualisiert , die eine plattformübergreifende universelle Zwischenrepräsentation von Shaders definiert, die sowohl für Grafik- als auch für Parallelverarbeitungsanwendungen verwendet werden kann.
SPIR-V sieht eine separate Phase der Shader-Kompilation in eine Zwischenrepräsentation vor, die es ermöglicht, Frontends für verschiedene Hochsprache zu erstellen. Basierend auf verschiedenen Hochsprachen-Implementierungen wird ein einheitlicher Zwischenkode generiert, der von OpenGL-, Vulkan- und OpenCL-Treibern ohne Verwendung eines integrierten Shader-Compilers genutzt werden kann.
- Die Vulkan-API enthält 23 Erweiterungen, die die Leistung steigern, die visuelle Qualität verbessern und die Entwicklung vereinfachen. Zu den hinzugefügten Erweiterungen gehören:
- (Timeline-Semaphor), die die Synchronisation mit dem Host und den Gerätewarteschlangen vereinheitlichen (ermöglichen eine einzige Primitivnutzung für die bidirektionale Synchronisierung zwischen Gerät und Host, ohne separate Primitiven wie VkFence und VkSemaphore nutzen zu müssen). Neue Semaphore werden als monoton ansteigender 64-Bit-Wert dargestellt, der in mehreren Threads verfolgt und aktualisiert werden kann.

- Die Verwendung von numerischen Datentypen mit reduzierter Genauigkeit in Shadern ist möglich;
- Kompatible Speicheranordnung mit HLSL;
- Ungebundene Ressourcen (bindless), die die Anzahl der für Shader verfügbaren Ressourcen durch die Nutzung eines gemeinsamen virtuellen Adressraums im Systemspeicher und im GPU-Speicher aufheben;
- , das definiert, wie parallel ausgeführte Threads auf gemeinsame Daten und Synchronisationsoperationen zugreifen können;
- zur Wiederverwendung von Layoutdeskriptoren in mehreren Shadern;
- Pufferverweise.
Vollständige Liste der hinzugefügten Erweiterungen:
- (Timeline-Semaphor), die die Synchronisation mit dem Host und den Gerätewarteschlangen vereinheitlichen (ermöglichen eine einzige Primitivnutzung für die bidirektionale Synchronisierung zwischen Gerät und Host, ohne separate Primitiven wie VkFence und VkSemaphore nutzen zu müssen). Neue Semaphore werden als monoton ansteigender 64-Bit-Wert dargestellt, der in mehreren Threads verfolgt und aktualisiert werden kann.
- mehr als 50 neue Strukturen und 13 Funktionen;
- Es wurden vereinfachte Versionsspezifikationen für typische Zielplattformen vorbereitet, die die Arbeit auf Plattformen erleichtern, für die noch nicht alle Erweiterungen unterstützt werden, und ermöglichen, auf eine selektive Aktivierung der grundlegenden Vulkan-API-Funktionen zu verzichten.
- Die Arbeit an dem Projekt, das die Portierbarkeit mit anderen Grafik-APIs gewährleisten soll, wurde fortgesetzt. Beispielsweise wurden in Vulkan Erweiterungen vorgeschlagen, die die Übersetzung von OpenGL (), OpenCL (, ), OpenGL ES (GLOVE, Angle) und DirectX (, ) über die Vulkan-API ermöglichen und umgekehrt sicherstellen, dass Vulkan auf Plattformen ohne native Unterstützung funktioniert ( und für den Betrieb über OpenGL und DirectX, und gfx-rs für den Betrieb über Metal).
Um die Kompatibilität mit DirectX und HLSL zu verbessern, wurden Erweiterungen hinzugefügt:
VK_KHR_host_query_reset, VK_KHR_uniform_buffer_standard_layout, VK_EXT_scalar_block_layout, VK_KHR_separate_stencil_usage, VK_KHR_separate_depth_stencil_layouts sowie spezifische HLSL-Funktionen wurden in SPIR-V implementiert.
Für die Zukunft sind Erweiterungen für maschinelles Lernen, Raytracing, Video-Encoding und -Decoding, Unterstützung von VRS (Variable-Rate Shading) und Mesh-Shader geplant.
Wir erinnern daran, dass die Vulkan-API Die grundlegende Vereinfachung von Treibern, die Auslagerung der GPU-Befehlsgenerierung in die Anwendung, die Möglichkeit zur Anbindung von Debugging-Schichten, die Vereinheitlichung der APIs für verschiedene Plattformen und die Verwendung von vorcompilierten Zwischenrepräsentationen des Codes zur Ausführung auf der GPU. Um eine hohe Leistung und Vorhersagbarkeit zu gewährleisten, bietet Vulkan Anwendungen die Möglichkeit, direkt auf die GPU-Betriebsabläufe zuzugreifen und unterstützt die Multithread-Bearbeitung von GPU-Befehlen, was die durch den Treiber verursachten Overheads minimiert. Die im Treiber umgesetzten Funktionen werden deutlich vereinfacht und vorhersagbarer. Zum Beispiel werden Operationen wie Speichermanagement und Fehlerbehandlung, die in OpenGL auf Treiberseite implementiert sind, in Vulkan auf Anwendungsebene verlagert.
Vulkan umfasst alle verfügbaren Plattformen und bietet eine einheitliche API für Desktop-, mobile und Web-Systeme, sodass ein gemeinsames API für verschiedene Grafikkarten und Anwendungsbereiche genutzt werden kann. Dank der mehrschichtigen Architektur von Vulkan, die die Entwicklung von Werkzeugen ermöglicht, die mit beliebigen GPUs arbeiten, können Hardwarehersteller standardisierte Tools zur Überprüfung von Code, Debugging und Profiling nutzen. Für die Erstellung von Shadern wird eine neue portable Zwischendarstellung namens SPIR-V angeboten, die auf LLVM basiert und gemeinsame Grundtechnologien mit OpenCL nutzt. Zur Verwaltung von Geräten und Bildschirmen bietet Vulkan das WSI (Window System Integration)-Interface, das ähnliche Aufgaben wie EGL in OpenGL ES erfüllt. Die Unterstützung von WSI ist von Haus aus in Wayland verfügbar – alle Anwendungen, die Vulkan nutzen, können in einer Umgebung mit unveränderten Wayland-Servern ausgeführt werden. Eine WSI-Unterstützung ist ebenfalls für Android, X11 (mit DRI3), Windows, Tizen, macOS und iOS vorhanden.
Quelle: opennet.ru


