Einfangen des WebGPU-Ökosystems

François Beaufort
François Beaufort
Corentin Wallez
Corentin Wallez

WebGPU wird oft als Webgrafik-API wahrgenommen, die einen einheitlichen und schnellen Zugriff auf GPUs ermöglicht, indem sie modernste Hardwarefunktionen bereitstellt und Rendering- und Berechnungsvorgänge auf einer GPU ermöglicht, ähnlich wie Direct3D 12, Metal und Vulkan.

WebGPU geht jedoch über die Grenzen einer reinen JavaScript API hinaus. Es ist ein grundlegender Baustein, ähnlich wie WebAssembly, mit Auswirkungen, die aufgrund des wachsenden Ökosystems weit über das Web hinausgehen. Das Chrome-Team betrachtet WebGPU als mehr als nur Webtechnologie. Es handelt sich um ein florierendes Ökosystem, das auf einer Kerntechnologie basiert.

Aktuelles Ökosystem untersuchen

Der Einstieg beginnt mit der JavaScript-Spezifikation, einer gemeinsamen Anstrengung zahlreicher Organisationen wie Apple, Google, Intel, Mozilla und Microsoft. Alle gängigen Webbrowser haben WebGPU implementiert oder sind dabei, dies zu tun.

Gleichzeitig haben Mozilla und Google das Potenzial von WebGPU in plattformspezifischen Anwendungen erkannt und WebGPU-Implementierungen von Browsern getrennt, um eine eigenständige Nutzung zu ermöglichen.

Für Chrome wurde daraus Dawn, eine C/C++-Bibliothek, die WebGPU-Aufrufe in GPU-Treiberbefehle umwandelt. Mit Dawn können C- und C++-Anwendungen WebGPU nativ nutzen. So wird eine portable und ergonomische GPU-Abstraktion mithilfe der Expertise von Browseranbietern bereitgestellt.

Wie im Blogpost WebGPU: die plattformübergreifende Grafik-API von morgen gezeigt, ist die Portierung einer plattformspezifischen WebGPU-Anwendung in das Web ganz einfach. Emscripten, die C++-WebAssembly-Toolchain, unterstützt bereits WebGPU. Für die Portierung ins Web sind nur minimale Änderungen erforderlich.

Sie können Ihren JavaScript-WebGPU-Code mit der Node.js-JavaScript-Laufzeit auch außerhalb des Browsers ausführen, da sie ein auf Dawn basierendes WebGPU-Modul enthält. So können Sie Ihren Code serverseitig oder in anderen plattformspezifischen Kontexten ohne Änderungen ausführen.

Für Rust gibt es ein ähnliches Ökosystem mit wgpu, der WebGPU-Implementierung von Firefox. Wgpu kann direkt in Rust-Anwendungen eingebunden werden, die dann mit web-sys ins Web übertragen werden können. Außerdem unterstützt die Deno-JavaScript-Laufzeit WebGPU über wgpu. Weitere Informationen finden Sie im Blogpost wgpu alliance with Deno.

Dadurch entsteht ein paralleles Ökosystem zwischen Rust und C++, wie das folgende Diagramm zeigt.

Diagramm des WebGPU-Ökosystems im Jahr 2023
WebGPU-System 2023

Aufstrebende Unternehmen

Das WebGPU-Ökosystem umfasst nicht nur JavaScript, C++ und Rust.

Für Ihre bevorzugte Programmiersprache gibt es möglicherweise bereits Bindungen für WebGPU, da Entwickler, die an WebGPU-Implementierungen arbeiten, auch einen gemeinsamen C-Header für WebGPU entwickeln. So können Sie auf Dawn, wgpu und andere Ziele ausrichten, was das Erstellen von Bindungen für Sprachen mit C FFI erleichtert.

Das Chrome-Team erwägt auch, Dawn als Standard-Rendering-Backend für alle Browser-UI-Elemente zu verwenden, einschließlich Menüs, Symbolleisten, Entwicklertools und Webinhalte. Dadurch wären keine separaten Rendering-Implementierungen für jede native API erforderlich, was den Entwicklungsprozess vereinfacht. Diese Funktion befindet sich auf macOS und Windows in der experimentellen Phase und ist mit dem Flag chrome://flags/#skia-graphite gekennzeichnet.