W3C presenterar utkast till WebGPU-standard

W3C har släppt de första utkasten av WebGPU- och WebGPU Shading Language-specifikationerna (WGSL), som definierar API:er för att utföra GPU-operationer som rendering och beräkning, samt ett shader-språk för att skriva program som körs på GPU:n. konceptuellt liknar API:erna Vulkan, Metal och Direct3D 12. Specifikationerna har utarbetats av en arbetsgrupp som inkluderade ingenjörer från Mozilla, Google, Apple och Microsoft.

Begreppsmässigt skiljer sig WebGPU från WebGL på ungefär samma sätt som Vulkans grafik-API skiljer sig från OpenGL, men det är inte baserat på ett specifikt grafik-API, utan är ett universellt lager som använder samma lågnivåprimitiv som finns i Vulkan, Metal och Direct3D. WebGPU tillhandahåller JavaScript-applikationer med kontroll på låg nivå över organisation, bearbetning och överföring av kommandon till GPU:n, hantering av tillhörande resurser, minne, buffertar, texturobjekt och kompilerade grafikskuggningar. Detta tillvägagångssätt gör att du kan uppnå högre prestanda för grafikapplikationer genom att minska omkostnader och öka effektiviteten i arbetet med grafikprocessorn.

WebGPU gör det möjligt att skapa komplexa 3D-projekt för webben som inte fungerar sämre än fristående program som direkt kommer åt Vulkan, Metal eller Direct3D, men som inte är knutna till specifika plattformar. WebGPU tillhandahåller också ytterligare möjligheter för att portera inbyggda grafikprogram till en webbaktiverad form genom kompilering till WebAssembly. Förutom 3D-grafik innehåller WebGPU även funktioner relaterade till att ladda ner beräkningar till GPU:n och exekvera shaders.

Huvudfunktioner i WebGPU:

  • Separat hantering av resurser, förberedande arbete och överföring av kommandon till GPU (i WebGL var ett objekt ansvarigt för allt på en gång). Tre separata sammanhang tillhandahålls: GPUDenhet för att skapa resurser som texturer och buffertar; GPUCommandEncoder för kodning av individuella kommandon, inklusive renderings- och beräkningssteg; GPUCommandBuffer ska ställas i kö för exekvering på GPU:n. Resultatet kan renderas i ett område som är associerat med ett eller flera canvaselement, eller bearbetas utan utdata (till exempel när du kör beräkningsuppgifter). Att separera stegen gör det lättare att separera resursskapande och förberedelseoperationer i olika hanterare som kan köras på olika trådar.
  • Ett annat förhållningssätt till att bearbeta tillstånd. WebGPU erbjuder två objekt - GPURenderPipeline och GPUComputePipeline, som låter dig kombinera olika tillstånd fördefinierade av utvecklaren, vilket gör att webbläsaren inte slösar resurser på ytterligare arbete, som att kompilera om shaders. Tillstånd som stöds inkluderar: skuggningar, vertexbuffert- och attributlayouter, klibbiga grupplayouter, blandning, djup och mönster och utdataformat efter rendering.
  • En bindande modell ungefär som Vulkans resursgrupperingsfunktioner. För att gruppera resurser tillsammans tillhandahåller WebGPU ett GPUBindGroup-objekt, som kan associeras med andra liknande objekt för användning i shaders medan du skriver kommandon. Genom att skapa sådana grupper kan föraren utföra de nödvändiga förberedande åtgärderna i förväg och gör det möjligt för webbläsaren att ändra resursbindningar mellan ritanrop mycket snabbare. Layouten för resursbindningar kan fördefinieras med GPUBindGroupLayout-objektet.

Källa: opennet.ru

Lägg en kommentar