Wat is er nieuw in WebGPU (Chrome 124)

François Beaufort
François Beaufort

Alleen-lezen en lezen-schrijven opslagtexturen

Met het opslagtextuurbindingstype kunnen shaders uit opslagtexturen lezen zonder het TEXTURE_BINDING gebruik toe te voegen, en 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 nu GPUStorageTexture toegang instellen op "read-write" of "read-only" bij het maken van een bindingsgroepsindeling. Voorheen was dit beperkt tot "write-only" .

Vervolgens kan uw WGSL-shadercode 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 toegang tot textuurgeheugen te synchroniseren een werkgroep.

Het wordt aanbevolen om een ​​require-directive te gebruiken om de mogelijkheid van niet-portabiliteit aan te geven met requires readonly_and_readwrite_storage_textures; bovenaan uw WGSL-shadercode. Zie het volgende voorbeeld en nummer 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 medewerkers

WebGPU in Chrome tilt de ondersteuning van webwerkers naar een hoger niveau en biedt nu ondersteuning voor zowel servicewerkers als gedeelde werkers . U kunt servicewerkers gebruiken om achtergrondtaken en offlinemogelijkheden te verbeteren, en gedeelde werknemers voor het efficiënt delen van bronnen tussen scripts. Zie uitgave chroom:41494731 .

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

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

Nieuwe attributen voor adapterinformatie

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

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

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

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

Bugfixes

Het maken van twee pijplijnen met overeenkomende bindgroups met behulp van layout: "auto" , het maken van een bindgroup met de eerste pijplijn en het gebruik ervan op de tweede pijplijn levert nu een GPUValidationError op. Het toestaan ​​ervan was een implementatiefout die nu met de juiste tests is opgelost. Zie uitgave Dawn:2402 .

Dawn-updates

In de Dawn API wordt de niet-opgevangen fout-callback die is ingesteld met wgpuDeviceSetUncapturedErrorCallback nu niet aangeroepen nadat het GPU-apparaat verloren is gegaan. Deze oplossing brengt Dawn in lijn met de JavaScript API-specificatie en de implementatie van Blink. Zie uitgave Dawn:2459 .

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

Wat is er nieuw in WebGPU

Een lijst met alles wat aan bod komt in de What's New in WebGPU -serie.

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