W3C stellt Entwurf eines WebGPU-Standards vor

Das W3C hat die ersten Entwürfe der WebGPU- und WebGPU Shading Language (WGSL)-Spezifikationen veröffentlicht, die APIs für die Durchführung von GPU-Vorgängen wie Rendering und Computing sowie eine Shader-Sprache zum Schreiben von Programmen definieren, die auf der GPU ausgeführt werden. konzeptionell ähnlich den APIs Vulkan, Metal und Direct3D 12. Die Spezifikationen wurden von einer Arbeitsgruppe erstellt, der Ingenieure von Mozilla, Google, Apple und Microsoft angehörten.

Konzeptionell unterscheidet sich WebGPU von WebGL in etwa auf die gleiche Weise, wie sich die Vulkan-Grafik-API von OpenGL unterscheidet. Sie 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 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 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