Nach fast drei Jahren Arbeit hat das Konsortium Khronos, das für die Entwicklung grafischer Standards zuständig ist, die Spezifikation Vulkan 1.4 veröffentlicht. Diese definiert die API für den Zugang zu grafik- und rechenintensiven Funktionen von GPUs. Die neue Spezifikation fasst alle bisherigen Erweiterungen zusammen, die zuvor als optional betrachtet wurden, und bietet zudem eine Reihe neuer Funktionen sowie erhöhte Mindestanforderungen an die Hardware. Das Vulkan SDK wird voraussichtlich im Januar 2025 veröffentlicht.
Produkte mit Vulkan 1.4-Unterstützung werden von den Unternehmen AMD, Arm, Imagination, Intel, NVIDIA, Qualcomm und Samsung vorbereitet. Offene Treiber für die AMD-GPU (radv), Apple M1/M2 (honeykrisp), Intel (anv), NVIDIA (nvk) und Qualcomm (tu), die vom Mesa-Projekt entwickelt werden, haben bereits alle Kompatibilitätstests mit Vulkan 1.4 aus dem CTS (Khronos Conformance Test Suite) erfolgreich bestanden und sind in die Liste der zertifizierten Treiber aufgenommen. Auch die Treiber von Samsung und Qualcomm für die Android-Plattform sowie Treiber für die PowerVR D-Series DXT*-GPU von Imagination Technologies und proprietäre Treiber von NVIDIA sind enthalten.
Hauptneuerungen:
- Die Unterstützung des Mechanismus "Streaming Transfers" wurde hinzugefügt, der für die Übertragung großer Datenmengen zwischen dem Hauptsystem (Host) und dem Grafikgerät entwickelt wurde, ohne das Rendering zu unterbrechen oder die Leistung zu verlangsamen. Der Mechanismus wird durch die neue Erweiterung VK_EXT_host_image_copy realisiert, deren Unterstützung optional ist.
- Die Möglichkeiten, die auf die Leistungssteigerung abzielen, wurden zur Pflicht gemacht:
- Push Descriptors — die Möglichkeit, Aktualisierungen von Deskriptoren direkt in den Befehlspuffer zu schreiben, anstatt separate Deskriptormengen zu erstellen und sie an den Befehlspuffer zu binden.
- VK_KHR_dynamic_rendering_local_read — ermöglicht das Lesen aus eingebetteten Buffern (Attachments) und Ressourcen, die von vorhergehenden fragmentierenden Shadern geschrieben wurden, im Rahmen dynamischer Rendering-Pässe (Render Pass).
- VK_EXT_scalar_block_layout — ermöglicht die Verwendung einer C-ähnlichen Struktur für SPIR-V-Blöcke, in der nicht-skalare Typen basierend auf der Größe ihrer Komponenten ausgerichtet werden können.
- Die Erweiterungen VK_KHR_maintenance5 und VK_KHR_maintenance6 sind enthalten, die unterstützende Befehle und Strukturen bereitstellen, um die Verwaltung von Ressourcen und Shaders zu vereinfachen.
- Unterstützung für das Rendering mit einer Auflösung von 8K (7680 x 4320 Pixel) und die Verwendung von bis zu 8 unabhängigen Rendering-Puffern ist garantiert.
- Enthalten sind folgende Erweiterungen:
- VK_KHR_global_priority
- VK_KHR_index_type_uint8
- VK_KHR_line_rasterization
- VK_KHR_load_store_op_none
- VK_KHR_map_memory2
- VK_KHR_push_descriptor
- VK_KHR_shader_expect_assume
- VK_KHR_shader_float_controls2
- VK_KHR_shader_subgroup_rotate
- VK_KHR_vertex_attribute_divisor
- VK_EXT_pipeline_protected_access
- VK_EXT_pipeline_robustness
- Viele zuvor optionale Funktionen wurden zur Pflicht gemacht.
- Eine große Anzahl neuer Befehle und Strukturen wurde hinzugefügt.
Die Vulkan-API zeichnet sich durch eine grundlegende Vereinfachung der Treiber aus, indem die Generierung von GPU-Befehlen in die Anwendungsseite verlagert wird, das Anschließen von Debugging-Schichten ermöglicht wird, die API für verschiedene Plattformen einheitlich gestaltet wird und eine vorkompilierte Zwischenrepräsentation von Code für die Ausführung auf der GPU verwendet wird.
Um hohe Leistung und Vorhersehbarkeit zu gewährleisten, bietet Vulkan Anwendungen die Möglichkeit, direkt GPU-Operationen zu steuern und unterstützt die mehrfädige Verarbeitung von GPU-Befehlen, wodurch die vom Treiber verursachten Overheads minimiert werden. Die Funktionen, die auf der Treiberseite implementiert sind, werden dadurch merklich vereinfacht und vorhersagbarer. Beispielsweise werden solche Operationen wie Speicherverwaltung und Fehlerbehandlung, die in OpenGL auf der Treiberseite durchgeführt werden, in Vulkan auf die Anwendungsebene verlagert.
Vulkan deckt alle verfügbaren Plattformen ab und bietet eine einheitliche API für Desktop-, mobile Systeme und Web, sodass ein gemeinsamer API für verschiedene Grafikkarten und Anwendungsbereiche verwendet werden kann. Dank der mehrschichtigen Architektur von Vulkan, die die Erstellung von Werkzeugen ermöglicht, die mit beliebigen GPUs arbeiten, können Hardwarehersteller bei der Entwicklung Standardwerkzeuge zur Codeüberprüfung, Fehlersuche und Profilierung nutzen.
Für die Erstellung von Shadern wird ein tragbares Intermediate Representation SPIR-V angeboten, das auf LLVM basiert und grundlegende Technologien von OpenCL nutzt. Mit Vulkan kann auch die Shader-Sprache HLSL, die in DirectX verwendet wird, durch ihre Übersetzung in SPIR-V genutzt werden. Zur Steuerung von Geräten und Bildschirmen in Vulkan wird die WSI (Window System Integration) Schnittstelle angeboten, die ähnliche Aufgaben wie EGL in OpenGL ES erfüllt. WSI-Unterstützung ist standardmäßig in Wayland verfügbar – alle Anwendungen, die Vulkan nutzen, können in einer unveränderten Umgebung ausgeführt werden. Server Die Möglichkeit, über WSI zu arbeiten, wird auch für Android, X11 (mit DRI3), Windows, Tizen, macOS und iOS bereitgestellt.
Quelle: opennet.ru
