W3C dezvăluie proiectul standardului WebGPU

Консорциум 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 и выполнением шейдеров.

Caracteristicile cheie ale WebGPU:

  • Gestionarea separată a resurselor, munca pregătitoare și transmiterea comenzilor către GPU (în WebGL un singur obiect era responsabil pentru totul deodată). Sunt furnizate trei contexte separate: GPUDevice pentru crearea de resurse precum texturi și buffere; GPUCommandEncoder pentru codificarea comenzilor individuale, inclusiv etapele de randare și de calcul; GPUCommandBuffer va fi pus în coadă pentru execuție pe GPU. Rezultatul poate fi redat într-o zonă asociată cu unul sau mai multe elemente de pânză sau procesat fără ieșire (de exemplu, când rulează sarcini de calcul). Separarea etapelor facilitează separarea operațiunilor de creare și pregătire a resurselor în diferiți handlere care pot rula pe fire diferite.
  • O abordare diferită a stărilor de procesare. WebGPU oferă două obiecte - GPURenderPipeline și GPUComputePipeline, care vă permit să combinați diferite stări predefinite de dezvoltator, ceea ce permite browserului să nu irosească resurse pentru lucrări suplimentare, cum ar fi recompilarea shaderelor. Stările acceptate includ: shaders, vertex buffer și machete de atribute, sticky group layouts, amestecare, adâncime și modele și formate de ieșire post-randare.
  • Un model obligatoriu asemănător caracteristicilor de grupare a resurselor Vulkan. Pentru a grupa resursele împreună, WebGPU oferă un obiect GPUBindGroup, care poate fi asociat cu alte obiecte similare pentru utilizare în shadere în timpul scrierii comenzilor. Crearea unor astfel de grupuri permite șoferului să efectueze în avans acțiunile pregătitoare necesare și permite browserului să modifice mult mai rapid legăturile de resurse între apelurile de extragere. Aspectul legăturilor de resurse poate fi predefinit folosind obiectul GPUBindGroupLayout.

Sursa: opennet.ru

Adauga un comentariu