Grafikstandard Vulkan 1.3 veröffentlicht

Nach zweijähriger Arbeit hat das Grafikstandardkonsortium Khronos die Spezifikation Vulkan 1.3 veröffentlicht, die eine API für den Zugriff auf die Grafik- und Rechenfunktionen von GPUs definiert. Die neue Spezifikation enthält Korrekturen und Erweiterungen, die über zwei Jahre hinweg gesammelt wurden. Es wird darauf hingewiesen, dass die Anforderungen der Vulkan 1.3-Spezifikation für Grafikgeräte der OpenGL ES 3.1-Klasse konzipiert sind, wodurch die Unterstützung der neuen Grafik-API in allen GPUs gewährleistet wird, die Vulkan 1.2 unterstützen. Die Veröffentlichung der Vulkan SDK-Tools ist für Mitte Februar geplant. Zusätzlich zur Hauptspezifikation ist geplant, zusätzliche Erweiterungen für mobile und Desktop-Geräte der Mittel- und Oberklasse anzubieten, die im Rahmen der „Vulkan Milestone“-Edition unterstützt werden.

Gleichzeitig wird ein Plan vorgestellt, die Unterstützung der neuen Spezifikation und zusätzlicher Erweiterungen in Grafikkarten und Gerätetreibern zu implementieren. Intel, AMD, ARM und NVIDIA bereiten die Veröffentlichung von Produkten vor, die Vulkan 1.3 unterstützen. Beispielsweise kündigte AMD an, Vulkan 1.3 bald in der AMD Radeon RX Vega-Grafikkartenserie sowie in allen Karten, die auf der AMD RDNA-Architektur basieren, zu unterstützen. NVIDIA bereitet die Veröffentlichung von Treibern mit Unterstützung für Vulkan 1.3 für Linux und Windows vor. ARM wird Mali-GPUs Unterstützung für Vulkan 1.3 hinzufügen.

Wichtigste Neuerungen:

  • Unterstützung für vereinfachte Rendering-Durchgänge (Streamlining Render Passes, VK_KHR_dynamic_rendering) wurde implementiert, sodass Sie mit dem Rendern beginnen können, ohne Rendering-Durchgänge und Framebuffer-Objekte zu erstellen.
  • Es wurden neue Erweiterungen hinzugefügt, um die Verwaltung der Kompilierung der Grafikpipeline zu vereinfachen (Pipeline, eine Reihe von Operationen, die Vektorgrafikprimitive und -texturen in Pixeldarstellungen umwandeln).
    • VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 – zusätzliche dynamische Zustände hinzufügen, um die Anzahl der kompilierten und angehängten Zustandsobjekte zu reduzieren.
    • VK_EXT_pipeline_creation_cache_control – Bietet erweiterte Kontrolle darüber, wann und wie Pipelines kompiliert werden.
    • VK_EXT_pipeline_creation_feedback – Stellt Informationen zu kompilierten Pipelines bereit, um die Profilerstellung und das Debuggen zu vereinfachen.
  • Eine Reihe von Funktionen wurden von optional auf obligatorisch übertragen. Beispielsweise ist die Implementierung von Pufferreferenzen (VK_KHR_buffer_device_address) und des Vulkan-Speichermodells, das definiert, wie gleichzeitige Threads auf gemeinsame Daten und Synchronisierungsvorgänge zugreifen können, jetzt obligatorisch.
  • Es wird eine differenzierte Untergruppensteuerung (VK_EXT_subgroup_size_control) bereitgestellt, damit Anbieter Unterstützung für mehrere Untergruppengrößen bereitstellen können und Entwickler die benötigte Größe auswählen können.
  • Es wurde die Erweiterung VK_KHR_shader_integer_dot_product bereitgestellt, mit der die Leistung von Frameworks für maschinelles Lernen dank Hardwarebeschleunigung von Punktproduktoperationen optimiert werden kann.
  • Insgesamt sind 23 neue Erweiterungen enthalten:
    • VK_KHR_copy_commands2
    • VK_KHR_dynamic_rendering
    • VK_KHR_format_feature_flags2
    • VK_KHR_maintenance4
    • VK_KHR_shader_integer_dot_product
    • VK_KHR_shader_non_semantic_info
    • VK_KHR_shader_terminate_invocation
    • VK_KHR_synchronization2
    • VK_KHR_zero_initialize_workgroup_memory
    • VK_EXT_4444_formats
    • VK_EXT_extended_dynamic_state
    • VK_EXT_extended_dynamic_state2
    • VK_EXT_image_robustness
    • VK_EXT_inline_uniform_block
    • VK_EXT_pipeline_creation_cache_control
    • VK_EXT_pipeline_creation_feedback
    • VK_EXT_private_data
    • VK_EXT_shader_demote_to_helper_invocation
    • VK_EXT_subgroup_size_control
    • VK_EXT_texel_buffer_alignment
    • VK_EXT_texture_compression_astc_hdr
    • VK_EXT_tooling_info
    • VK_EXT_ycbcr_2plane_444_formats
  • Neuer Objekttyp VkPrivateDataSlot hinzugefügt. 37 neue Kommandos und mehr als 60 Strukturen wurden implementiert.
  • Die SPIR-V 1.6-Spezifikation wurde aktualisiert, um eine Zwischen-Shader-Darstellung zu definieren, die für alle Plattformen universell ist und sowohl für Grafiken als auch für paralleles Rechnen verwendet werden kann. SPIR-V beinhaltet die Aufteilung einer separaten Shader-Kompilierungsphase in eine Zwischendarstellung, die es Ihnen ermöglicht, Frontends für verschiedene Hochsprachen zu erstellen. Basierend auf verschiedenen High-Level-Implementierungen wird ein einzelner Zwischencode separat generiert, der von OpenGL-, Vulkan- und OpenCL-Treibern verwendet werden kann, ohne den integrierten Shader-Compiler zu verwenden.
  • Das Konzept der Kompatibilitätsprofile wird vorgeschlagen. Google veröffentlicht als erstes Unternehmen ein Basisprofil für die Android-Plattform, das es einfacher macht, den Grad der Unterstützung für erweiterte Vulkan-Funktionen auf einem Gerät zu bestimmen, das über die Vulkan 1.0-Spezifikation hinausgeht. Für die meisten Geräte kann Profilunterstützung bereitgestellt werden, ohne dass OTA-Updates installiert werden müssen.

Erinnern wir uns daran, dass sich die Vulkan-API durch eine radikale Vereinfachung der Treiber, die Übertragung der Generierung von GPU-Befehlen auf die Anwendungsseite, die Möglichkeit zur Verbindung von Debugging-Ebenen, die Vereinheitlichung der API für verschiedene Plattformen und die Verwendung einer vorkompilierten Version auszeichnet Zwischendarstellung von Code zur Ausführung auf der GPU-Seite. Um eine hohe Leistung und Vorhersehbarkeit zu gewährleisten, bietet Vulkan Anwendungen eine direkte Kontrolle über GPU-Vorgänge und native Unterstützung für GPU-Multithreading, was den Treiber-Overhead minimiert und treiberseitige Funktionen viel einfacher und vorhersehbarer macht. Beispielsweise werden Vorgänge wie Speicherverwaltung und Fehlerbehandlung, die in OpenGL auf der Treiberseite implementiert sind, in Vulkan auf die Anwendungsebene verschoben.

Vulkan umfasst alle verfügbaren Plattformen und bietet eine einzige API für Desktop, Mobilgeräte und Web, sodass eine gemeinsame API für mehrere GPUs und Anwendungen verwendet werden kann. Dank der mehrschichtigen Architektur von Vulkan, das heißt Tools, die mit jeder GPU funktionieren, können OEMs branchenübliche Tools für Codeüberprüfung, Debugging und Profilerstellung während der Entwicklung verwenden. Für die Erstellung von Shader wird eine neue tragbare Zwischendarstellung, SPIR-V, vorgeschlagen, die auf LLVM basiert und Kerntechnologien mit OpenCL teilt. Zur Steuerung von Geräten und Bildschirmen bietet Vulkan die WSI-Schnittstelle (Window System Integration) an, die in etwa die gleichen Probleme löst wie EGL in OpenGL ES. WSI-Unterstützung ist in Wayland sofort verfügbar – alle Anwendungen, die Vulkan verwenden, können in einer Umgebung mit unveränderten Wayland-Servern ausgeführt werden. Die Möglichkeit, über WSI zu arbeiten, ist auch für Android, X11 (mit DRI3), Windows, Tizen, macOS und iOS gegeben.

Source: opennet.ru

Kommentar hinzufügen