Publicado el 3 de junio de 2025
La implementación de la API de WebGPU de Chrome incluye funciones destinadas exclusivamente al desarrollo y las pruebas. Estas funciones no se incluyen en la especificación estándar de WebGPU. No uses estas funciones 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 las consultas de marcas de tiempo
Las consultas de marcas 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 de procesamiento. 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 marcas de tiempo en pases de procesamiento y procesamiento.
Debido a las preocupaciones sobre los ataques de sincronización, las consultas de marcas de tiempo se cuantifican con una resolución de 100 microsegundos, lo que proporciona un buen equilibrio 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 que proporciona detalles del adaptador. - El atributo
driver(no estandarizado) es una cadena legible que describe al conductor. - 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 D3D admitido. 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 el GPUPowerPreference en GPURequestAdapterOptions.
Para anticipar las limitaciones de memoria cuando se asignan grandes cantidades durante el desarrollo de tu app, GPUAdapterInfo expone información memoryHeaps no estandarizada, como el tamaño y el tipo de montones 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 con operaciones 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 de sombreador. Esta opción es compatible con Metal y Direct3D. Cuando strictMath está habilitado, el compilador se ajusta a reglas matemáticas precisas. Por el contrario, inhabilitarlo permite que el compilador optimice los sombreadores de la siguiente manera:
- Ignora la posibilidad de valores NaN e Infinity.
- Trata -0 como +0.
- Reemplaza la división por una multiplicación más rápida por el recíproco.
- Reorganizar las operaciones según 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 con cero copias
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');
}