W3C-konsortiet har presenterat de första utkasten till specifikationer för WebGPU och WebGPU Shading Language (WGSL), som definierar ett API för att utföra operationer pÄ GPU:n, sÄsom rendering och berÀkningar, samt ett shader-sprÄk för att skriva program som körs pÄ GPU:s sida. Det Àr konceptuellt liknande API:erna Vulkan, Metal och Direct3D 12. Specifikationerna har tagits fram av en arbetsgrupp bestÄende av ingenjörer frÄn Mozilla, Google, Apple och Microsoft.
Konceptuellt skiljer sig WebGPU frÄn WebGL pÄ ungefÀr samma sÀtt som grafiska API:er Vulkan skiljer sig frÄn OpenGL, men det baseras inte pÄ nÄgot specifikt grafiskt API, utan representerar ett universellt lager som anvÀnder samma lÄgnivÄ-primitiv som finns i Vulkan, Metal och Direct3D. WebGPU ger JavaScript-appar medel för lÄgnivÄkontroll av organisering, behandling och överföring av kommandon till GPU:n, hantering av relaterade resurser, minne, buffertar, texturobjekt och kompilerade grafiska shaders. Denna metod möjliggör högre prestanda för grafiska applikationer genom att minska overhead och förbÀttra effektiviteten med GPU:n.
WebGPU möjliggör skapandet av komplexa 3D-projekt för webben som fungerar lika bra som fristÄende program som direkt interagerar med Vulkan, Metal eller Direct3D, men som inte Àr bundna till specifika plattformar. WebGPU erbjuder ocksÄ ytterligare möjligheter vid portering av inhemska grafiska program till en form som kan köras baserat pÄ webblösningar, tack vare kompiling till WebAssembly. Utöver 3D-grafik omfattar WebGPU ocksÄ möjligheter relaterade till förflyttning av berÀkningar till GPU-sidan och körning av shaders.
Nyckelfunktioner i WebGPU:
- Separat hantering av resurser, förberedande arbeten och överföring av kommandon till GPU (i WebGL var ett objekt ansvarigt för allt pÄ en gÄng). Tre separata kontexter tillhandahÄlls: GPUDevice för att skapa resurser som texturer och buffertar; GPUCommandEncoder för att koda individuella kommandon, inklusive rendering och berÀkningssteg; GPUCommandBuffer för att sÀtta i kö för utförande i GPU. Resultatet kan ritas i ett omrÄde kopplat till ett eller flera canvas-element, eller bearbetas utan output (t.ex. vid körning av berÀkningsuppgifter). Separeringen av stegen gör det enklare att distribuera skapandet av resurser och förberedande operationer till olika hanterare, som kan köras i olika trÄdar.
- Annorlunda angreppssĂ€tt vid hantering av tillstĂ„nd. I WebGPU erbjuds tvĂ„ objekt â GPURenderPipeline och GPUComputePipeline, som möjliggör kombination av olika tillstĂ„nd, fördefinierade av utvecklaren, vilket gör att webblĂ€saren inte behöver slösa resurser pĂ„ att utföra extra arbete, sĂ„som omkompilering av shaders. Bland de stödda tillstĂ„nden finns: shaders, layout av vertexbuffert och attribut, layout av kopplade grupper, blandning, djup och mallar, utdataformat efter rendering.
- Bindningsmodellen pÄminner mycket om de resurser som grupperas i Vulkan. För att sammanföra resurser i grupper tillhandahÄller WebGPU objektet GPUBindGroup, vilket under kommandoskrivning kan kopplas till andra liknande objekt för anvÀndning i shaders. Skapandet av sÄdana grupper gör det möjligt för drivrutinen att i förvÀg utföra nödvÀndiga förberedande ÄtgÀrder, vilket gör att webblÀsaren kan byta resursbindningar mycket snabbare mellan renderinganrop. Layouten av resursbindningar kan definieras i förvÀg med hjÀlp av objektet GPUBindGroupLayout.
KĂ€lla: opennet.ru
