Chrome bietet WebGPU-Unterstützung

Google hat die Aufnahme der Standardunterstützung für die WebGPU-Grafik-API und WGSL (WebGPU Shading Language) in Chrome 113 angekündigt, dessen Veröffentlichung für den 2. Mai geplant ist. WebGPU bietet eine Programmierschnittstelle ähnlich wie Vulkan, Metal und Direct3D 12 zum Ausführen von GPU-seitigen Vorgängen wie Rendering und Computing und ermöglicht außerdem die Verwendung einer Shader-Sprache zum Schreiben von Programmen, die auf der GPU-Seite ausgeführt werden. Die WebGPU-Implementierung wird zunächst nur auf ChromeOS-, macOS- und Windows-Builds aktiviert. Für Linux und Android wird die WebGPU-Unterstützung zu einem späteren Zeitpunkt aktiviert.

Zusätzlich zu Chrome wird die experimentelle Unterstützung für WebGPU seit April 2020 in Firefox und seit November 2021 in Safari getestet. Um WebGPU in Firefox zu aktivieren, sollten Sie die Flags dom.webgpu.enabled und gfx.webgpu.force-enabled in about:config setzen. Es gibt noch keine Pläne, WebGPU standardmäßig in Firefox und Safari zu aktivieren. Für Firefox und Chrome entwickelte WebGPU-Implementierungen sind in Form separater Bibliotheken verfügbar – Dawn (C++) und wgpu (Rust), mit denen Sie WebGPU-Unterstützung in Ihre Anwendungen integrieren können. Derzeit wird auch daran gearbeitet, WebGPU-Unterstützung zu beliebten JavaScript-Bibliotheken hinzuzufügen, die WebGL nativ verwenden. Beispielsweise wurde bereits die vollständige Unterstützung für WebGPU in Babylon.js und teilweise Unterstützung in Three.js, PlayCanvas und TensorFlow.js angekündigt.

Konzeptionell unterscheidet sich WebGPU von WebGL in etwa auf die gleiche Weise, wie sich die Vulkan-Grafik-API von OpenGL unterscheidet. WebGPU basiert jedoch nicht auf einer bestimmten Grafik-API, sondern ist eine universelle Ebene, die dieselben Low-Level-Grundelemente verwendet, die in Vulkan, Metal und zu finden sind Direct3D. WebGPU bietet JavaScript-Anwendungen eine einfache Kontrolle über die Organisation, Verarbeitung und Übertragung von Befehlen an die GPU sowie die Verwaltung zugehöriger Ressourcen, Speicher, Puffer, Texturobjekte und kompilierter Grafik-Shader. Mit diesem Ansatz können Sie eine höhere Leistung für Grafikanwendungen erzielen, indem Sie die Gemeinkosten senken und die Effizienz der Arbeit mit der GPU steigern.

WebGPU ermöglicht die Erstellung komplexer 3D-Projekte für das Web, die nicht schlechter abschneiden als eigenständige Programme, die Vulkan, Metal oder Direct3D direkt nutzen, aber nicht an bestimmte Plattformen gebunden sind. WebGPU bietet außerdem zusätzliche Funktionen zum Portieren nativer Grafikprogramme in eine webfähige Form durch Kompilierung in WebAssembly. Neben 3D-Grafiken umfasst WebGPU auch Funktionen zum Auslagern von Berechnungen auf die GPU und zum Ausführen von Shader.

Hauptmerkmale von WebGPU:

  • Getrennte Verwaltung von Ressourcen, Vorarbeiten und Übertragung von Befehlen an die GPU (in WebGL war ein Objekt für alles gleichzeitig verantwortlich). Es werden drei separate Kontexte bereitgestellt: GPUDevice zum Erstellen von Ressourcen wie Texturen und Puffern; GPUCommandEncoder zum Kodieren einzelner Befehle, einschließlich Rendering- und Berechnungsphasen; GPUCommandBuffer, der zur Ausführung auf der GPU in die Warteschlange gestellt werden soll. Das Ergebnis kann in einem Bereich gerendert werden, der einem oder mehreren Canvas-Elementen zugeordnet ist, oder ohne Ausgabe verarbeitet werden (z. B. beim Ausführen von Rechenaufgaben). Durch die Trennung der Phasen ist es einfacher, Ressourcenerstellungs- und -vorbereitungsvorgänge in verschiedene Handler aufzuteilen, die in verschiedenen Threads ausgeführt werden können.
  • Ein anderer Ansatz zur Verarbeitung von Zuständen. WebGPU bietet zwei Objekte – GPURenderPipeline und GPUComputePipeline, mit denen Sie verschiedene vom Entwickler vordefinierte Zustände kombinieren können, sodass der Browser keine Ressourcen für zusätzliche Arbeit verschwendet, beispielsweise für die Neukompilierung von Shader. Zu den unterstützten Zuständen gehören: Shader, Vertex-Puffer- und Attributlayouts, Sticky-Group-Layouts, Überblendung, Tiefe und Muster sowie Ausgabeformate nach dem Rendern.
  • Ein Bindungsmodell, das den Ressourcengruppierungsfunktionen von Vulkan ähnelt. Um Ressourcen zu gruppieren, stellt WebGPU ein GPUBindGroup-Objekt bereit, das anderen ähnlichen Objekten zur Verwendung in Shadern beim Schreiben von Befehlen zugeordnet werden kann. Durch das Erstellen solcher Gruppen kann der Treiber die erforderlichen vorbereitenden Aktionen im Voraus durchführen und der Browser kann die Ressourcenbindungen zwischen Zeichnungsaufrufen viel schneller ändern. Das Layout von Ressourcenbindungen kann mithilfe des GPUBindGroupLayout-Objekts vordefiniert werden.

Source: opennet.ru

Kommentar hinzufügen