Mozilla-ն որոշել է Firefox-ում միացնել WebGPU API-ի և WGSL-ի (WebGPU Shading Language) աջակցությունը։ Հարթակի համար Windows WebGPU աջակցությունը Firefox 141-ում լռելյայնորեն կմիացվի, ինչը նախատեսված է հուլիսի 22-ին։ Այնուհետև WebGPU աջակցությունը նախատեսվում է միացնել հաջորդ ամիսների կառուցումներում՝ Linux и macOS, և որոշ ժամանակ անց հարթակի համար նախատեսված տարբերակում AndroidWebGPU-ն ձեռքով միացնելու համար կարող եք օգտագործել about:config էջի «dom.webgpu.enabled» և «gfx.webrender.all» պարամետրերը։
Chrome-ում WebGPU աջակցությունը լռելյայնորեն առաջարկվում էր 113-րդ տարբերակում, որը թողարկվել էր 2023 թվականի մայիսին: Safari-ում WebGPU աջակցությունը նախատեսվում է լռելյայնորեն միացնել այս աշնանը (փորձարարական աջակցությունը հասանելի է 2021 թվականի նոյեմբերից): Firefox-ում փորձարարական WebGPU աջակցությունը առկա է 2020 թվականից, բայց լռելյայնորեն միացված էր միայն Firefox-ի գիշերային տարբերակներում: Firefox-ի WebGPU իրականացումը հիմնված է WGPU նախագծի կոդի վրա, որը գրված է Rust լեզվով և կարող է աշխատել Direct3D 12, Vulkan, OpenGL և Metal գրաֆիկական API-ների վրա:
WebGPU-ն տրամադրում է Vulkan, Metal և Direct3D 12-ի նման API՝ GPU-ի կողմից գործողություններ կատարելու համար: Բացի 3D գրաֆիկայից, WebGPU-ն նաև ներառում է հաշվարկները GPU-ի կողմ տեղափոխելու և շեյդերներ կատարելու հետ կապված հնարավորություններ: Հայեցակարգային առումով, WebGPU-ն տարբերվում է WebGL-ի հին սպեցիֆիկացիայից գրեթե նույն կերպ, ինչպես Vulkan գրաֆիկական API-ն տարբերվում է OpenGL-ից: Միևնույն ժամանակ, WebGPU-ն հիմնված չէ որևէ կոնկրետ գրաֆիկական API-ի վրա, այլ ունիվերսալ շերտ է, որն օգտագործում է նույն ցածր մակարդակի պրիմիտիվները, որոնք հասանելի են Vulkan-ում, Metal-ում և Direct3D-ում:
WebGPU-ն թույլ է տալիս JavaScript հավելվածներին վերահսկել հրամանների կազմակերպումը, մշակումը և փոխանցումը GPU-ին, ինչպես նաև կառավարել դրանց հետ կապված ռեսուրսները, հիշողությունը, բուֆերները, տեքստուրային օբյեկտները և կոմպիլացված գրաֆիկական շեյդերները: Այս մոտեցումը հնարավորություն է տալիս ավելի բարձր արդյունավետությամբ աշխատել գրաֆիկական հավելվածների հետ՝ նվազեցնելով վերադիր ծախսերը և բարձրացնելով GPU-ի հետ աշխատանքի արդյունավետությունը:
WebGPU-ի միջոցով դուք կարող եք ստեղծել հարթակից անկախ, բարդ 3D նախագծեր, որոնք կատարում են նույնքան լավ աշխատանք, որքան ինքնուրույն ծրագրերը, որոնք ուղղակիորեն օգտագործում են Vulkan, Metal կամ Direct3D: WebGPU-ն նաև լրացուցիչ հնարավորություններ է տրամադրում բնիկ գրաֆիկական ծրագրերը WebAssembly-ում կոմպիլյացիայի միջոցով բրաուզերներում աշխատեցվող ձևաչափի տեղափոխելու համար:
WebGPU-ի հիմնական առանձնահատկությունները և տարբերությունները WebGL-ից.
- Ռեսուրսների առանձին կառավարում, նախապատրաստական աշխատանք և հրամանների փոխանցում GPU-ին (WebGL-ում ամեն ինչի համար միանգամից մեկ օբյեկտ էր պատասխանատու): Տրվում են երեք առանձին համատեքստեր. GPU Սարք՝ ռեսուրսներ ստեղծելու համար, ինչպիսիք են հյուսվածքները և բուֆերները; GPUCommandEncoder՝ առանձին հրամանների կոդավորման համար, ներառյալ արտապատկերման և հաշվարկման փուլերը. GPUCommandBuffer-ը պետք է հերթագրվի GPU-ում կատարման համար: Արդյունքը կարող է ներկայացվել մեկ կամ մի քանի կտավի տարրերի հետ կապված տարածքում կամ մշակվել առանց ելքի (օրինակ՝ հաշվողական առաջադրանքներ կատարելիս): Փուլերի առանձնացումը հեշտացնում է ռեսուրսների ստեղծման և պատրաստման գործողությունները տարանջատել տարբեր մշակողների մեջ, որոնք կարող են աշխատել տարբեր թելերի վրա:
- Տարբեր մոտեցում մշակող պետություններին. WebGPU-ն առաջարկում է երկու օբյեկտ՝ GPURenderPipeline և GPUComputePipeline, որոնք թույլ են տալիս համատեղել ծրագրավորողի կողմից նախապես սահմանված տարբեր վիճակներ, ինչը թույլ է տալիս զննարկիչին չվատնել ռեսուրսները լրացուցիչ աշխատանքի վրա, օրինակ՝ shader-ների վերակոմպիլյացիա: Աջակցվող վիճակները ներառում են՝ ստվերներ, գագաթային բուֆեր և հատկանիշի դասավորություններ, կպչուն խմբերի դասավորություններ, խառնուրդներ, խորություն և նախշեր և հետարտադրման ելքային ձևաչափեր:
- Պարտադիր մոդել, որը շատ նման է Vulkan-ի ռեսուրսների խմբավորման առանձնահատկություններին: Ռեսուրսները միասին խմբավորելու համար WebGPU-ն տրամադրում է GPUBindGroup օբյեկտ, որը կարող է կապված լինել այլ նմանատիպ օբյեկտների հետ՝ հրամաններ գրելիս օգտագործելու համար շեյդերներում: Նման խմբերի ստեղծումը վարորդին թույլ է տալիս նախօրոք կատարել անհրաժեշտ նախապատրաստական գործողությունները, և զննարկիչին թույլ է տալիս շատ ավելի արագ փոխել ռեսուրսների կապերը խաղարկության զանգերի միջև: Ռեսուրսների կապերի դասավորությունը կարող է նախապես սահմանվել GPUBindGroupLayout օբյեկտի միջոցով:
Source: opennet.ru
