In Firefox-Builds UnterstĂŒtzung der Spezifikation , welche eine Programmierschnittstelle fĂŒr die Verarbeitung von 3D-Grafik und Berechnungen auf der GPU bereitstellt, die konzeptionell mit der API vergleichbar ist , und . Die Spezifikation wird von Mozilla, Google, Apple, Microsoft und Vertretern der Gemeinschaft in , die von der W3C-Organisation eingerichtet wurde.
vorangetrieben. Ein zentrales Ziel von WebGPU ist die Schaffung einer sicheren, benutzerfreundlichen, tragbaren und leistungsstarken Programmierschnittstelle zur Nutzung von Technologien und Möglichkeiten der 3D-Grafik, die durch moderne systemseitige Grafik-APIs bereitgestellt werden, wie Direct3D 12 unter Windows, Metal unter macOS und Vulkan unter Linux. Konzeptionell unterscheidet sich WebGPU von WebGL ungefÀhr so, wie Vulkan sich von OpenGL unterscheidet, und basiert dabei nicht auf einem bestimmten Grafik-API, sondern bietet eine universelle Schicht, die im Wesentlichen dieselben niedertiefen Primitiven nutzt, die in Vulkan, Metal und Direct3D vorhanden sind.
WebGPU bietet JavaScript-Anwendungen niedrigschwelligen Zugang zur Kontrolle der Anordnung, Verarbeitung und Ăbertragung von Befehlen an die GPU sowie zur Verwaltung von verwandten Ressourcen, Speicher, Puffer, Texturobjekten und kompilierten Grafikhilfsprogrammen. Dieser Ansatz ermöglicht eine höhere Leistung grafischer Anwendungen durch reduzierte Overhead-Kosten und verbesserte Effizienz im Umgang mit der GPU.
WebGPU ermöglicht es, umfassende, komplexe 3D-Projekte fĂŒr das Web zu erstellen, die nicht schlechter funktionieren als eigenstĂ€ndige Programme, die direkt mit Vulkan, Metal oder Direct3D kommunizieren, jedoch nicht an spezifische Plattformen gebunden sind. WebGPU bietet auch zusĂ€tzliche Möglichkeiten fĂŒr die Portierung nativer Grafikprogramme in eine Form, die auf Web-Technologien basieren kann, dank der Verwendung von WebAssembly. Neben 3D-Grafik deckt WebGPU auch die Möglichkeiten ab, die mit der Auslagerung von Berechnungen auf die GPU und der UnterstĂŒtzung der Shader-Entwicklung verbunden sind. Shader. kann in der WebGPU Shading Language erstellt oder im Intermediate Format SPIR-V definiert werden, bevor es in die von den aktuellen Treibern unterstĂŒtzten Shader-Sprachen ĂŒbersetzt wird.
In WebGPU wird eine separate Verwaltung von Ressourcen, Vorarbeiten und BefehlsĂŒbertragungen zum GPU angewendet (in WebGL war ein Objekt dafĂŒr verantwortlich). Es werden drei separate Kontexte bereitgestellt:
GPUDevice zum Erstellen von Ressourcen wie Texturen und Puffern; GPUCommandEncoder zum Kodieren einzelner Befehle, einschlieĂlich der Render- und Berechnungsphasen; GPUCommandBuffer zur Ăbertragung in die Warteschlange zur AusfĂŒhrung im GPU. Das Ergebnis kann in einem Bereich, der mit einem oder mehreren canvas-Elementen verbunden ist, gerendert oder ohne Ausgabe verarbeitet werden (zum Beispiel bei der AusfĂŒhrung von Berechnungsaufgaben). Die Trennung der Phasen erleichtert die Verteilung von Ressourcenerstellung und Vorbereitungsoperationen auf verschiedene Handler, die in verschiedenen Threads ausgefĂŒhrt werden können.
Ein weiteres Unterscheidungsmerkmal von WebGPU im Vergleich zu WebGL ist der unterschiedliche Ansatz zur Zustandsverarbeitung. WebGPU bietet zwei Objekte â GPURenderPipeline und GPUComputePipeline. Diese ermöglichen es, verschiedene, vorher vom Entwickler definierte ZustĂ€nde zu kombinieren, was dem Browser die Notwendigkeit erspart, zusĂ€tzliche Arbeiten wie die Neukompilierung von Shaders zu leisten. Zu den unterstĂŒtzten ZustĂ€nden gehören: Shaders, Layouts von Vertex-Puffern und Attributen, Layouts fĂŒr angehĂ€ngte Gruppen, Mischen, Tiefe und Muster sowie Ausgabeformate nach dem Rendering.
Ein drittes Merkmal von WebGPU ist das Bindungsmodell, das in vielerlei Hinsicht
den in Vulkan vorhandenen Mitteln zur Gruppierung von Ressourcen Àhnelt.
FĂŒr die Gruppierung von Ressourcen in WebGPU steht das Objekt GPUBindGroup zur VerfĂŒgung. Dieses kann wĂ€hrend der Aufzeichnung von Befehlen mit anderen Ă€hnlichen Objekten verbunden werden, um sie in Shaders zu verwenden. Die Erstellung solcher Gruppen ermöglicht es dem Treiber, die notwendigen Vorbereitungen im Voraus zu treffen, und dem Browser, die Ressourcenbindungen zwischen den Renderaufrufen deutlich schneller zu Ă€ndern. Die Anordnung der Ressourcenbindungen kann im Voraus mit dem Objekt GPUBindGroupLayout definiert werden.

In Firefox kann WebGPU in about:config ĂŒber die Einstellung âdom.webgpu.enabledâ aktiviert werden. FĂŒr die Darstellung des CanvasContext ist zudem die Aktivierung des Komposition-Systems erforderlich (âgfx.webrender.allâ in about:config), das in Rust geschrieben ist und die GPU fĂŒr die Rendering-Operationen des Seiteninhalts nutzt. Die WebGPU-Implementierung basiert auf dem Code des Projekts
, das in Rust geschrieben wurde und auf den APIs DX12, Vulkan und Metal in Linux, Android, Windows und macOS arbeiten kann (UnterstĂŒtzung fĂŒr DX11 und OpenGL ES 3.0 wird ebenfalls entwickelt). Parallel dazu entwickelt Google eine andere Implementierung, die in der Chromium wird aktiviert durch das Flag âchrome://flags/#enable-unsafe-webgpuâ, funktioniert jedoch bisher nur auf macOS und Windows.
Quelle: opennet.ru
