W3C onthult concept-WebGPU-standaard

Het W3C heeft de eerste concepten vrijgegeven van de WebGPU- en WebGPU Shading Language (WGSL)-specificaties, die API's definiëren voor het uitvoeren van GPU-bewerkingen zoals rendering en computing, evenals een shader-taal voor het schrijven van programma's die op de GPU draaien. conceptueel vergelijkbaar met de API's Vulkan, Metal en Direct3D 12. De specificaties zijn opgesteld door een werkgroep met ingenieurs van Mozilla, Google, Apple en Microsoft.

Conceptueel gezien verschilt WebGPU van WebGL op vrijwel dezelfde manier waarop de Vulkan grafische API verschilt van OpenGL, maar het is niet gebaseerd op een specifieke grafische API, maar is een universele laag die dezelfde primitieven op laag niveau gebruikt die te vinden zijn in Vulkan, Metal en Direct3D. WebGPU biedt JavaScript-applicaties controle op laag niveau over de organisatie, verwerking en overdracht van opdrachten naar de GPU, het beheer van bijbehorende bronnen, geheugen, buffers, textuurobjecten en gecompileerde grafische shaders. Met deze aanpak kunt u hogere prestaties voor grafische toepassingen bereiken door de overheadkosten te verlagen en de efficiëntie van het werken met de GPU te vergroten.

WebGPU maakt het mogelijk om complexe 3D-projecten voor het web te maken die niet slechter werken dan zelfstandige programma's die rechtstreeks toegang hebben tot Vulkan, Metal of Direct3D, maar niet gebonden zijn aan specifieke platforms. WebGPU biedt ook extra mogelijkheden voor het overbrengen van native grafische programma's naar een web-enabled vorm door middel van compilatie in WebAssembly. Naast 3D-graphics bevat WebGPU ook mogelijkheden met betrekking tot het overbrengen van berekeningen naar de GPU en het uitvoeren van shaders.

Belangrijkste kenmerken van WebGPU:

  • Afzonderlijk beheer van bronnen, voorbereidend werk en overdracht van opdrachten naar de GPU (in WebGL was één object in één keer verantwoordelijk voor alles). Er zijn drie afzonderlijke contexten beschikbaar: GPUDevice voor het maken van bronnen zoals texturen en buffers; GPUCommandEncoder voor het coderen van individuele opdrachten, inclusief weergave- en berekeningsfasen; GPUCommandBuffer moet in de wachtrij worden geplaatst voor uitvoering op de GPU. Het resultaat kan worden weergegeven in een gebied dat is gekoppeld aan een of meer canvaselementen, of kan worden verwerkt zonder uitvoer (bijvoorbeeld bij het uitvoeren van rekentaken). Het scheiden van de fasen maakt het gemakkelijker om bewerkingen voor het maken en voorbereiden van resources te scheiden in verschillende handlers die op verschillende threads kunnen worden uitgevoerd.
  • Een andere benadering van het verwerken van toestanden. WebGPU biedt twee objecten: GPURenderPipeline en GPUComputePipeline, waarmee u verschillende vooraf door de ontwikkelaar gedefinieerde toestanden kunt combineren, waardoor de browser geen bronnen verspilt aan extra werk, zoals het opnieuw compileren van shaders. Ondersteunde statussen zijn onder meer: ​​shaders, vertexbuffer- en attribuutlay-outs, sticky groepslay-outs, overvloeiing, diepte en patronen, en post-render-uitvoerformaten.
  • Een bindingsmodel dat veel lijkt op de functies voor het groeperen van bronnen in Vulkan. Om bronnen te groeperen, biedt WebGPU een GPUBindGroup-object, dat kan worden geassocieerd met andere soortgelijke objecten voor gebruik in shaders tijdens het schrijven van opdrachten. Door dergelijke groepen te maken, kan de bestuurder vooraf de noodzakelijke voorbereidende acties uitvoeren, en kan de browser de bronbindingen tussen trekkingsoproepen veel sneller wijzigen. De lay-out van resourcebindingen kan vooraf worden gedefinieerd met behulp van het GPUBindGroupLayout-object.

Bron: opennet.ru

Voeg een reactie