Der Tanz auf dem Vulkan: Die Low-Level-API auf der GDC 2018
Die Vulkan-Schnittstelle für systemübergreifende Grafik-Anwendungen erfreut sich steigender Beliebtheit. Außerdem erschien diese Woche die Version 1.1 der API, die mit einem Trick jetzt auch auf Apple-Systemen läuft - und dabei OpenGL die Rücklichter zeigt. PC Games Hardware hat einem Vortrag der Khronos Group auf der GDC 2018 beigewohnt.
Auch wenn viele PC-Spieler beim Begriff Vulkan an den Heimatplaneten von Mr. Spock denken mögen: Hinter diesem Namen steckt eine offene Grafikschnittstelle, die als Quasi-Nachfolger von OpenGL bessere Leistung bei weniger Treiberüberbau liefern soll. Analog zu DirectX 12 handelt es sich um eine Low-Level-Schnittstelle. Auf der GDC 2018 in San Francisco gaben einige Vertreter der Khronos Group, die diesen und weitere Open-Source-Standards für Computergrafik, VR, Neurale Netzwerke und viele weitere betreut, einen Überblick über die Lage der Vulkan-Nation.
Alle lieben Vulkan
ARM-Mitarbeiter Tom Olson ist der Vorsitzende der Vulkan-Arbeitsgruppe. Er berichtete erfreut, dass es heute Vulkan-Treiber von allen wichtigen GPU-Herstellern gibt - sowohl für Desktop- als auch für Mobilgeräte. Windows, Linux und Android arbeiten mit der Schnittstelle tadellos zusammen, für Mac OS beziehungsweise iOS setzt Vulkan auf Apples Metal-Schnittstelle auf. Dazu gleich mehr.
"Alle großen Grafik-Engines setzen auf Vulkan", freut sich Tom Olson. "In einigen Engines ist Vulkan sogar der bevorzugte Renderpfad." Und die Inhalte rollen zwei Jahre nach der Vulkan-Premiere ebenfalls an: Olson nennt Doom (VFR), Rise of the Tomb Raider (im Linux-Port von Feral Interactive) und Wolfenstein 2 - Letzteres setzte beim Start ausschließlich auf die Vulkan-API. Das macht inzwischen auch Valves Dota 2, sowohl auf Windows- und Linux-PCs als auch auf Macs.
"Im August 2016 gab es auf Github gerade mal 431 Vulkan-Projekte, heute sind es 1.880", sagt Tom Olson. Und einer Auswertung des Grafik-Debuggers Renderdoc zufolge hat Vulkan als zweitplatzierte Schnittstelle mit 30 Prozent Marktanteil den Abstand zum Platzhirsch Direct3D 11 auf 20 Prozent verkleinern können. Mit Microsofts API entstehen derzeit noch rund 50 Prozent aller erfassten Renderdoc-Projekte.
Quelle: PC Games Hardware
Von links nach rechts: David Neto (Google), Tom Olson (ARM) und Dan Ginsburg (Valve) lauschen Fragen aus dem GDC-Publikum. Neben ihrem regulären Job kümmern die drei sich um die Verbreitung und Verbesserung der Vulkan-Schnittstelle.
Brandaktuell: Vulkan 1.1
Vor zwei Tagen erschien dann auch offiziell die aktuelle Vulkan-Version 1.1 - Treiber-Support aller großen Hersteller inklusive. Nach Tom Olsons Informationen arbeitet derzeit auch Samsung daran, die Schnittstelle für seine Smartphone-Flaggschiffe mit hauseigenen Exynos-SoCs startklar zu machen.
Zu den größten Änderungen der neuen Fassung gehören Multiview-Funktionen, die mehrere Bilder gleichzeitig rendern, etwa um VR-Brillen zu befeuern. Cross Process beziehungsweise API Sharing bezeichnet die Fähigkeit, Speicher und Daten mit anderen Nicht-Vulkan-Anwendungen zu teilen. Vulkan 1.1 unterstützt auch andere Compute-Programmiersprachen als GLSL, darunter eine erweiterte Unterstützung von Microsofts HLSL, womit DirectX-Portierungen vereinfacht werden. Hinzu kommen Multi-GPU-Systeme, ohne auf API-Erweiterungen zurückgreifen zu müssen..
Neben zahlreichen Bug-Bereinigungen schützt die neue Fassung der Schnittstelle mittels Content Protection auf Wunsch Inhalte vor dem Zugriff anderer Prozesse. Außerdem gibt es mehr Parallelberechnungsoptionen, etwa zum gleichzeitigen Aufruf mehrerer Shader, die untereinander kommunizieren können.
Tools, Tools, Tools
LunarGs Vulkan-SDK unterstützt die neueste Schnittstellenversion ebenfalls. Die Vulkan Layer Factory hilft bei der Entwicklung, indem sie die Programmierer nicht mit allen Details erschlägt, mit der Device Simulation Layer lassen sich auf schnellen Grafikkarten weniger flinke Kollegen simulieren, während die Assistent Layer Probleme bei der Entwicklung aufzeigt. Per E-Mail an public_vulkan_ecosystem@khronos.org können interessierte Programmierer der offiziellen Mailing-Liste beitreten.
David Neto von Google betreut die Arbeitsgruppe SPIR, die ebenfalls auf Vulkan 1.1 setzt. Hinter dieser Abkürzung verbirgt sich eine weitere Programmiersprache, die als Zwischencode zwischen Vulkan und der maschinennahen Zielsprache steht: Standard Portable Intermediate Representation - bei Vulkan kommt die neuere Version SPIR-V zum Einsatz. Ursprünglich wurde SPIR für OpenCL-Anwendungen entwickelt, heute hilft sie dabei, Informationen der Shader-Programmiersprachen GLSL und HLSL so umzusetzen, dass der daraus resultierende Programmcode von Vulkan verstanden wird - und den Entwicklern das Erstellen von systemübergreifenden Anwendungen erleichtern soll.
Vulkan: 50 Prozent schneller als OpenGL
Dan Ginsburg von Valve gab abschließend einen kurzen Überblick über den Vulkan-Einsatz bei seiner Firma. So setzt Valve bei der HTC Vive auf einen Vulkan-Renderer und beschreibt, wie die Schnittstelle trickreich sogar mit Apples eigener Metal-Schnittstelle zusammenarbeitet. Mit Hilfe der Molten-VK-Schnittstelle nutzt Vulkan Apples Metal-Standard, um die Hardware anzusprechen - SPIR-V-Code wird in die Metal Shader Language übersetzt. Allerdings sind nicht alle Vulkan-Funktionen verfügbar, sondern nur solche, die auch ein Metal-Äquivalent besitzen. Das sollten im Laufe der Zeit immer mehr werden, ist sich Dan Ginsburg sicher.
All diese Frickeleien lohnen sich: Valves MOBA Dota 2 verzeichnet mit Vulkan verglichen mit OpenGL einen Leistungszuwachs von 50 Prozent. Zukunftsmusik ist neben einer kompletten Vulkan-Umsetzung für Metal eine ähnliche Vorgehensweise für das noch eher zaghaft adaptierte Direct3D 12. "Je mehr API-Features die Entwickler Metal und DX 12 oder eines Tages 13 spendieren, umso mehr Features können wir auch in Vulkan nutzen", fasst Dan Ginsburg zusammen.
Die Programmierergemeinde dürfte das freuen - schließlich ist es immer besser, mehrere Schnittstellen zur Auswahl zu haben, um die optimale für das eigene Projekt zu finden, statt auf nur eine einzige kompromissbehaftete API setzen zu müssen. Und nicht nur für die Windows-Welt, sondern plattformübergreifend entwickeln zu können.

Linux hat wirtschaftlich keine Bedeutung, es gab keine Aussicht DX11 fallen zu lassen, entsprechend spricht auch W7/8-Support wenig für die neuen APIs, wenn man nicht auch schon deutlich von den neuen APIs profitieren kann und das benötigt große Engine Umstrukturierungen, wo am Anfang noch die wenigsten Studios waren.
Vulkan kam auch später, als DX12, unterstützte keine HLSL-Shader was ein großes No-Go für viele Projekte war und ebenso fehlte MultiGPU-Support, auch wenn das nur ein kleiner Nachteil ist.
Mit Vulkan 1.1 hat man die größten Show-Stopper beseitigt (Nicht alle) und es ist einiges an Zeit vergangen, in naher Zukunft könnte man eine höhere Adaptionsrate erwarten.
Einige Hinweise haben dann auf Nintendo gedeutet und so ist es dann auch am Ende, die Nintendo Switch unterstützt offiziell Vulkan und hat auch schon das neuste 1.1 Update integriert.