WebGPU-stöd kommer att aktiveras i Chrome

Google tillkännagav standardstödet för WebGPU-grafik-API och WebGPU Shading Language (WGSL) i Chrome 113, som är planerad att släppas den 2 maj. WebGPU tillhandahåller ett API som liknar Vulkan, Metal och Direct3D 12 för att utföra operationer på GPU-sidan som rendering och beräkning, och låter dig även använda ett shader-språk för att skriva GPU-sideprogram. WebGPU-implementeringen kommer initialt endast att aktiveras på ChromeOS-, macOS- och Windows-versioner. För Linux och Android kommer WebGPU-stöd att aktiveras vid ett senare tillfälle.

Utöver Chrome har experimentellt stöd för WebGPU testats sedan april 2020 i Firefox och sedan november 2021 i Safari. För att aktivera WebGPU i Firefox bör du ställa in flaggorna dom.webgpu.enabled och gfx.webgpu.force-enabled i about:config. Det finns ännu inga planer på att aktivera WebGPU som standard i Firefox och Safari. WebGPU-implementationer utvecklade för Firefox och Chrome finns tillgängliga i form av separata bibliotek - Dawn (C++) och wgpu (Rust), som du kan använda för att integrera WebGPU-stöd i dina applikationer. Arbete pågår också för att lägga till WebGPU-stöd till populära JavaScript-bibliotek som inbyggt använder WebGL. Till exempel har fullt stöd för WebGPU redan aviserats i Babylon.js, och partiellt stöd i Three.js, PlayCanvas och TensorFlow.js.

Begreppsmässigt skiljer sig WebGPU från WebGL på ungefär samma sätt som Vulkans grafik-API skiljer sig från OpenGL, men WebGPU är inte baserad 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 det möjligt att uppnå högre prestanda för grafiska applikationer genom att minska omkostnader och öka effektiviteten i arbetet med GPU.

WebGPU gör det möjligt att skapa komplexa 3D-projekt för webben som inte presterar sämre än fristående program som direkt använder 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