Einfangen des WebGPU-Ökosystems

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

WebGPU wird oft als Webgrafik-API empfunden, die einheitlichen und schnellen Zugriff auf GPUs gewährt, indem sie hochmoderne Hardwarefunktionen bereitstellt und Rendering- und Rechenvorgänge auf einer GPU ermöglicht, ähnlich wie bei Direct3D 12, Metal und Vulkan.

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

Die aktuelle Umgebung entdecken

Die Journey beginnt mit der JavaScript-Spezifikation, einer Zusammenarbeit, an der zahlreiche Unternehmen wie Apple, Google, Intel, Mozilla und Microsoft beteiligt sind. Derzeit ist die WebGPU bei allen gängigen Webbrowsern implementiert oder wird gerade implementiert.

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

In Chrome entstand dadurch Dawn, eine C/C++-Bibliothek, die WebGPU-Aufrufe in GPU-Treiberbefehle übersetzt. Dawn ermöglicht es C- und C++-Anwendungen, WebGPU nativ zu nutzen, und bietet eine portable und ergonomische GPU-Abstraktion mithilfe der Expertenkenntnisse des Browsers.

Wie im Blogpost WebGPU: the Cross-platform Graphics API of future demonstriert, 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 geringfügige Änderungen erforderlich.

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

Ein ähnliches System existiert für Rust mit wgpu, der WebGPU-Implementierung von Firefox. Wgpu kann direkt in Rust-Anwendungen integriert und dann mithilfe von web-sys ins Web übertragen werden. Darüber hinaus 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 im folgenden Diagramm dargestellt.

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

Neue Horizonte

Das WebGPU-Ökosystem geht über die JavaScript-, C++- und Rust-Bereiche hinaus.

Ihre bevorzugte Programmiersprache hat möglicherweise bereits Bindungen für WebGPU, da Entwickler, die an WebGPU-Implementierungen arbeiten, ebenfalls einen gemeinsamen C-Header für WebGPU entwickeln. Dies kann für das Targeting von Dawn, WGpu und anderen verwendet werden, wodurch das Erstellen von Bindungen für Sprachen mit C FFI vereinfacht wird.

Außerdem erwägt das Chrome-Team, Dawn als Standard-Rendering-Back-End für alle UI-Elemente des Browsers zu verwenden, einschließlich Menüs, Symbolleisten, Entwicklertools und Webinhalte. Dadurch entfallen separate Rendering-Implementierungen für jede native API, was den Entwicklungsprozess vereinfacht. Diese Funktion befindet sich unter macOS und Windows in der experimentellen Phase hinter dem Flag chrome://flags/#skia-graphite.

Danksagungen

Hero-Image von Daniel Öberg auf Unsplash