Fecha de publicación: 3 de junio de 2025
La implementación de la API de WebGPU de Chrome incluye funciones diseñadas únicamente para el desarrollo y las pruebas. Estas funciones están fuera de la especificación estándar de WebGPU y no deben usarse en producción.
En este documento, se detalla cómo habilitar las funciones para desarrolladores de WebGPU y se proporciona una lista completa.
Requisitos
Para habilitar las funciones para desarrolladores de WebGPU en Chrome, sigue estos pasos:
- Habilita la marca "WebGPU Developer Features" en
chrome://flags/#enable-webgpu-developer-features
. - Reinicia el navegador Chrome.
Inhabilita la cuantificación de consultas de marca de tiempo
Las consultas de marca de tiempo permiten que las aplicaciones de WebGPU midan con precisión (hasta el nanosegundo) el tiempo de ejecución de los comandos de la GPU durante los pases de procesamiento y renderización. Estas consultas son esenciales para analizar el rendimiento y el comportamiento de la carga de trabajo de la GPU. Para obtener más detalles, consulta Consultas de marca de tiempo en pases de procesamiento y renderización.
Debido a las preocupaciones por los ataques de sincronización, las consultas de marca de tiempo se cuantifican con una resolución de 100 microsegundos, lo que proporciona un buen compromiso entre precisión y seguridad. Esta cuantificación se inhabilita automáticamente cuando se habilita la marca "WebGPU Developer Features".
Información extendida del adaptador
Para comprender mejor el adaptador que se usa, GPUAdapterInfo expone los siguientes atributos:
- El atributo
device
(estandarizado) es un identificador de adaptador específico del proveedor. - El atributo
description
(estandarizado) es una cadena legible por humanos que proporciona detalles del adaptador. - El atributo
driver
(no estandarizado) es una cadena legible que describe el controlador. - El atributo
backend
(no estandarizado) indica el backend de gráficos, como"WebGPU"
,"D3D11"
,"D3D12"
,"metal"
,"vulkan"
,"openGL"
,"openGLES"
o"null"
. - El atributo
type
(no estandarizado) identifica el tipo de GPU:"discrete GPU"
,"integrated GPU"
,"CPU"
o"unknown"
. - El atributo
d3dShaderModel
(no estandarizado) especifica el número máximo de modelo de sombreador de D3D compatible, por ejemplo, 62 indica compatibilidad con HLSL SM 6.2. - El atributo
vkDriverVersion
(no estandarizado) es la versión del controlador de Vulkan especificada por el proveedor. - El atributo
powerPreference
(no estandarizado) es"low-power"
o"high-performance"
, según GPUPowerPreference en GPURequestAdapterOptions.
Para anticipar las limitaciones de memoria cuando se asignan grandes cantidades durante el desarrollo de tu app, GPUAdapterInfo expone información no estandarizada de memoryHeaps
, como el tamaño y el tipo de pilas de memoria disponibles en el adaptador.
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) { /* ... */ }
}
Opción de compilación del módulo de sombreador de matemáticas estrictas
El GPUShaderModuleDescriptor incluye una opción booleana no estandarizada strictMath
, que habilita o inhabilita la precisión matemática estricta durante la compilación del módulo sombreador. Esta opción es compatible con Metal y Direct3D. Cuando se habilita strictMath
, el compilador se adhiere a reglas matemáticas precisas. Por el contrario, inhabilitarlo permite que el compilador optimice los sombreadores de las siguientes maneras:
- Ignora la posibilidad de valores NaN e Infinity.
- Tratar -0 como +0
- Reemplaza la división por una multiplicación más rápida por el recíproco.
- Reordenar operaciones en función de las propiedades asociativas y distributivas
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 });
Importa videos sin copia
El atributo booleano no estandarizado GPUExternalTexture isZeroCopy
te permite saber si la GPU accedió directamente al video importado con importExternalTexture() sin necesidad de 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');
}