Novità di WebGPU (Chrome® 124)

François Beaufort
François Beaufort

Texture di archiviazione di sola lettura e lettura-scrittura

Il tipo di associazione delle texture di archiviazione consente agli utenti di leggere le texture di archiviazione senza aggiungere l'utilizzo di TEXTURE_BINDING e di eseguire letture e scritture miste su determinati formati. Quando l'estensione per la lingua WGSL "readonly_and_readwrite_storage_textures" è presente in navigator.gpu.wgslLanguageFeatures, ora puoi impostare l'accesso GPUStorageTexture su "read-write" o "read-only" quando crei un layout di gruppi di associazione. In precedenza, questa funzionalità era limitata a "write-only".

Quindi, il codice Shader WGSL può utilizzare il qualificatore di accesso read_write e read per le texture di archiviazione, le funzioni integrate textureLoad() e textureStore() si comportano di conseguenza ed è disponibile una nuova funzione integrata textureBarrier() per sincronizzare gli accessi alla memoria delle texture in un gruppo di lavoro.

Ti consigliamo di utilizzare un'istruzione richiede-indica per segnalare il potenziale di non portabilità con requires readonly_and_readwrite_storage_textures; nella parte superiore del codice dello strumento di Shader WGSL. Vedi l'esempio seguente e il messaggio 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.

Assistenza per Service worker e worker condivisi

Con WebGPU in Chrome, l'assistenza dei web worker a un livello superiore, ora è possibile supportarla sia per i service worker che per i worker condivisi. Puoi utilizzare i service worker per migliorare le attività in background e le funzionalità offline, nonché i worker condivisi per una condivisione efficiente delle risorse tra gli script. Vedi issue chromium:41494731.

Guarda l'esempio di estensione di Chrome e l'estensione di Chrome WebLLM per scoprire come utilizzare WebGPU in un service worker di estensione.

Screenshot dell&#39;estensione WebLLM di Chrome.
Estensione WebLLM di Chrome.

Nuovi attributi delle informazioni sull'adattatore

Gli attributi delle informazioni sull'adattatore d3dShaderModel e vkDriverVersion non standard sono ora disponibili al momento della chiamata a requestAdapterInfo() se l'utente ha attivato il flag "Funzionalità per sviluppatori WebGPU" alle ore chrome://flags/#enable-webgpu-developer-features. Se supportato:

  • d3dShaderModel è il numero di modello massimo supportato per lo ShaD D3D. Ad esempio, il valore 62 indica che il driver corrente supporta HLSL SM 6.2. Consulta la documentazione e l'issue dawn:1254.

  • vkDriverVersion è il numero di versione specificato dal fornitore del driver Vulkan. Consulta la documentazione e il issue chromium:327457605.

Screenshot di https://webgpureport.org con vkDriverVersion nelle informazioni sull&#39;adattatore.
Informazioni sull'adattatore vkDriverVersion mostrate su https://webgpureport.org.

Correzioni di bug

La creazione di due pipeline con bindgroup corrispondenti utilizzando layout: "auto", la creazione di un bindgroup con la prima pipeline e il suo utilizzo nella seconda pipeline ora genera un GPUValidationError. A quel punto era un bug di implementazione che ora è stato risolto con test adeguati. Vedi issue dawn:2402.

Aggiornamenti da Dawn

Nell'API Dawn, il callback di errore non acquisito impostato con wgpuDeviceSetUncapturedErrorCallback non viene ora chiamato dopo la perdita del dispositivo GPU. Questa correzione allinea Dawn alla specifica dell'API JavaScript e all'implementazione di Blink. Vedi issue dawn:2459.

Vengono trattati solo alcuni dei punti salienti. Consulta l'elenco completo dei commit.

Novità di WebGPU

Un elenco di tutti gli argomenti trattati nella serie Novità di WebGPU.

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Guida introduttiva di Chrome

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Versione 115 di Chrome

Chrome 114

Chrome 113