Die nächtlichen Firefox-Builds umfassen jetzt WebGPU-Unterstützung

В nächtlich Firefox-Builds erschienen Spezifikationsunterstützung WebGPU, das eine Programmierschnittstelle für die 3D-Grafikverarbeitung und GPU-seitiges Computing bereitstellt, die konzeptionell der API ähnelt Vulkan, Metal и Direct3D 12. Die Spezifikation wird von Mozilla, Google, Apple, Microsoft und Community-Mitgliedern in entwickelt Arbeitsgruppe, erstellt von der W3C-Organisation.

Das Hauptziel von WebGPU besteht darin, eine sichere, benutzerfreundliche, tragbare und leistungsstarke Programmierschnittstelle für die Webplattform bereitzustellen, um die 3D-Grafiktechnologien und -funktionen moderner Systemgrafik-APIs wie Direct3D 12 unter Windows und Metal zu nutzen unter macOS und Vulkan unter Linux. Konzeptionell unterscheidet sich WebGPU von WebGL in etwa auf die gleiche Weise wie Vulkan von OpenGL. Gleichzeitig basiert es nicht auf einer bestimmten Grafik-API, sondern ist eine universelle Ebene, die im Allgemeinen dieselben Low-Level-Grundelemente wie Vulkan verwendet. Metall und Direct3D.

WebGPU bietet JavaScript-Anwendungen eine untergeordnete 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 vollwertiger komplexer 3D-Projekte für das Web, die nicht schlechter funktionieren als eigenständige Programme, die direkt auf Vulkan, Metal oder Direct3D zugreifen, aber nicht an bestimmte Plattformen gebunden sind. WebGPU bietet außerdem zusätzliche Funktionen bei der Portierung nativer Grafikprogramme in eine webfähige Form durch den Einsatz der WebAssembly-Technologie. Neben 3D-Grafiken deckt WebGPU auch Funktionen im Zusammenhang mit der Auslagerung von Berechnungen auf die GPU und der Unterstützung der Shader-Entwicklung ab. Shader können in der WebGPU-Shading-Sprache erstellt oder im SPIR-V-Zwischenformat angegeben und dann in Shader-Sprachen übersetzt werden, die von aktuellen Treibern unterstützt werden.

WebGPU verwendet eine separate Ressourcenverwaltung, vorbereitende Arbeiten und die Ü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.

Der zweite Unterschied zwischen WebGPU und WebGL ist ein unterschiedlicher Ansatz zur Handhabung 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.

Die dritte Funktion von WebGPU wird im Großen und Ganzen als Bindungsmodell bezeichnet
erinnert an die in Vulkan vorhandenen Tools zur Ressourcengruppierung.
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.

Die nächtlichen Firefox-Builds umfassen jetzt WebGPU-Unterstützung

In Firefox gibt es zum Aktivieren von WebGPU in about:config die Einstellung „dom.webgpu.enabled“. Für das CanvasContext-Rendering muss außerdem Compositing aktiviert sein WebRender („gfx.webrender.all“ in about:config), geschrieben in Rust und Auslagerung von Seiteninhaltsrendering-Vorgängen an die GPU. Die WebGPU-Implementierung basiert auf Projektcode
wgpu, in Rust geschrieben und kann auf den DX12-, Vulkan- und Metal-APIs unter Linux, Android, Windows und macOS ausgeführt werden (Unterstützung für DX11 und OpenGL ES 3.0 befindet sich ebenfalls in der Entwicklung). Parallel dazu entwickelt Google eine weitere Implementierung, die in verfügbar ist Kanarischer Zweig Chromium und wird über das Flag „chrome://flags/#enable-unsafe-webgpu“ aktiviert, funktioniert aber bisher nur unter macOS und Windows.

Source: opennet.ru

Kommentar hinzufügen