La empresa Google ha anunciado que, por defecto, se incluirá el soporte para la API gráfica WebGPU y el lenguaje de sombreadores WGSL (WebGPU Shading Language) en la rama de Chrome 113, cuyo lanzamiento está previsto para el 2 de mayo. WebGPU proporciona una interfaz de programación similar a Vulkan, Metal y Direct3D 12 para realizar operaciones en el lado de la GPU, como renderizado y cálculos, y permite utilizar un lenguaje de sombreadores para escribir programas que se ejecuten en la GPU. La implementación de WebGPU se incluirá al principio solo en las compilaciones de ChromeOS, macOS y Windows. El soporte para WebGPU en Linux y Android se activará más adelante.
Además de Chrome, el soporte experimental para WebGPU se ha estado probando desde abril de 2020 en Firefox y desde noviembre de 2021 en Safari. Para habilitar WebGPU en Firefox, se deben establecer las banderas dom.webgpu.enabled y gfx.webgpu.force-enabled en about:config. No se han anunciado planes para habilitar WebGPU por defecto en Firefox y Safari. Las implementaciones de WebGPU en desarrollo para Firefox y Chrome están disponibles en forma de bibliotecas separadas: Dawn (C++) y wgpu (Rust), que se pueden utilizar para integrar el soporte de WebGPU en sus aplicaciones. También se están realizando trabajos para agregar soporte de WebGPU en bibliotecas populares de JavaScript que originalmente usan WebGL. Por ejemplo, el soporte completo de WebGPU ya se ha declarado en Babylon.js, y parcial en Three.js, PlayCanvas y TensorFlow.js.
Conceptualmente, WebGPU se diferencia de WebGL de manera similar a como la API gráfica Vulkan se diferencia de OpenGL, pero WebGPU no se basa en ninguna API gráfica específica, sino que representa una capa universal que utiliza los mismos primitivos de bajo nivel que se encuentran en Vulkan, Metal y Direct3D. WebGPU proporciona a las aplicaciones JavaScript herramientas para el control de bajo nivel sobre la organización, procesamiento y transmisión de comandos a la GPU, así como gestión de recursos relacionados, memoria, buffers, objetos de textura y sombreadores gráficos compilados. Este enfoque permite lograr un mayor rendimiento en las aplicaciones gráficas al reducir la sobrecarga y mejorar la eficiencia en la utilización de la GPU.
WebGPU permite crear proyectos 3D complejos para la web que funcionan tan bien como aplicaciones independientes que utilizan directamente Vulkan, Metal o Direct3D, pero que no están atados a plataformas específicas. WebGPU también proporciona capacidades adicionales al portar aplicaciones gráficas nativas a una forma que puede operar sobre tecnologías web, gracias a la compilación en WebAssembly. Además de la gráfica 3D, WebGPU abarca también capacidades relacionadas con el procesamiento en la GPU y la ejecución de sombreadores.
Características clave de WebGPU:
- Gestión de recursos, trabajos preparatorios y transmisión de comandos a la GPU de manera independiente (en WebGL, un objeto se ocupaba de todo a la vez). Se ofrecen tres contextos separados: GPUDevice para crear recursos como texturas y búferes; GPUCommandEncoder para codificar comandos individuales, incluidos las etapas de renderizado y computación; GPUCommandBuffer para encolar en la GPU para su ejecución. El resultado puede ser renderizado en un área asociada a uno o varios elementos canvas, o procesado sin salida (por ejemplo, al ejecutar tareas computacionales). La separación de etapas facilita la distribución de la creación de recursos y las operaciones de preparación en diferentes manejadores que pueden ejecutarse en diferentes hilos.
- Un enfoque diferente para el manejo de estados. En WebGPU se proponen dos objetos: GPURenderPipeline y GPUComputePipeline, que permiten combinar distintos estados previamente definidos por el desarrollador, lo que permite al navegador no gastar recursos en realizar trabajos adicionales, como la recompilación de sombreadores. Entre los estados admitidos se encuentran: sombreadores, disposiciones de búferes de vértices y atributos, disposiciones de grupos adjuntos, mezcla, profundidad y plantillas, formatos de salida después del renderizado.
- Un modelo de vinculación, que recuerda en gran medida a las herramientas de agrupación de recursos existentes en Vulkan. Para agrupar recursos en WebGPU se proporciona el objeto GPUBindGroup, que durante la grabación de comandos se puede vincular con otros objetos similares para su uso en sombreadores. La creación de tales grupos permite al controlador ejecutar con anticipación las acciones preparatorias necesarias, y al navegador le permite cambiar las vinculaciones de recursos entre las llamadas de renderizado de manera significativamente más rápida. La disposición de las vinculaciones de recursos puede definirse de antemano mediante el objeto GPUBindGroupLayout.
Fuente: opennet.ru
