В
Huvudmålet med WebGPU är att tillhandahålla ett säkert, användarvänligt, portabelt och högpresterande programmeringsgränssnitt för webbplattformen för att dra nytta av 3D-grafikteknologierna och funktionerna som tillhandahålls av moderna systemgrafik-API:er, såsom Direct3D 12 på Windows, Metal på macOS och Vulkan på Linux. Konceptuellt skiljer sig WebGPU från WebGL på ungefär samma sätt som Vulkan skiljer sig från OpenGL, och samtidigt är den inte baserad på ett specifikt grafik-API, utan är ett universellt lager som generellt använder samma lågnivåprimitiv som finns i Vulkan, Metal och Direct3D.
WebGPU tillhandahåller JavaScript-applikationer med kontroll på lägre 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 fullfjädrade 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 ger också ytterligare möjligheter när inbyggda grafikprogram porteras till en webbaktiverad form genom användning av WebAssembly-teknik. Förutom 3D-grafik täcker WebGPU även funktioner relaterade till att ladda ner beräkningar till GPU:n och stödja shader-utveckling. Shaders
WebGPU använder separat hantering av resurser, förberedande arbete och överföring av kommandon till GPU:n (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.
Den andra skillnaden mellan WebGPU och WebGL är ett annat sätt att hantera 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.
Den tredje egenskapen hos WebGPU kallas till stor del bindningsmodellen
påminner om resursgrupperingsverktygen som finns i Vulkan.
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.
I Firefox, för att aktivera WebGPU i about:config, finns en inställning "dom.webgpu.enabled". CanvasContext-rendering kräver också att compositing är aktiverat
Källa: opennet.ru