WebGPU-stöd lagts till i Firefox nattliga builds

В natt Firefox bygger dök specifikationsstöd WebGPU, som tillhandahåller ett programmeringsgränssnitt för 3D-grafikbearbetning och GPU-sidedatorer, konceptuellt liknar API:et Vulkan, Metall и Direkt3D 12. Specifikationen utvecklas av Mozilla, Google, Apple, Microsoft och communitymedlemmar i arbetsgrupp, skapad av W3C-organisationen.

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 kan skapas i WebGPU Shading Language eller specificeras i det mellanliggande SPIR-V-formatet och sedan översättas till shader-språk som stöds av nuvarande drivrutiner.

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.

WebGPU-stöd lagts till i Firefox nattliga builds

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 WebRender ("gfx.webrender.all" i about:config), skriven i Rust och outsourcing av sidinnehållsrenderingsoperationer till GPU:n. WebGPU-implementering är baserad på projektkod
wgpu, skriven i Rust och kan köras ovanpå API:erna DX12, Vulkan och Metal på Linux, Android, Windows och macOS (stöd för DX11 och OpenGL ES 3.0 är också under utveckling). Parallellt utvecklar Google ytterligare en implementering, som är tillgänglig i Kanarie gren Chromium och är aktiverat med flaggan "chrome://flags/#enable-unsafe-webgpu", men fungerar än så länge bara på macOS och Windows.

Källa: opennet.ru

Lägg en kommentar