Novità di WebGPU (Chrome 142)

François Beaufort
François Beaufort

Pubblicato il 22 ottobre 2025

Funzionalità di supporto dei formati delle texture estese

La nuova "texture-formats-tier1" funzionalità GPU consente agli sviluppatori di eseguire il porting dei contenuti esistenti sul web senza doverli riscrivere per le funzionalità inferiori di WebGPU. Supporta i nuovi formati delle texture "r16unorm", "r16snorm", "rg16unorm", "rg16snorm", "rgba16unorm" e "rgba16snorm" con funzionalità di allegato di rendering, fusione e multi-campionamento e accesso alle texture di archiviazione "read-only" o "write-only". Consente inoltre i formati delle texture "r8snorm", "rg8snorm" e "rgba8snorm" esistenti con funzionalità di allegato di rendering, fusione, multi-campionamento e risoluzione. È possibile utilizzare anche altri formati delle texture con accesso alle texture di archiviazione "read-only" o "write-only".

La nuova "texture-formats-tier2" funzionalità GPU consente l'accesso alle texture di archiviazione "read-write" per formati specifici, fondamentali per progetti come il porting di Unreal Engine sul web. Tieni presente che l'attivazione di "texture-formats-tier2" al momento della creazione del dispositivo attiva automaticamente "texture-formats-tier1".

Vedi il seguente snippet e la voce di chromestatus.

const adapter = await navigator.gpu.requestAdapter();

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

Un ringraziamento speciale ai colleghi di Intel per il loro lavoro.

Indice primitivo in WGSL

Il primitive_index è un valore WGSL integrato che identifica in modo univoco la primitiva corrente (ad esempio un punto, una linea o un triangolo) elaborata da uno shader di frammenti. Inizia da 0, incrementa di 1 dopo l'elaborazione di ogni primitiva e viene reimpostato su 0 tra ogni istanza disegnata.

Quando la funzionalità "primitive-index" è disponibile in un GPUAdapter, richiedi un GPUDevice con questa funzionalità per ottenere il supporto dell'indice primitivo in WGSL e attiva esplicitamente questa estensione nel codice WGSL con enable primitive_index;. Una volta attivato, utilizza il valore intero integrato primitive_index nello shader di frammenti per accedere ai dati per primitiva o eseguire una logica che varia per ogni forma geometrica distinta di cui viene eseguito il rendering, ad esempio.

Il seguente snippet di codice mostra uno shader di frammenti che esegue il rendering della seconda primitiva in rosso e di tutte le altre primitive in blu.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("primitive-index")) {
  throw new Error("Primitive index support is not available");
}
// Explicitly request primitive index support.
const device = await adapter.requestDevice({
  requiredFeatures: ["primitive-index"],
});

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

Scopri di più consultando l'esempio di selezione primitiva Primitive Picking sample e la voce di chromestatus chromestatus entry.

I triangoli del modello della teiera 3D sono colorati in base ai valori dell'indice primitivo.
L'esempio di selezione primitiva in modalità "indici primitivi".

Aggiornamenti di Dawn

La variabile CMake DAWN_BUILD_MONOLITHIC_LIBRARY utilizzata per gestire il tipo di libreria monolitica da creare ha modificato il valore predefinito da OFF a STATIC, in modo che per impostazione predefinita vengano generati i file libwebgpu*.

Ora Dawn gestisce correttamente il valore predefinito wgpu::PresentMode::Undefined durante la configurazione di un wgpu::Surface. Vedi il problema 441410668.

Questi sono solo alcuni dei punti salienti principali. Consulta l'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