Het vastleggen van het WebGPU-ecosysteem

François Beaufort
François Beaufort

WebGPU wordt vaak gezien als een grafische web-API die uniforme en snelle toegang tot GPU's biedt door geavanceerde hardwaremogelijkheden bloot te leggen en weergave- en rekenbewerkingen op een GPU mogelijk te maken, analoog aan Direct3D 12, Metal en Vulkan.

WebGPU overstijgt echter de grenzen van louter een JavaScript-API; het is een fundamentele bouwsteen die lijkt op WebAssembly , met implicaties die dankzij het groeiende ecosysteem tot ver buiten het web reiken. Het Chrome-team erkent dat WebGPU meer is dan alleen webtechnologie; het is een bloeiend ecosysteem dat zich concentreert rond een kerntechnologie.

Het verkennen van het huidige ecosysteem

De reis begint met de JavaScript-specificatie , een gezamenlijke inspanning waarbij talloze organisaties zoals Apple, Google, Intel, Mozilla en Microsoft betrokken zijn. Alle grote webbrowsers hebben WebGPU geïmplementeerd of zijn bezig met de implementatie ervan.

Tegelijkertijd erkenden Mozilla en Google het potentieel van WebGPU in platformspecifieke applicaties en scheidden ze WebGPU-implementaties van browsers, waardoor zelfstandig gebruik mogelijk werd.

Voor Chrome kwam dit tot uiting in Dawn , een C/C++-bibliotheek die WebGPU-aanroepen vertaalt naar GPU-stuurprogrammaopdrachten. Dawn stelt C- en C++-applicaties in staat om WebGPU native te gebruiken, waardoor een draagbare en ergonomische GPU-abstractie wordt geboden met behulp van de expertise van browserleveranciers.

Zoals gedemonstreerd in de blogpost WebGPU: de platformonafhankelijke grafische API van morgen , is het porten van een platformspecifieke WebGPU-applicatie naar het web eenvoudig. Emscripten , de C++ WebAssembly-toolchain, ondersteunt al WebGPU, waardoor er slechts minimale aanpassingen nodig zijn om deze naar het web te porten.

U kunt uw JavaScript WebGPU-code ook buiten de browser uitvoeren met de Node.js JavaScript-runtime, aangezien deze een WebGPU-module bevat die is gebaseerd op Dawn . Hiermee kunt u uw code zonder wijzigingen op de server of in andere platformspecifieke contexten uitvoeren.

Een soortgelijk ecosysteem bestaat voor Rust met wgpu , Firefox's implementatie van WebGPU. Wgpu kan rechtstreeks worden geïntegreerd in Rust-applicaties, die vervolgens met behulp van web-sys naar het web kunnen worden geport. Bovendien ondersteunt de Deno JavaScript-runtime WebGPU via wgpu. Zie wgpu-alliantie met Deno -blogpost.

Hierdoor ontstaat een parallel ecosysteem tussen Rust en C++, zoals weergegeven in het volgende diagram.

Diagram van het WebGPU-ecosysteem in 2023.
WebGPU-ecosysteem in 2023.

Opkomende horizonten

Het WebGPU-ecosysteem reikt verder dan de domeinen JavaScript, C++ en Rust.

De programmeertaal van uw voorkeur heeft mogelijk al bindingen voor WebGPU, aangezien technici die aan WebGPU-implementaties werken ook een gemeenschappelijke C-header voor WebGPU ontwikkelen. Dit kan worden gebruikt om Dawn, wgpu en anderen te targeten, waardoor het maken van bindingen voor talen die C FFI gebruiken, wordt vergemakkelijkt.

Het Chrome-team overweegt ook om Dawn te gebruiken als de standaard rendering-backend voor alle browser-UI-elementen, inclusief menu's, werkbalken, ontwikkelaarstools en webinhoud. Dit zou de noodzaak van afzonderlijke rendering-implementaties voor elke native API elimineren, waardoor het ontwikkelingsproces wordt vereenvoudigd. Deze functie bevindt zich in de experimentele fase op macOS en Windows achter de vlag chrome://flags/#skia-graphite .