Chrome-ը կներառի WebGPU աջակցություն

Google-ը հայտարարել է Chrome 113-ում WebGPU գրաֆիկական API-ի և WGSL-ի (WebGPU Shading Language) կանխադրված աջակցության մասին, որը նախատեսվում է թողարկել մայիսի 2-ին: WebGPU-ն տրամադրում է ծրագրավորման ինտերֆեյս, որը նման է Vulkan-ին, Metal-ին և Direct3D 12-ին՝ GPU-ի կողմից գործողություններ կատարելու համար, ինչպիսիք են արտապատկերումը և հաշվարկը, ինչպես նաև թույլ է տալիս օգտագործել shader լեզվով ծրագրեր, որոնք աշխատում են GPU-ի կողմից: WebGPU-ի իրականացումը սկզբում կակտիվացվի միայն ChromeOS-ի, macOS-ի և Windows-ի համար: Linux-ի և Android-ի համար WebGPU-ի աջակցությունը կակտիվանա ավելի ուշ:

Բացի Chrome-ից, WebGPU-ի փորձնական աջակցությունը փորձարկվել է 2020 թվականի ապրիլից Firefox-ում և 2021 թվականի նոյեմբերից՝ Safari-ում։ Firefox-ում WebGPU-ն միացնելու համար դուք պետք է սահմանեք dom.webgpu.enabled և gfx.webgpu.force ակտիվացված դրոշները about:config-ում: Firefox-ում և Safari-ում WebGPU-ն լռելյայնորեն միացնելու պլաններ դեռևս չկան: Firefox-ի և Chrome-ի համար մշակված WebGPU ծրագրերը հասանելի են առանձին գրադարանների տեսքով՝ Dawn (C++) և wgpu (Rust), որոնք կարող եք օգտագործել WebGPU-ի աջակցությունը ձեր հավելվածներում ինտեգրելու համար: Աշխատանքներ են տարվում նաև WebGPU-ի աջակցությունն ավելացնելու հայտնի JavaScript գրադարաններին, որոնք բնիկորեն օգտագործում են WebGL: Օրինակ, WebGPU-ի ամբողջական աջակցությունն արդեն հայտարարվել է Babylon.js-ում, իսկ մասնակի աջակցություն Three.js-ում, PlayCanvas-ում և TensorFlow.js-ում:

Հայեցակարգային առումով, WebGPU-ն տարբերվում է WebGL-ից այնպես, ինչպես Vulkan գրաֆիկական API-ն տարբերվում է OpenGL-ից, սակայն WebGPU-ն հիմնված չէ կոնկրետ գրաֆիկական API-ի վրա, այլ ունիվերսալ շերտ է, որն օգտագործում է նույն ցածր մակարդակի պարզունակները, որոնք առկա են Vulkan, Metal և Direct3D. WebGPU-ն JavaScript հավելվածներին տրամադրում է ցածր մակարդակի հսկողություն GPU-ին հրամանների կազմակերպման, մշակման և փոխանցման, հարակից ռեսուրսների, հիշողության, բուֆերների, հյուսվածքների օբյեկտների և կոմպիլացված գրաֆիկայի ստվերների կառավարման վրա: Այս մոտեցումը թույլ է տալիս ավելի բարձր կատարողականություն ապահովել գրաֆիկական հավելվածների համար՝ նվազեցնելով ընդհանուր ծախսերը և բարձրացնելով GPU-ի հետ աշխատելու արդյունավետությունը:

WebGPU-ն հնարավորություն է տալիս ստեղծել բարդ 3D նախագծեր համացանցի համար, որոնք ավելի վատ չեն աշխատում, քան առանձին ծրագրերը, որոնք ուղղակիորեն օգտագործում են Vulkan, Metal կամ Direct3D, բայց կապված չեն կոնկրետ հարթակների հետ: WebGPU-ն նաև լրացուցիչ հնարավորություններ է տրամադրում բնիկ գրաֆիկական ծրագրերը WebAssembly-ում կոմպիլյացիայի միջոցով վեբ միացված ձևի մեջ տեղափոխելու համար: Բացի 3D գրաֆիկայից, WebGPU-ն ներառում է նաև հնարավորություններ՝ կապված հաշվարկները GPU-ում բեռնաթափելու և շեյդերների կատարման հետ:

WebGPU-ի հիմնական առանձնահատկությունները.

  • Ռեսուրսների առանձին կառավարում, նախապատրաստական ​​աշխատանք և հրամանների փոխանցում GPU-ին (WebGL-ում ամեն ինչի համար միանգամից մեկ օբյեկտ էր պատասխանատու): Տրվում են երեք առանձին համատեքստեր. GPU Սարք՝ ռեսուրսներ ստեղծելու համար, ինչպիսիք են հյուսվածքները և բուֆերները; GPUCommandEncoder՝ առանձին հրամանների կոդավորման համար, ներառյալ արտապատկերման և հաշվարկման փուլերը. GPUCommandBuffer-ը պետք է հերթագրվի GPU-ում կատարման համար: Արդյունքը կարող է ներկայացվել մեկ կամ մի քանի կտավի տարրերի հետ կապված տարածքում կամ մշակվել առանց ելքի (օրինակ՝ հաշվողական առաջադրանքներ կատարելիս): Փուլերի առանձնացումը հեշտացնում է ռեսուրսների ստեղծման և պատրաստման գործողությունները տարանջատել տարբեր մշակողների մեջ, որոնք կարող են աշխատել տարբեր թելերի վրա:
  • Տարբեր մոտեցում մշակող պետություններին. WebGPU-ն առաջարկում է երկու օբյեկտ՝ GPURenderPipeline և GPUComputePipeline, որոնք թույլ են տալիս համատեղել ծրագրավորողի կողմից նախապես սահմանված տարբեր վիճակներ, ինչը թույլ է տալիս զննարկիչին չվատնել ռեսուրսները լրացուցիչ աշխատանքի վրա, օրինակ՝ shader-ների վերակոմպիլյացիա: Աջակցվող վիճակները ներառում են՝ ստվերներ, գագաթային բուֆեր և հատկանիշի դասավորություններ, կպչուն խմբերի դասավորություններ, խառնուրդներ, խորություն և նախշեր և հետարտադրման ելքային ձևաչափեր:
  • Պարտադիր մոդել, որը շատ նման է Vulkan-ի ռեսուրսների խմբավորման առանձնահատկություններին: Ռեսուրսները միասին խմբավորելու համար WebGPU-ն տրամադրում է GPUBindGroup օբյեկտ, որը կարող է կապված լինել այլ նմանատիպ օբյեկտների հետ՝ հրամաններ գրելիս օգտագործելու համար շեյդերներում: Նման խմբերի ստեղծումը վարորդին թույլ է տալիս նախօրոք կատարել անհրաժեշտ նախապատրաստական ​​գործողությունները, և զննարկիչին թույլ է տալիս շատ ավելի արագ փոխել ռեսուրսների կապերը խաղարկության զանգերի միջև: Ռեսուրսների կապերի դասավորությունը կարող է նախապես սահմանվել GPUBindGroupLayout օբյեկտի միջոցով:

Source: opennet.ru

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