WebGPU

WebGPU ist eine Art Nachfolger von WebGL, einer viel älteren API, mit der OpenGL-basierte Grafiken in Ihrem Browser gerendert werden können, ohne dass zusätzliche Plugins von Drittanbietern wie Adobes Flash erforderlich sind. Obwohl WebGL bei seiner Ankündigung im Jahr 2009 revolutionär war, leidet es heute unter vielen der gleichen Probleme wie OpenGL: Es nutzt nicht alle Funktionen aktueller Grafikprozessoren, es kann aufgrund des Treiber-Overheads an Leistung verlieren, und es bietet nur begrenzte und unausgereifte Unterstützung für GPU-Rechenlasten.

"Während WebGL hauptsächlich zum Zeichnen von Bildern dient, aber (mit großem Aufwand) für andere Arten von Berechnungen umgewidmet werden kann, bietet WebGPU erstklassige Unterstützung für die Durchführung allgemeiner Berechnungen auf dem Grafikprozessor", heißt es in dem Dokumententwurf, in dem erklärt wird, warum WebGPU existiert. Die neue API wird verbesserte Grafiken in Frameworks wie Babylon.js und Spiele-Engines wie Unity ermöglichen; sie wird GPU-beschleunigte Arbeitslasten unterstützen, wie sie für maschinelles Lernen und KI verwendet werden; und sie kann es webbasierten Foto- und Videoanwendungen (unter anderem) erleichtern, die Art von GPU-Beschleunigung zu nutzen, von der native Anwendungen profitieren.

WebGPU wird von einer Arbeitsgruppe entwickelt, der Mitglieder von Google, Microsoft, Apple, Mozilla, Intel und vielen anderen Unternehmen angehören. Daher wurde die API so konzipiert, dass sie möglichst weitgehend kompatibel ist. WebGPU ist keine direkte Implementierung einer bestehenden Grafik-API, sondern vielmehr eine eigene API, die auf Direct3D 12, Metal und Vulkan aufsetzt und mit diesen zusammenarbeitet.

Während WebGL nur ein schlanker Wrapper um OpenGL ist, wählt WebGPU einen anderen Ansatz. Es führt seine eigenen Abstraktionen ein und spiegelt keine dieser nativen APIs direkt wider. Das liegt zum Teil daran, dass keine einzige API auf allen Systemen verfügbar ist, aber auch daran, dass viele Konzepte (wie z. B. die Speicherverwaltung auf extrem niedriger Ebene) für eine weborientierte API nicht idiomatisch sind. Stattdessen wurde WebGPU so konzipiert, dass es sich sowohl "webmäßig" anfühlt als auch bequem auf den nativen Grafik-APIs aufsetzt und deren Eigenheiten abstrahiert. Es wird auch im W3C standardisiert.

Dies hat den Vorteil, dass WebGPU-Code sehr portabel ist. Man schreibt WebGPU-Code, und solange die Benutzer über Hardware und einen Browser verfügen, der ihn unterstützt, sollte man auf einem Windows-System mit Direct3D und einem Android-Handy mit Vulkan das gleiche Ergebnis erzielen. Außerdem werden einige der Hacks vermieden, die WebGL am Laufen halten. So verwendet WebGL unter Windows und macOS nicht einmal direkt OpenGL, sondern einen Übersetzer namens ANGLE, der stattdessen OpenGL-API-Aufrufe in Direct3D- und Metal-API-Aufrufe umwandelt. Mit WebGPU ist es nicht mehr nötig, ein separates Projekt zu starten, um eine langsame oder schlecht gewartete OpenGL-Implementierung zu umgehen.

WebGPU verfügt auch über eine eigene Shader-Sprache (WGSL), an deren Unterstützung das Chrome-Team aktuell noch arbeitet. Wie der Rest der WebGPU-API soll auch WGSL plattformunabhängig sein und sich leicht in die bevorzugte Shader-Sprache des jeweiligen Betriebssystems übersetzen lassen, auf dem es ausgeführt wird.

Schließlich ist die WebGPU-API trotz des "Web" in ihrem Namen nicht auf Browser beschränkt. Das wgpu-Projekt ist eine Version von WebGPU für Rust, mit der WebGPU-Anwendungen außerhalb von Webbrowsern geschrieben und ausgeführt werden können.

Stand: 08.04.2023