W3C pristato WebGPU standarto projektą

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

Pagrindinės WebGPU savybės:

  • Atskiras resursų valdymas, parengiamieji darbai ir komandų perdavimas į GPU (WebGL už viską iš karto buvo atsakingas vienas objektas). Pateikiami trys atskiri kontekstai: GPUDevice ištekliams, tokiems kaip tekstūros ir buferiai, kurti; GPUCommandEncoder, skirtas koduoti atskiras komandas, įskaitant atvaizdavimo ir skaičiavimo etapus; GPUCommandBuffer perduoti į GPU paleidimo eilę. Rezultatas gali būti pateiktas srityje, susietoje su vienu ar daugiau drobės elementų, arba be išvesties (pavyzdžiui, vykdant skaičiavimo užduotis). Etapų atskyrimas leidžia lengviau atskirti išteklių kūrimo ir aprūpinimo operacijas į skirtingas tvarkykles, kurios gali veikti skirtingose ​​gijose.
  • Kitoks požiūris į būsenų valdymą. WebGPU pateikia du objektus – GPURenderPipeline ir GPUComputePipeline, kurie leidžia derinti skirtingas kūrėjo iš anksto nustatytas būsenas, o tai leidžia naršyklei nešvaistyti resursų papildomam darbui, pavyzdžiui, perkompiliuoti atspalvius. Palaikomos būsenos: šešėliai, viršūnių buferio ir atributų išdėstymai, lipnių grupių išdėstymai, maišymas, gylis ir modeliai, išvesties formatai po pateikimo.
  • Įpareigojantis modelis, panašus į „Vulkan“ išteklių grupavimo įrankius. Norėdami sugrupuoti išteklius į grupes, WebGPU pateikia GPUBindGroup objektą, kuris komandų rašymo metu gali būti susietas su kitais panašiais objektais naudoti šešėliuose. Sukūrus tokias grupes, vairuotojas gali iš anksto atlikti reikiamus parengiamuosius veiksmus, o naršyklė daug greičiau gali keisti išteklių susiejimą tarp piešimo iškvietimų. Išteklių susiejimo išdėstymas gali būti iš anksto nustatytas naudojant GPUBindGroupLayout objektą.

Šaltinis: opennet.ru

Добавить комментарий