Nieuw in WebGPU (Chrome 124)

François Beaufort
François Beaufort

Alleen-lezen en lees-/schrijftopslagtexturen

Met het bindingstype voor opslagtexturen kunnen shaders lezen uit opslagtexturen zonder het gebruik van TEXTURE_BINDING toe te voegen en gemengde lees- en schrijfbewerkingen uitvoeren voor bepaalde indelingen. Als de "readonly_and_readwrite_storage_textures" WGSL taalextensie aanwezig is in navigator.gpu.wgslLanguageFeatures, kunt u nu GPUStorageTexture toegang instellen op "read-write" of "read-only" als u een indeling voor een bindingsgroep maakt. Eerder was dit beperkt tot "write-only".

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

We raden je aan een requires-richtlijn te gebruiken om de kans op niet-overdraagbaarheid aan te geven met requires readonly_and_readwrite_storage_textures; bovenaan je WGSL-shadercode. Bekijk 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 service workers en shared workers

WebGPU in Chrome tilt de ondersteuning voor web workers naar een hoger niveau en biedt nu ondersteuning voor zowel service workers als gedeelde workers. Je kunt service workers gebruiken om achtergrondtaken en offline mogelijkheden te verbeteren, en gedeelde workers om bronnen efficiënt te delen tussen scripts. Ga naar issue chromium:41494731.

Neem het voorbeeld van een Chrome-extensie en de WebLLM Chrome-extensie door om te zien hoe je WebGPU gebruikt in een service worker voor extensies.

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

Nieuwe kenmerken voor adapterinformatie

Niet-standaard kenmerken voor d3dShaderModel- en vkDriverVersion-adapterinformatie zijn nu beschikbaar als requestAdapterInfo() wordt aangeroepen als de gebruiker de flag WebGPU Developer Features (WebGPU-ontwikkelaarsfuncties) heeft aangezet op chrome://flags/#enable-webgpu-developer-features. Als dit wordt ondersteund:

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

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

Screenshot van https://webgpureport.org met vkDriverVersion in de adapterinformatie.
AdapterinfovkDriverVersion getoond op https://webgpureport.org.

Bugfixes

Als je 2 pijplijnen met overeenkomende bindgroepen maakt met layout: "auto", daarna een bindgroep maakt met de eerste pijplijn en deze gebruikt in de tweede pijplijn, wordt er nu een GPUValidationError gegenereerd. Dat was een implementatiebug die nu is opgelost met de juiste tests. Ga naar issue dawn:2402.

Updates voor Dawn

In de Dawn API wordt de callback voor niet-vastgelegde fouten die is ingesteld met wgpuDeviceSetUncapturedErrorCallback, nu niet meer aangeroepen nadat het GPU-apparaat verloren is gegaan. Met deze oplossing wordt Dawn afgestemd op de JavaScript API-specificatie en de implementatie van Blink. Ga naar probleem dawn:2459.

Dit zijn maar enkele van de belangrijkste punten. Neem de uitgebreide lijst met doorvoeringen door.

Wat is er nieuw in WebGPU?

Een lijst met alles wat is behandeld in de serie Nieuw in WebGPU.

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

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