Novità di WebGPU (Chrome 145)

François Beaufort
François Beaufort

Pubblicato il 28 gennaio 2026

Estensione subgroup_uniformity di WGSL

L'estensione del linguaggio WGSL subgroup_uniformity modifica l'ambito dell'analisi di uniformità per le funzioni integrate di sottogruppo e quad in modo che avvenga a livello di sottogruppo (anziché di gruppo di lavoro). Questa funzionalità consente di considerare uniforme la funzionalità del sottogruppo in più casi, il che rappresenta una migliore qualità della vita per gli sviluppatori e una minore probabilità di disattivare completamente i controlli di uniformità. Un'implicazione pratica è che un maggior numero di valori verrà considerato uniforme per il sottogruppo, ad esempio il valore integrato subgroup_id aggiunto di recente.

Questa estensione del linguaggio può essere rilevata tramite la funzionalità navigator.gpu.wgslLanguageFeatures. Vedi l'esempio seguente e l'intenzione di spedire.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_uniformity")) {
  throw new Error(`WGSL subgroup uniformity is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  
  @group(0) @binding(0) var<storage, read_write> non_uniform: i32;

  fn main() {
    if (non_uniform == 42) {
      _ = subgroupElect();
    }
  }`,
}); // WGSL error: subgroupElect must only be called from subgroup uniform control flow.

Mappatura sincrona sperimentale dei buffer nei worker

Per esplorare i potenziali modi per ridurre gli attriti tra WebGPU e il codice dell'applicazione, il team di Chrome sta esaminando la mappatura sincrona dei buffer all'interno dei worker. Nell'ambito di questo impegno, è stato creato un prototipo di un nuovo metodo sperimentale mapSync() per GPUBuffer. Questo metodo, limitato ai worker, funziona in modo simile a mapAsync().

Questa funzionalità è sperimentale e il tuo feedback è importante per determinare se verrà proposta per la standardizzazione. Per provarla, avvia Chrome utilizzando l'opzione --enable-features=WebGPUMapSyncOnWorkers e segnala il tuo feedback sulla sua utilità e sul suo impatto. Per iniziare, vedi lo snippet seguente.

// Create a GPU buffer.
const buffer = device.createBuffer({
  size: 42,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Map buffer synchronously when possible.
if ("mapSync" in GPUBuffer.prototype) {
  buffer.mapSync(GPUMapMode.READ);
} else {
  // Awaiting allows other code to run, which can cause application logic issues.
  await buffer.mapAsync(GPUMapMode.READ);
}

Aggiornamenti di Dawn

La funzionalità wgpu::FeatureName::R8UnormStorage non è più disponibile. È stata sostituita da wgpu::FeatureName::TextureFormatTier1, che ora la sostituisce. Vedi il problema 472926167.

La funzionalità wgpu::FeatureName::Snorm16TextureFormats è stata rimossa. Le sue funzionalità, ad eccezione di Resolve, sono ora in gran parte incluse in wgpu::FeatureName::TextureFormatsTier1. Vedi il problema 465347942.

Le release notturne dei file binari (oltre a Emdawnwebgpu) vengono ora create su GitHub e sono disponibili nelle release di google/dawn. Vengono fornite come servizio best effort e non sono firmate o garantite da Google o dal team di Dawn.

È stato aggiunto il supporto di wgpu::ExternalTexture a Emdawnwebgpu. Tieni presente che può essere importato solo dal codice JavaScript (ad esempio, EM_ASM), poiché la creazione in C/C++ non è possibile a causa del requisito di un oggetto JavaScript come HTMLVideoElement o VideoFrame. Vedi il problema 462477379 e SpotTests.cpp per il codice di esempio.

Questi sono solo alcuni dei punti salienti principali. Dai un'occhiata all'elenco esaustivo dei commit.

Novità di WebGPU

Un elenco di tutto ciò che è stato trattato nella serie Novità di WebGPU.

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