W3C avalikustab WebGPU standardi mustandi

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

WebGPU põhifunktsioonid:

  • Eraldi ressursside haldamine, ettevalmistustööd ja käskude edastamine GPU-le (WebGL-is vastutas kõige eest korraga üks objekt). Pakutakse kolm erinevat konteksti: GPUDevice ressursside (nt tekstuurid ja puhvrid) loomiseks; GPUCommandEncoder üksikute käskude kodeerimiseks, sealhulgas renderdamise ja arvutamise etapid; GPUCommandBuffer, mis tuleb GPU-s täitmiseks järjekorda panna. Tulemust saab renderdada alal, mis on seotud ühe või mitme lõuendielemendiga, või töödelda ilma väljundita (näiteks arvutusülesannete täitmisel). Etappide eraldamine hõlbustab ressursside loomise ja ettevalmistamise toimingute eraldamist erinevateks töötlejateks, mis võivad töötada erinevatel lõimedel.
  • Teistsugune lähenemine olekute töötlemisele. WebGPU pakub kahte objekti – GPURenderPipeline ja GPUComputePipeline, mis võimaldavad kombineerida erinevaid arendaja poolt eelnevalt defineeritud olekuid, mis võimaldab brauseril mitte raisata ressursse lisatööle, näiteks varjutajate ümberkompileerimisele. Toetatud olekud hõlmavad varjutajaid, tipupuhvri ja atribuutide paigutust, kleepuvate rühmade paigutust, segamist, sügavust ja mustreid ning renderdamisjärgseid väljundvorminguid.
  • Siduv mudel, mis sarnaneb paljuski Vulkani ressursside rühmitamise funktsioonidega. Ressursside rühmitamiseks pakub WebGPU GPUBindGroupi objekti, mida saab käskude kirjutamise ajal varjutajates kasutamiseks seostada teiste sarnaste objektidega. Selliste rühmade loomine võimaldab draiveril eelnevalt vajalikud ettevalmistavad toimingud teha ning brauseril saab palju kiiremini ressursside sidumist joonistuskutsete vahel muuta. Ressursisidemete paigutust saab eelnevalt määratleda, kasutades objekti GPUBindGroupLayout.

Allikas: opennet.ru

Lisa kommentaar