Novità di WebGPU (Chrome 142)

François Beaufort
François Beaufort

Data di pubblicazione: 22 ottobre 2025

Funzionalità di supporto dei formati di texture estese

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

La nuova funzionalità GPU "texture-formats-tier2" consente l'accesso alle texture di archiviazione "read-write" per formati specifici, fondamentale per progetti come il porting di Unreal Engine sul web. Tieni presente che l'attivazione di "texture-formats-tier2" durante la 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 al team di Intel per il suo lavoro.

Indice primitivo in WGSL

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

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 dei frammenti per accedere ai dati per primitiva o eseguire una logica che varia per ogni forma geometrica distinta sottoposta a 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 e la voce di chromestatus.

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

Aggiornamenti all'alba

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

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

Questi sono 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 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