Nach fast drei Jahren Arbeit hat das Konsortium Khronos, das sich mit der Entwicklung grafischer Standards beschäftigt, die Spezifikation Vulkan 1.4 veröffentlicht, die eine API für den Zugriff auf die grafischen und rechnerischen Fähigkeiten von GPUs definiert. Die neue Spezifikation umfasst die angehäuften Erweiterungen, die zuvor als optional eingestuft 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, die Vulkan 1.4 unterstützen, werden von den Unternehmen AMD, Arm, Imagination, Intel, NVIDIA, Qualcomm und Samsung vorbereitet. Die offenen Treiber für AMD GPUs (radv), Apple M1/M2 (honeykrisp), Intel (anv), NVIDIA (nvk) und Qualcomm (tu), die im Rahmen des Mesa-Projekts entwickelt werden, haben bereits alle Kompatibilitätstests mit Vulkan 1.4 aus dem CTS (Khronos Conformance Test Suite) bestanden und sind in die Liste der zertifizierten Treiber aufgenommen worden. Zu der Liste gehören auch die Treiber von Samsung und Qualcomm für die Android-Plattform sowie die Treiber für die GPU PowerVR D-Series DXT* von Imagination Technologies und proprietäre Treiber von NVIDIA.
Hauptneuerungen:
- Es wurde Unterstützung für den Mechanismus "Streaming Transfers" hinzugefügt, der für die Übertragung großer Datenmengen zwischen dem Hauptsystem (Host) und dem grafischen Gerät gedacht ist, ohne dabei das Rendering zu unterbrechen oder dessen Leistung zu verringern. Der Mechanismus wird durch eine neue Erweiterung VK_EXT_host_image_copy umgesetzt, deren Unterstützung optional ist.
- Die auf die Leistungssteigerung abzielenden Funktionen wurden zu einer Pflicht gemacht:
- Push Descriptors – die Möglichkeit, Aktualisierungen von Deskriptoren direkt in den Befehls-Puffer zu schreiben, anstatt separate Deskriptorsätze zu erstellen und diese an den Befehls-Puffer zu binden.
- VK_KHR_dynamic_rendering_local_read – ermöglicht das Lesen aus eingebetteten Puffern (Attachments) und Ressourcen, die von vorhergehenden Fragment-Shadern geschrieben wurden, im Rahmen von dynamischen Rendering-Passes.
- 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 zur Vereinfachung des Ressourcen- und Shader-Managements bereitstellen.
- Die Unterstützung für Rendering mit einer Auflösung von 8K (7680 x 4320 Pixel) und bis zu 8 unabhängigen Rendering-Puffern ist garantiert.
- Im Lieferumfang sind folgende Erweiterungen enthalten:
- 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 als verpflichtend eingestuft.
- Eine große Anzahl neuer Befehle und Strukturen wurde hinzugefügt.
Die Vulkan-API zeichnet sich durch eine drastische Vereinfachung der Treiber aus, durch die Auslagerung der GPU-Befehlsgenerierung auf die Anwendung, die Möglichkeit, Debugging-Schichten einzubinden, die Vereinheitlichung der API für verschiedene Plattformen und die Verwendung eines vorcompilierten, zwischenliegenden Codes zur Ausführung auf der GPU.
Um hohe Leistung und Vorhersagbarkeit zu gewährleisten, bietet Vulkan den Anwendungen Mittel zur direkten Steuerung von GPU-Operationen und unterstützt die Mehrfachverarbeitung von GPU-Befehlen, was die vom Treiber verursachten Overheads minimiert und die vom Treiber umgesetzten Funktionen erheblich vereinfacht und vorhersagbarer macht. Beispielsweise werden im OpenGL auf der Treiberebene realisierte Operationen wie Speicherverwaltung und Fehlerbehandlung in Vulkan auf Anwendungsebene verschoben.
Vulkan deckt alle verfügbaren Plattformen ab und bietet eine einheitliche API für Desktop-, mobile Systeme und Web, sodass eine gemeinsame API für verschiedene Grafikprozessoren und Anwendungsbereiche verwendet werden kann. Dank der mehrschichtigen Architektur von Vulkan, die die Entwicklung von Tools für alle GPUs ermöglicht, können Hardwarehersteller bei der Entwicklung Standardtools für Codeüberprüfung, Debugging und Profiling nutzen.
Zur Erstellung von Shadern wird eine tragbare Zwischenrepräsentation namens SPIR-V angeboten, die auf LLVM basiert und gemeinsame grundlegende Technologien mit OpenCL nutzt. Mit Vulkan kann auch die Shader-Sprache HLSL, die in DirectX verwendet wird, durch ihre Übersetzung in SPIR-V verwendet werden. Zur Verwaltung von Geräten und Bildschirmen bietet Vulkan die Schnittstelle WSI (Window System Integration), die ähnliche Aufgaben wie EGL in OpenGL ES löst. Die WSI-Unterstützung ist standardmäßig in Wayland verfügbar – alle Anwendungen, die Vulkan verwenden, können in einer Umgebung ohne Modifikationen gestartet werden. Server Wayland. Eine Unterstützung über WSI wird auch für Android, X11 (mit DRI3), Windows, Tizen, macOS und iOS bereitgestellt.
Quelle: opennet.ru
