Extensiones de lenguaje WGSL compatibles
El miembro wgslLanguageFeatures
del objeto GPU
enumera los nombres de las extensiones de idioma WGSL compatibles. Las extensiones de idioma WGSL compatibles se habilitan automáticamente, por lo que no es necesario que las solicite de forma explícita. Actualmente, esta lista está vacía, pero es posible que haya muchas en el futuro (por ejemplo, do-while loops
). Consulta issue dawn:1777.
if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
// Use unknown-feature in WGSL shader code.
}
Compatibilidad experimental para Direct3D 11
El equipo de Chromium está trabajando para agregar compatibilidad con WebGPU para Direct3D 11. Ahora puedes experimentar con él de forma local. Para ello, ejecuta Chrome en Windows con las marcas de línea de comandos --enable-unsafe-webgpu --use-webgpu-adapter=d3d11
. Consulta el problema dawn:1705.
Obtén una GPU discreta de forma predeterminada con alimentación de CA
En dispositivos macOS con GPU doble, si se llama a requestAdapter()
sin una opción powerPreference
, se muestra la GPU discreta cuando el dispositivo del usuario está conectado a una fuente de alimentación de CA. De lo contrario, se muestra la GPU integrada. Consulta el cambio 4499307.
Mejora la experiencia de los desarrolladores
Nuevas advertencias de DevTools
Si se usa la clave depth
en una GPUExtend3DDict
, se muestra una advertencia en la consola de Herramientas para desarrolladores porque la clave correcta es depthOrArrayLayers
. Consulta el problema chromium:1440900.
También se envía una advertencia si un GPUBlendComponent
tiene una combinación de miembros explícitos y predeterminados. Consulta problema dawn:1785.
Aunque los envíos y las muestras de tamaño cero son válidos, una advertencia anima a los desarrolladores a evitarlos cuando sea posible. Consulta el problema dawn:1786.
Mensajes de error mejorados
Ahora se proporciona un mensaje de error mejorado cuando se usa un GPUCommandEncoder
si ya se llamó a finish()
. Consulta el problema dawn:1736.
Cuando se envían búferes de comandos con objetos destruidos, las etiquetas de los búferes de comandos que se usaron en submit()
ahora se pueden ver en el mensaje de error. Consulta el problema dawn:1747.
La parte no válida del estado de la máscara de profundidad ahora se especifica en el mensaje de error cuando se valida depthStencil
. Consulta el problema dawn:1735.
El mensaje de error de validación minBindingSize
ahora informa el grupo y el número de la vinculación que no aprobó la validación, así como el búfer. Consulta el problema dawn:1604.
Se mejoraron los mensajes de error que muestra el método mapAsync()
en un objeto GPUBuffer
para ayudar a los desarrolladores durante la depuración. Consulta el siguiente ejemplo y el problema chromium:1431622.
// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);
// Before it has been mapped, request another mapping.
try {
await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
// New! Error message tells you mapping is already pending.
console.warn(error.message);
}
Etiquetas en las herramientas de depuración de macOS
El botón de activación de depuración use_user_defined_labels_in_backend
te permite reenviar etiquetas de objetos al backend para que se puedan ver en herramientas de depuración específicas de la plataforma, como RenderDoc, PIX o Instruments. A partir de ahora, se proporciona una mejor experiencia de depuración en macOS cuando lo habilitas para la depuración. Consulta el problema dawn:1784.
Registra HLSL si la compilación falla
El botón de activación de depuración dump_shaders
te permite registrar sombreadores WGSL de entrada y sombreadores de backend traducidos. A partir de ahora, cuando lo habilites para la depuración, se volcará el HLSL si falla la compilación. Consulta el problema dawn:1681.
Actualizaciones de Dawn
Cómo establecer un búfer de vértices
Pasar nullptr
en lugar de un wgpu::Buffer
a SetVertexBuffer()
en wgpu::RenderPassEncoder
o wgpu::RenderBundleEncoder
te permite anular la configuración de un búfer de vértices configurado anteriormente en una ranura determinada. Consulta el problema dawn:1675.
// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);
// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);
Archivos adjuntos transitorios
Puedes crear archivos adjuntos que permitan que las operaciones de paso de renderización permanezcan en la memoria de mosaicos, lo que evita el tráfico de VRAM y, posiblemente, la asignación de VRAM para las texturas si configuras el uso de wgpu::TextureUsage::TransientAttachment
. Esta función solo es compatible con Metal y Vulkan. Consulta amanecer del problema: 1695.
wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
wgpu::TextureUsage::TransientAttachment;
auto transientTexture = device.CreateTexture(&desc);
// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.
Cómo compilar sin depot_tools
Una nueva opción de CMake DAWN_FETCH_DEPENDENCIES
te permite recuperar dependencias de Dawn con una secuencia de comandos de Python que lee archivos DEPS en lugar de requerir que todos los proyectos que dependen de ella instalen depot_tools
. Consulta el cambio 131750.
Novedades de WebGPU
Una lista de todo lo que se analizó en la serie Novedades de WebGPU.
Chrome 131
- Cómo recortar distancias en WGSL
- GPUCanvasContext getConfiguration().
- Las primitivas de punto y línea no deben tener sesgo de profundidad
- Funciones integradas de análisis inclusivo para subgrupos
- Compatibilidad experimental con multidibujo indirecto
- Cálculo estricto de la opción de compilación de módulos del sombreador
- Se quitó requestAdapterInfo() de GPUAdapter
- Actualizaciones de Dawn
Chrome 130
- Combinación de fuentes dobles
- Mejoras en el tiempo de compilación del sombreador en Metal
- Obsolescencia de requestAdapterInfo() de GPUAdapter
- Actualizaciones de Dawn
Chrome 129
- Compatibilidad con HDR con el modo de asignación de tonos de lienzo
- Compatibilidad expandida con subgrupos
- Actualizaciones de Dawn
Chrome 128
- Experimenta con subgrupos
- Se dio de baja la configuración del sesgo de profundidad para líneas y puntos
- Oculta la advertencia de DevTools de error no capturado si se usa preventDefault
- WGSL interpola el muestreo primero y, luego,
- Actualizaciones de Dawn
Chrome 127
- Compatibilidad experimental con OpenGL ES en Android
- Atributo de información de GPUAdapter
- Mejoras en la interoperabilidad de WebAssembly
- Se mejoraron los errores del codificador de comandos
- Actualizaciones de Dawn
Chrome 126
- Aumenta el límite de maxTextureArrayLayers
- Optimización de la carga de búfer para el backend de Vulkan
- Mejoras en el tiempo de compilación de sombreadores
- Los búferes de comandos enviados deben ser únicos
- Actualizaciones del amanecer
Chrome 125
- Subgrupos (función en desarrollo)
- Renderización en una porción de textura 3D
- Actualizaciones del amanecer
Chrome 124
- Texturas de almacenamiento de solo lectura y de lectura y escritura
- Compatibilidad con trabajadores de servicio y trabajadores compartidos
- Nuevos atributos de información del adaptador
- Correcciones de errores
- Actualizaciones de Dawn
Chrome 123
- Compatibilidad con funciones integradas de la DP4a en WGSL
- Parámetros de puntero no restringido en WGSL
- Azúcar de sintaxis para desreferenciar compuestos en WGSL
- Estado de solo lectura independiente para los aspectos de plantilla y profundidad
- Actualizaciones del amanecer
Chrome 122
- Expande el alcance con el modo de compatibilidad (función en desarrollo)
- Aumenta el límite de maxVertexAttributes
- Actualizaciones de Dawn
Chrome 121
- Compatibilidad con WebGPU en Android
- Usa DXC en lugar de FXC para compilar sombreadores en Windows
- Consultas de marca de tiempo en pases de renderización y procesamiento
- Puntos de entrada predeterminados a los módulos de sombreadores
- Compatibilidad con display-p3 como espacio de color GPUExternalTexture
- Información sobre los montón de memoria
- Actualizaciones de Dawn
Chrome 120
- Compatibilidad con valores de punto flotante de 16 bits en WGSL
- Supera los límites
- Cambios en el estado del búfer de profundidad
- Actualizaciones de la información de los adaptadores
- Cuantización de consultas de marca de tiempo
- Funciones de limpieza de primavera
Chrome 119
- Texturas de punto flotante de 32 bits filtrables
- Formato de vértices unorm10-10-10-2
- Formato de textura rgb10a2uint
- Actualizaciones del amanecer
Chrome 118
- Compatibilidad con HTMLImageElement y ImageData en
copyExternalImageToTexture()
- Compatibilidad experimental con la textura de almacenamiento de lectura y escritura, y de solo lectura
- Actualizaciones de Dawn
Chrome 117
- Cómo anular el búfer de vértices
- Cómo anular el grupo de vinculaciones
- Silencia los errores de la creación de canalización asíncrona cuando se pierde el dispositivo
- Actualizaciones sobre la creación de módulos de sombreadores SPIR-V
- Mejora la experiencia de los desarrolladores
- Canalizaciones de almacenamiento en caché con diseño generado automáticamente
- Actualizaciones de Dawn
Chrome 116
- Integración de WebCodecs
- Dispositivo perdido que muestra
requestDevice()
de GPUAdapter - Mantén la reproducción de video fluida si se llama a
importExternalTexture()
- Cumplimiento de las especificaciones
- Cómo mejorar la experiencia de los desarrolladores
- Actualizaciones del amanecer
Chrome 115
- Extensiones de lenguaje WGSL compatibles
- Compatibilidad experimental con Direct3D 11
- Obtén una GPU discreta de forma predeterminada con alimentación de CA
- Cómo mejorar la experiencia de los desarrolladores
- Actualizaciones de Dawn
Chrome 114
- Optimiza JavaScript
- getCurrentTexture() en un lienzo sin configurar arroja InvalidStateError
- Actualizaciones de WGSL
- Actualizaciones de Dawn