WebGPU-ondersteuning wordt ingeschakeld in Chrome

Google heeft de opname aangekondigd van standaardondersteuning voor de WebGPU grafische API en WGSL (WebGPU Shading Language) in Chrome 113, die naar verwachting op 2 mei zal verschijnen. WebGPU biedt een programmeerinterface vergelijkbaar met Vulkan, Metal en Direct3D 12 voor het uitvoeren van bewerkingen aan de GPU-kant, zoals weergave en computergebruik, en maakt ook het gebruik van een shader-taal mogelijk om programma's te schrijven die op de GPU-kant draaien. De WebGPU-implementatie zal in eerste instantie alleen worden ingeschakeld op ChromeOS-, macOS- en Windows-builds. Voor Linux en Android wordt WebGPU-ondersteuning op een later tijdstip geactiveerd.

Naast Chrome wordt sinds april 2020 experimentele ondersteuning voor WebGPU getest in Firefox en sinds november 2021 in Safari. Om WebGPU in Firefox in te schakelen, moet u de vlaggen dom.webgpu.enabled en gfx.webgpu.force-enabled instellen in about:config. Er zijn nog geen plannen om WebGPU standaard in Firefox en Safari in te schakelen. WebGPU-implementaties ontwikkeld voor Firefox en Chrome zijn beschikbaar in de vorm van afzonderlijke bibliotheken - Dawn (C++) en wgpu (Rust), die u kunt gebruiken om WebGPU-ondersteuning in uw applicaties te integreren. Er wordt ook gewerkt aan het toevoegen van WebGPU-ondersteuning aan populaire JavaScript-bibliotheken die standaard WebGL gebruiken. Volledige ondersteuning voor WebGPU is bijvoorbeeld al aangekondigd in Babylon.js, en gedeeltelijke ondersteuning in Three.js, PlayCanvas en TensorFlow.js.

Conceptueel gezien verschilt WebGPU van WebGL op vrijwel dezelfde manier waarop de Vulkan grafische API verschilt van OpenGL, maar WebGPU 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 presteren dan zelfstandige programma's die rechtstreeks Vulkan, Metal of Direct3D gebruiken, 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