W3C enthüllt Entworf WebGPU Standard

Консорциум W3C представил первые черновые варианты спецификаций WebGPU и WebGPU Shading Language (WGSL), определяющих API для выполнения операций на GPU, таких как рендеринг и вычисления, а также язык шейдров для написания программ, работающих на стороне GPU. концептуально схожий с API Vulkan, Metal и Direct3D 12. Спецификации подготовлены рабочей группой, в которую вошли инженеры из Mozilla, Google, Apple и Microsoft.

Концептуально WebGPU отличается от WebGL примерно так же, как графический API Vulkan отличается от OpenGL, но при этом не основывается на конкретном графическом API, а представляет собой универсальную прослойку, использующую те же низкоуровневые примитивы, что имеются в Vulkan, Metal и Direct3D. WebGPU предоставляет приложениям на JavaScript средства для низкоуровневого контроля за организацией, обработкой и передачей команд к GPU, управления связанными ресурсами, памятью, буферами, объектами текстур и скомпилированными графическими шейдерами. Подобный подход позволяет добиться более высокой производительности графических приложений за счёт снижения накладных расходов и повышения эффективности работы с GPU.

WebGPU даёт возможность создавать для Web сложные 3D-проекты, работающие не хуже, чем обособленные программы, напрямую обращающиеся с Vulkan, Metal или Direct3D, но не привязанные к конкретным платформам. WebGPU также предоставляет дополнительные возможности при портировании нативных графических программ в форму, способную работать на базе web-технологий, благодаря компиляции в WebAssembly. Кроме 3D-графики WebGPU охватывает и возможности, связанные с выносом вычислений на сторону GPU и выполнением шейдеров.

Schlëssel Feature vu WebGPU:

  • Separat Gestioun vu Ressourcen, Virbereedungsaarbecht an Iwwerdroung vun Kommandoen op d'GPU (am WebGL war een Objet op eemol verantwortlech fir alles). Dräi getrennte Kontexter ginn ugebueden: GPUDevice fir Ressourcen wéi Texturen a Puffer ze kreéieren; GPUCommandEncoder fir d'Kodéierung vun eenzelne Kommandoen, dorënner Render- a Berechnungsstadien; GPUCommandBuffer fir an der GPU auszeféieren. D'Resultat kann an engem Gebitt, deen mat engem oder méi Canvas Elementer assoziéiert ginn, oder ouni Ausgang veraarbecht ginn (zum Beispill wann Dir Rechenaufgaben leeft). D'Trennung vun de Bühnen mécht et méi einfach d'Ressourcekreatioun an d'Virbereedungsoperatioune a verschidde Handler ze trennen, déi op verschiddene Threads lafen kënnen.
  • Eng aner Approche zu Veraarbechtung Staaten. WebGPU bitt zwee Objekter - GPURenderPipeline an GPUComputePipeline, déi Iech erlaben verschidde Staaten viraus definéiert vum Entwéckler ze kombinéieren, wat de Browser erlaabt net Ressourcen op zousätzlech Aarbecht ze verschwenden, sou wéi d'Recompilatioun vun Shaders. Ënnerstëtzt Staaten enthalen: Shaders, Vertex-Puffer an Attribut Layouten, Sticky Group Layouten, Vermëschung, Déift a Mustere, a Post-Render Output Formater.
  • E bindende Modell ähnlech wéi de Vulkan Ressource Gruppéierungsfeatures. Fir d'Ressourcen zesummen ze gruppéieren, bitt WebGPU e GPUBindGroup-Objet, dee mat aneren ähnlechen Objete verbonne ka ginn fir an Shaders ze benotzen beim Schreiwen vun Kommandoen. Schafe vun esou Gruppen erlaabt de Chauffeur déi néideg Virbereedungssëtzung Aktiounen am Viraus ze Leeschtunge, an erlaabt de Browser Ressourcen Bindungen tëscht Zeechnen rifft vill méi séier ze änneren. De Layout vun de Ressourceverbindunge ka virdefinéiert ginn mat dem GPUBindGroupLayout Objet.

Source: opennet.ru

Setzt e Commentaire