In die Nachbaureihen von Firefox wurde die Unterstützung für WebGPU integriert.

In nächtlichen Firefox-Builds wurde eingeführt Unterstützung der Spezifikation WebGPU, welche eine Programmierschnittstelle für die Verarbeitung von 3D-Grafik und Berechnungen auf der GPU bereitstellt, die konzeptionell mit der API vergleichbar ist Vulkan, Metal und Direct3D 12. Die Spezifikation wird von Mozilla, Google, Apple, Microsoft und Vertretern der Gemeinschaft in der Arbeitsgruppe, 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. „testen“ 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 die Nachbaureihen von Firefox wurde die Unterstützung für WebGPU integriert.

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 WebRender („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
wgpu, 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 Canary-Branch verfügbar ist. Chromium wird aktiviert durch das Flag „chrome://flags/#enable-unsafe-webgpu“, funktioniert jedoch bisher nur auf macOS und Windows.

Quelle: opennet.ru

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster