Wat is er nieuw in WebGPU (Chrome 124)

François Beaufort
François Beaufort

Alleen-lezen en lees-schrijf opslagtexturen

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

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

Het is aan te raden om een ​​requires-richtlijn te gebruiken om de mogelijkheid van niet-portabiliteit aan te geven met requires readonly_and_readwrite_storage_textures; bovenaan je 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 van servicemedewerkers en gedeelde werknemers

WebGPU in Chrome tilt de ondersteuning van webworkers naar een hoger niveau en biedt nu ondersteuning voor zowel serviceworkers als shared workers . U kunt serviceworkers gebruiken om achtergrondtaken en offline mogelijkheden te verbeteren, en shared workers voor het efficiënt delen van resources tussen scripts. Zie probleem chromium:41494731 .

Bekijk het Chrome-extensievoorbeeld en de WebLLM Chrome-extensie om te zien hoe u WebGPU kunt gebruiken in een extensieserviceworker.

Schermafbeelding van de Chrome-extensie WebLLM.
WebLLM Chrome-extensie.

Nieuwe adapterinformatie-attributen

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

Schermafbeelding van https://webgpureport.org met vkDriverVersion in de adapterinfo.
Adapterinfo vkDriverVersion weergegeven op https://webgpureport.org .

Bugfixes

Het aanmaken van twee pipelines met bijpassende bindgroups met behulp van layout: "auto" , het vervolgens aanmaken van een bindgroup met de eerste pipeline en het gebruiken ervan in de tweede pipeline, genereert nu een GPUValidationError . Het toestaan ​​hiervan was een implementatiebug die nu is opgelost 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 oplossing stemt Dawn af op de JavaScript API-specificatie en de implementatie van Blink. Zie issue dawn:2459 .

Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de volledige lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat in de serie Wat is er nieuw in WebGPU is behandeld.

Chroom 140

Chroom 139

Chroom 138

Chroom 137

Chroom 136

Chroom 135

Chroom 134

Chroom 133

Chroom 132

Chroom 131

Chroom 130

Chroom 129

Chroom 128

Chroom 127

Chroom 126

Chroom 125

Chroom 124

Chroom 123

Chroom 122

Chroom 121

Chroom 120

Chroom 119

Chroom 118

Chroom 117

Chroom 116

Chroom 115

Chroom 114

Chroom 113