В
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
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.
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
Source: opennet.ru