W3C-ը ներկայացնում է WebGPU ստանդարտի նախագիծը

W3C-ն թողարկել է WebGPU և WebGPU Shading Language (WGSL) բնութագրերի առաջին սևագրերը, որոնք սահմանում են API-ներ GPU-ի գործողություններ կատարելու համար, ինչպիսիք են արտապատկերումը և հաշվարկը, ինչպես նաև Shader լեզու՝ GPU-ով աշխատող ծրագրեր գրելու համար: Կոնցեպտուալ առումով նման է Vulkan, Metal և Direct3D 12 API-ներին: Տեխնիկական պայմանները պատրաստվել են աշխատանքային խմբի կողմից, որը ներառում էր Mozilla-ի, Google-ի, Apple-ի և Microsoft-ի ինժեներները:

Հայեցակարգային առումով WebGPU-ն տարբերվում է WebGL-ից այնպես, ինչպես Vulkan գրաֆիկական API-ն՝ OpenGL-ից, սակայն այն հիմնված չէ կոնկրետ գրաֆիկական 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

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