W3C odhaľuje návrh štandardu 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 и выполнением шейдеров.

Kľúčové vlastnosti WebGPU:

  • Samostatná správa zdrojov, prípravné práce a prenos príkazov do GPU (vo WebGL bol za všetko zodpovedný jeden objekt naraz). K dispozícii sú tri samostatné kontexty: GPUDevice na vytváranie zdrojov, ako sú textúry a vyrovnávacie pamäte; GPUCommandEncoder na kódovanie jednotlivých príkazov vrátane fáz vykresľovania a výpočtu; GPUCommandBuffer má byť zaradený do frontu na spustenie na GPU. Výsledok možno vykresliť v oblasti spojenej s jedným alebo viacerými prvkami plátna alebo spracovať bez výstupu (napríklad pri spúšťaní výpočtových úloh). Oddelenie fáz uľahčuje oddelenie operácií vytvárania a prípravy zdrojov do rôznych obslužných programov, ktoré môžu bežať na rôznych vláknach.
  • Iný prístup k stavom spracovania. WebGPU ponúka dva objekty – GPURenderPipeline a GPUComputePipeline, ktoré umožňujú kombinovať rôzne stavy preddefinované vývojárom, čo umožňuje prehliadaču neplytvať zdrojmi na ďalšiu prácu, ako je prekompilovanie shaderov. Podporované stavy zahŕňajú: shadery, rozloženie vyrovnávacej pamäte vrcholov a atribútov, rozloženie lepivých skupín, prelínanie, hĺbku a vzory a výstupné formáty po vykreslení.
  • Záväzný model podobný funkciám Vulkanu na zoskupovanie zdrojov. Na zoskupenie zdrojov poskytuje WebGPU objekt GPUBindGroup, ktorý možno priradiť k iným podobným objektom na použitie v shaderoch pri písaní príkazov. Vytvorenie takýchto skupín umožňuje ovládaču vykonať potrebné prípravné akcie vopred a prehliadaču umožňuje oveľa rýchlejšie meniť väzby zdrojov medzi volaniami kreslenia. Rozloženie väzieb zdrojov je možné preddefinovať pomocou objektu GPUBindGroupLayout.

Zdroj: opennet.ru

Pridať komentár