Data di pubblicazione: 3 giugno 2025
L'implementazione dell'API WebGPU di Chrome include funzionalità destinate esclusivamente allo sviluppo e ai test. Queste funzionalità non rientrano nelle specifiche standard di WebGPU. Non utilizzare queste funzionalità in produzione.
Questo documento descrive in dettaglio come attivare le funzionalità per sviluppatori di WebGPU e fornisce un elenco completo.
Prerequisito
Per attivare le funzionalità per sviluppatori WebGPU in Chrome:
- Attiva il flag "Funzionalità per sviluppatori WebGPU" all'indirizzo
chrome://flags/#enable-webgpu-developer-features. - Riavvia il browser Chrome.
Disattiva la quantizzazione delle query con timestamp
Le query sui timestamp consentono alle applicazioni WebGPU di misurare con precisione (al nanosecondo) il tempo di esecuzione dei comandi della GPU durante le passate di calcolo e rendering. Queste query sono essenziali per analizzare il rendimento e il comportamento del workload della GPU. Per maggiori dettagli, consulta Query sui timestamp nei passaggi di calcolo e rendering.
A causa di problemi di attacco temporale, le query con timestamp vengono quantizzate con una risoluzione di 100 microsecondi, il che offre un buon compromesso tra precisione e sicurezza. Questa quantizzazione viene disattivata automaticamente quando viene attivato il flag "Funzionalità per sviluppatori WebGPU".
Informazioni estese sull'adattatore
Per comprendere meglio l'adattatore utilizzato, GPUAdapterInfo espone i seguenti attributi:
- L'attributo
device(standardizzato) è un identificatore dell'adattatore specifico del fornitore. - L'attributo
description(standardizzato) è una stringa leggibile che fornisce i dettagli dell'adattatore. - L'attributo
driver(non standardizzato) è una stringa leggibile che descrive il conducente. - L'attributo
backend(non standardizzato) indica il backend della scheda grafica, ad esempio"WebGPU","D3D11","D3D12","metal","vulkan","openGL","openGLES"o"null". - L'attributo
type(non standardizzato) identifica il tipo di GPU:"discrete GPU","integrated GPU","CPU"o"unknown". - L'attributo
d3dShaderModel(non standardizzato) specifica il numero massimo del modello di shader D3D supportato. Ad esempio, 62 indica il supporto di HLSL SM 6.2. - L'attributo
vkDriverVersion(non standardizzato) è la versione del driver Vulkan specificata dal fornitore. - L'attributo
powerPreference(non standardizzato) è"low-power"o"high-performance", in base a GPUPowerPreference in GPURequestAdapterOptions.
Per prevedere le limitazioni di memoria quando allochi grandi quantità durante lo sviluppo della tua app, GPUAdapterInfo espone memoryHeaps informazioni non standardizzate, come le dimensioni e il tipo di heap di memoria disponibili sull'adattatore.
const adapter = await navigator.gpu.requestAdapter();
for (const { size, properties } of adapter.info.memoryHeaps) {
console.log(size); // memory heap size in bytes
if (properties & GPUHeapProperty.DEVICE_LOCAL) { /* ... */ }
if (properties & GPUHeapProperty.HOST_VISIBLE) { /* ... */ }
if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
if (properties & GPUHeapProperty.HOST_CACHED) { /* ... */ }
}
Opzione di compilazione del modulo shader strict math
GPUShaderModuleDescriptor include un'opzione booleana non standardizzata strictMath, che attiva o disattiva la precisione matematica rigorosa durante la compilazione del modulo shader. Questa opzione è supportata su Metal e Direct3D. Quando strictMath è abilitato, il compilatore rispetta regole matematiche precise. Al contrario, la disattivazione consente al compilatore di ottimizzare gli shader:
- Ignorando la possibilità di valori NaN e Infinity.
- Considerare -0 come +0.
- Sostituzione della divisione con una moltiplicazione più rapida per il reciproco.
- Riarrangiamento delle operazioni in base alle proprietà associative e distributive.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const code = `
// Examines the bit pattern of the floating-point number to
// determine if it represents a NaN according to the IEEE 754 standard.
fn isNan(x : f32) -> bool {
bool ones_exp = (bitcast<u32>(x) & 0x7f8) == 0x7f8;
bool non_zero_sig = (bitcast<u32>(x) & 0x7ffff) != 0;
return ones_exp && non_zero_sig;
}
// ...
`;
// Enable strict math during shader compilation.
const shaderModule = device.createShaderModule({ code, strictMath: true });
Importare video con la copia zero
L'attributo booleano non standardizzato GPUExternalTexture isZeroCopy indica se la GPU ha avuto accesso diretto al video importato con importExternalTexture() senza la necessità di una copia intermedia.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const video = document.querySelector('video');
const externalTexture = device.importExternalTexture({ source: video });
if (externalTexture.isZeroCopy) {
console.log('Video frame was accessed directly by the GPU');
}