Het W3C-consortium heeft de eerste conceptversies van de specificaties voor WebGPU en WebGPU Shading Language (WGSL) gepresenteerd, die een API definiƫren voor het uitvoeren van operaties op de GPU, zoals rendering en berekeningen, evenals een shader-taal voor het schrijven van programma's die op de GPU draaien. Het is conceptueel vergelijkbaar met de API's van Vulkan, Metal en Direct3D 12. De specificaties zijn voorbereid door een werkgroep die bestaat uit engineers van Mozilla, Google, Apple en Microsoft.
Conceptueel verschilt WebGPU van WebGL ongeveer op dezelfde manier als de grafische API Vulkan van OpenGL verschilt, maar het is niet gebaseerd op een specifieke grafische API; het is een universele laag die dezelfde laagniveau-primitieven gebruikt die worden aangetroffen in Vulkan, Metal en Direct3D. WebGPU biedt JavaScript-applicaties de middelen voor laag-niveau controle over de organisatie, verwerking en overdracht van commando's naar de GPU, alsook het beheer van gerelateerde bronnen, geheugen, buffers, texture-objecten en gecompileerde grafische shaders. Deze aanpak stelt gebruikers in staat om de prestaties van grafische applicaties te verhogen door overhead te verlagen en de efficiƫntie van GPU-gebruik te verbeteren.
WebGPU maakt het mogelijk om complexe 3D-projecten voor het web te creƫren die net zo goed presteren als afzonderlijke programma's die rechtstreeks met Vulkan, Metal of Direct3D communiceren, maar niet gebonden zijn aan specifieke platforms. WebGPU biedt ook extra mogelijkheden bij het porteren van native grafische programma's naar een vorm die in staat is te werken op basis van webtechnologieƫn, door compilatie naar WebAssembly. Naast 3D-grafieken dekt WebGPU ook mogelijkheden met betrekking tot het uitvoeren van berekeningen op de GPU en het uitvoeren van shaders.
Belangrijkste kenmerken van WebGPU:
- Gescheiden controle over middelen, voorbereidingswerkzaamheden en opdrachten naar de GPU (in WebGL was ƩƩn object verantwoordelijk voor alles). Er zijn drie afzonderlijke contexten beschikbaar: GPUDevice voor het maken van middelen zoals texturen en buffers; GPUCommandEncoder voor het coderen van afzonderlijke opdrachten, inclusief rendering- en compute-fases; GPUCommandBuffer voor het plaatsen in de uitvoeringswachtrij op de GPU. Het resultaat kan worden weergegeven in een gebied dat is gekoppeld aan een of meerdere canvas-elementen, of worden verwerkt zonder uitvoer (bijvoorbeeld bij het uitvoeren van compute-taken). De scheiding van fasen vergemakkelijkt het uitbesteden van het maken van middelen en voorbereidende werkzaamheden naar verschillende handlers die in verschillende threads kunnen worden uitgevoerd.
- Een andere aanpak bij het verwerken van staten. In WebGPU worden twee objecten aangeboden ā GPURenderPipeline en GPUComputePipeline ā waarmee verschillende staten kunnen worden gecombineerd die vooraf door de ontwikkelaar zijn gedefinieerd, wat het de browser mogelijk maakt om geen middelen te verspillen aan aanvullende werkzaamheden, zoals het opnieuw compileren van shaders. Onder de ondersteunde staten vallen: shaders, lay-outs voor vertexbuffers en attributen, lay-outs voor gekoppelde groepen, mengen, diepte en sjablonen, uitvoerformaten na rendering.
- Het bindmodel doet denken aan de bestaande middelen voor het groeperen van bronnen in Vulkan. Om bronnen in groepen te combineren, biedt WebGPU het object GPUBindGroup, dat tijdens het opnemen van commando's gekoppeld kan worden aan andere soortgelijke objecten voor gebruik in shaders. Het creƫren van dergelijke groepen stelt de stuurprogramma's in staat om van tevoren de nodige voorbereidende acties uit te voeren, en stelt de browser in staat om veel sneller de bronbindingen tussen renderaanroepen te wijzigen. De lay-out van de bronbindingen kan van tevoren worden gedefinieerd met behulp van het object GPUBindGroupLayout.
Bron: opennet.ru
