In den nĂ€chtlichen Builds von Firefox wurde die UnterstĂŒtzung fĂŒr WebGPU hinzugefĂŒgt

Im nĂ€chtlichen Builds von Firefox ein UnterstĂŒtzung der Spezifikation WebGPU, die eine Programmierschnittstelle zur Verarbeitung von 3D-Grafik und Berechnungen auf der GPU bereitstellt, konzeptionell Ă€hnlich wie die API Vulkan, Metal und Direct3D 12. Die Spezifikation wird von Mozilla, Google, Apple, Microsoft und Vertretern der Community in der Arbeitsgruppe, die von der W3C-Organisation gegrĂŒndet wurde.

Ein zentrales Ziel von WebGPU ist die Schaffung einer sicheren, benutzerfreundlichen, portablen und leistungsstarken Programmierschnittstelle fĂŒr die Nutzung in Web-Plattformen mit Technologien und Möglichkeiten der 3D-Grafik, die von modernen systemseitigen Graphik-APIs wie Direct3D 12 unter Windows, Metal unter macOS und Vulkan unter Linux bereitgestellt werden. Konzeptionell unterscheidet sich WebGPU von WebGL in etwa so, wie sich Vulkan von OpenGL unterscheidet, und es basiert nicht auf einer bestimmten Grafik-API, sondern stellt eine universelle Schicht dar, die im Allgemeinen dieselben Niedriglevel-Primitiven verwendet, die in Vulkan, Metal und Direct3D vorhanden sind.

WebGPU bietet JavaScript-Anwendungen Mittel fĂŒr eine niedrigere Steuerung der Organisation, Verarbeitung und Übertragung von Befehlen an die GPU, die Verwaltung verwandter Ressourcen, Speicher, Puffer, Texturobjekte und kompilierten GrafikhintergrĂŒnden. Ein solcher Ansatz ermöglicht eine höhere Leistung grafischer Anwendungen durch Senkung der Overhead-Kosten und Steigerung der Effizienz im Umgang mit der GPU.

WebGPU ermöglicht es, vollstĂ€ndige komplexe 3D-Projekte fĂŒr das Web zu erstellen, die nicht schlechter funktionieren als eigenstĂ€ndige Programme, die direkt mit Vulkan, Metal oder Direct3D arbeiten, jedoch nicht an bestimmte Plattformen gebunden sind. WebGPU bietet auch zusĂ€tzliche Möglichkeiten beim Portieren nativer Grafikprogramme in ein Format, das in Web-Technologien funktionieren kann, dank der Anwendung von WebAssembly. Neben 3D-Grafik deckt WebGPU auch Möglichkeiten ab, die mit der Auslagerung von Berechnungen auf der GPU und der UnterstĂŒtzung der Shader-Entwicklung verbunden sind. Shader sich können in der WebGPU Shading Language erstellt oder im intermediĂ€ren Format SPIR-V angegeben werden, das anschließend in die von den aktuellen Treibern unterstĂŒtzten Shadersprachen ĂŒbersetzt wird.

In WebGPU wird eine getrennte Verwaltung der Ressourcen, Vorarbeiten und der Übertragung von Befehlen an die GPU angewendet (in WebGL war ein einzelnes Objekt fĂŒr alles verantwortlich). Es werden drei separate Kontexte bereitgestellt:
GPUDevice zur Erstellung von Ressourcen wie Texturen und Buffern; GPUCommandEncoder zum Kodieren einzelner Befehle, einschließlich Rendering- und Berechnungsphasen; GPUCommandBuffer zur Übermittlung an die Warteschlange zur AusfĂŒhrung auf der GPU. Das Ergebnis kann in einem Bereich gerendert werden, der mit einem oder mehreren Elementen vom Typ canvas verbunden ist, oder ohne Ausgabe verarbeitet werden (z. B. bei der DurchfĂŒhrung von Berechnungsaufgaben). Die Trennung der Phasen erleichtert die Aufteilung von Ressourcenerstellung und Vorbereitungsoperationen in verschiedene Handler, die in verschiedenen Threads ausgefĂŒhrt werden können.

Ein weiteres Unterscheidungsmerkmal von WebGPU gegenĂŒber WebGL ist der andere Ansatz zur Behandlung von ZustĂ€nden. In WebGPU gibt es zwei Objekte — GPURenderPipeline und GPUComputePipeline, die es ermöglichen, verschiedene zuvor vom Entwickler definierte ZustĂ€nde zu kombinieren, was dem Browser ermöglicht, Ressourcen zu sparen, indem zusĂ€tzliche Arbeiten wie die Rekompilierung von Shadern vermieden werden. Zu den unterstĂŒtzten ZustĂ€nden gehören: Shader, Layouts von Vertex-Puffern und -Attributen, Layouts von angehĂ€ngten Gruppen, Mischen, Tiefe und Vorlagen, Ausgabeformate nach dem Rendering.

Eine dritte Besonderheit von WebGPU ist das Bindungsmodell, das in vielerlei Hinsicht
den in Vulkan vorhandenen Mitteln zur Gruppierung von Ressourcen Àhnelt.
Zur Gruppierung von Ressourcen in WebGPU gibt es das Objekt GPUBindGroup, das wĂ€hrend der Befehlsaufnahme mit anderen Ă€hnlichen Objekten verbunden werden kann, um sie in Shadern zu verwenden. Die Erstellung solcher Gruppen ermöglicht es dem Treiber, die erforderlichen vorbereitenden Schritte im Voraus auszufĂŒhren, und dem Browser, die Bindungen von Ressourcen erheblich schneller zwischen Renderaufrufen zu wechseln. Das Layout der Ressourcenbindungen kann im Voraus mithilfe des Objekts GPUBindGroupLayout definiert werden.

In den nĂ€chtlichen Builds von Firefox wurde die UnterstĂŒtzung fĂŒr WebGPU hinzugefĂŒgt

In Firefox gibt es eine Einstellung in about:config, um WebGPU zu aktivieren: „dom.webgpu.enabled“. FĂŒr das Rendering von CanvasContext muss auch das Kompositingsystem aktiviert werden WebRender („gfx.webrender.all“ in about:config), das in Rust geschrieben ist und die Rendering-Operationen des Seiteninhalts auf die GPU auslagert. Die Implementierung von WebGPU basiert auf dem Code des Projekts
wgpu, das in Rust geschrieben wurde und auf den APIs DX12, Vulkan und Metal in Linux, Android, Windows und macOS arbeiten kann (darĂŒber hinaus wird auch die UnterstĂŒtzung fĂŒr DX11 und OpenGL ES 3.0 entwickelt). Parallel dazu entwickelt Google eine andere Implementierung, die in der Canary-Branch verfĂŒgbar ist. Chromium wird mit dem Flag „chrome://flags/#enable-unsafe-webgpu“ aktiviert, funktioniert jedoch derzeit nur auf macOS und Windows.

Quelle: opennet.ru

60GB SSD 8Gb DDR4