Wat is er nieuw in WebGPU (Chrome 124)

François Beaufort
François Beaufort

Alleen-lezen en lees-schrijf opslagtexturen

Het bindingstype voor opslagtexturen maakt het mogelijk voor shaders om van opslagtexturen te lezen zonder het gebruik van TEXTURE_BINDING toe te voegen, en om gemengde lees- en schrijfbewerkingen uit te voeren op bepaalde formaten. Wanneer de WGSL -taalextensie "readonly_and_readwrite_storage_textures" aanwezig is in navigator.gpu.wgslLanguageFeatures , kunt u nu de toegang GPUStorageTexture instellen op "read-write" of "read-only" bij het maken van een bindgroepindeling. Voorheen was dit beperkt tot "write-only" .

Vervolgens kan uw WGSL-shadercode de toegangskwalificaties read_write en read gebruiken voor opslagtexturen, de ingebouwde functies textureLoad() en textureStore() gedragen zich dienovereenkomstig, en er is een nieuwe ingebouwde functie textureBarrier() beschikbaar om de toegang tot textuurgeheugen in een werkgroep te synchroniseren.

Het is aan te raden een `requires`-richtlijn te gebruiken om de mogelijke niet-portabiliteit aan te geven met requires readonly_and_readwrite_storage_textures; bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld en issue dawn:1972 .

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

Ondersteuning voor servicepersoneel en deeltijdwerkers

WebGPU in Chrome tilt de ondersteuning voor webworkers naar een hoger niveau en biedt nu ondersteuning voor zowel serviceworkers als sharedworkers . Je kunt serviceworkers gebruiken om achtergrondtaken en offlinefunctionaliteit te verbeteren, en sharedworkers voor efficiënte resource-sharing tussen scripts. Zie issue chromium:41494731 .

Bekijk de Chrome-extensievoorbeelden en de WebLLM-Chrome-extensie om te zien hoe je WebGPU kunt gebruiken in een extensieserviceworker.

Screenshot van de WebLLM Chrome-extensie.
WebLLM Chrome-extensie.

Nieuwe adapterinformatie-attributen

Niet-standaard adapterinformatie-attributen d3dShaderModel en vkDriverVersion zijn nu beschikbaar bij het aanroepen requestAdapterInfo() als de gebruiker de vlag "WebGPU Developer Features" heeft ingeschakeld via chrome://flags/#enable-webgpu-developer-features . Indien ondersteund:

  • De d3dShaderModel is het maximaal ondersteunde D3D-shadermodelnummer. De waarde 62 geeft bijvoorbeeld aan dat het huidige stuurprogramma HLSL SM 6.2 ondersteunt. Zie de documentatie en issue dawn:1254 .

  • De vkDriverVersion is het door de leverancier opgegeven versienummer van het Vulkan-stuurprogramma. Zie de documentatie en issue chromium:327457605 .

Screenshot van https://webgpureport.org met vkDriverVersion in de adapterinformatie.
Adapterinformatie vkDriverVersion wordt weergegeven op https://webgpureport.org .

Bugfixes

Het aanmaken van twee pipelines met overeenkomende bindgroups met behulp van layout: "auto" , vervolgens het aanmaken van een bindgroup met de eerste pipeline en het gebruiken daarvan op de tweede pipeline, leidt nu tot een GPUValidationError . Dit was een implementatiefout die nu is verholpen met de juiste tests . Zie issue dawn:2402 .

Dawn-updates

In de Dawn API wordt de callback voor niet-vastgelegde fouten, ingesteld met wgpuDeviceSetUncapturedErrorCallback , nu niet meer aangeroepen nadat het GPU-apparaat verloren is gegaan. Deze correctie zorgt ervoor dat Dawn in lijn is met de JavaScript API-specificatie en de implementatie van Blink. Zie issue dawn:2459 .

Dit is slechts een greep uit de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .

Wat is er nieuw in WebGPU?

Een lijst van alles wat in de serie ' Wat is nieuw in WebGPU' aan bod is gekomen.

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113