Las versiones nocturnas de Firefox añadieron soporte para WebGPU

En nocturnos compilaciones de Firefox se ha añadido soporte de la especificación WebGPU, proporcionando una interfaz de programación para el procesamiento de gráficos 3D y cálculos en el lado de la GPU, conceptualmente similar a la API Vulkan, Metal y Direct3D 12. La especificación es desarrollada por Mozilla, Google, Apple, Microsoft y representantes de la comunidad en el grupo de trabajo, creado bajo la organización W3C.

La tarea clave de WebGPU es crear una interfaz de programación segura, conveniente, portátil y de alto rendimiento para su uso en la plataforma web, aprovechando las tecnologías y capacidades de gráficos 3D proporcionadas por las API gráficas del sistema moderno, como Direct3D 12 en Windows, Metal en macOS y Vulkan en Linux. Conceptualmente, WebGPU se diferencia de WebGL de forma similar a como Vulkan se diferencia de OpenGL, y no se basa en una API gráfica específica, sino que representa una capa universal que utiliza, en general, los mismos primitivos de bajo nivel que existen en Vulkan, Metal y Direct3D.

WebGPU proporciona a las aplicaciones en JavaScript herramientas para un control de bajo nivel sobre la organización, procesamiento y envío de comandos a la GPU, gestión de los recursos relacionados, memoria, buffers, objetos de texturas y sombreadores gráficos compilados. Este enfoque permite lograr un rendimiento más alto en aplicaciones gráficas al reducir la sobrecarga y mejorar la eficiencia del trabajo con la GPU.

WebGPU permite crear proyectos 3D completos y complejos para la web que funcionan tan bien como las aplicaciones independientes que interactúan directamente con Vulkan, Metal o Direct3D, pero que no están atados a plataformas específicas. WebGPU también ofrece capacidades adicionales al portar programas gráficos nativos a una forma que puede funcionar sobre tecnologías web, gracias a la aplicación de WebAssembly. Además de los gráficos 3D, WebGPU abarca capacidades relacionadas con el desalojo de cálculos hacia la GPU y el soporte para el desarrollo de sombreadores. Los sombreadores pueden se pueden crear en el lenguaje WebGPU Shading Language o definirse en el formato intermedio SPIR-V, que luego se traduce a lenguajes de sombreadores soportados por los controladores actuales.

En WebGPU se aplica una gestión separada de recursos, trabajos preparatorios y envío de comandos a la GPU (en WebGL, un solo objeto se encargaba de todo a la vez). Se proporcionan tres contextos separados:
El GPUDevice se utiliza para crear recursos como texturas y búferes; el GPUCommandEncoder se encarga de codificar comandos individuales, incluyendo etapas de renderizado y computación; el GPUCommandBuffer se utiliza para enviar a la cola para su ejecución en el GPU. El resultado puede ser renderizado en un área asociada con uno o varios elementos canvas, o procesado sin salida (por ejemplo, al ejecutar tareas de computación). La separación de etapas facilita la distribución de la creación de recursos y las operaciones de preparación en diferentes controladores que pueden ejecutarse en diferentes hilos.

La segunda diferencia entre WebGPU y WebGL es el enfoque diferente para manejar los estados. WebGPU introduce dos objetos: GPURenderPipeline y GPUComputePipeline, que permiten combinar diferentes estados previamente definidos por el desarrollador, lo que evita que el navegador desperdicie recursos en trabajos adicionales, como la recompilación de sombreadores. Entre los estados admitidos están: sombreadores, diseños de búferes de vértices y atributos, diseños de grupos de anexos, mezcla, profundidad y plantillas, formatos de salida después del renderizado.

La tercera característica de WebGPU es el modelo de enlace, que en gran medida
recuerda a las herramientas de agrupamiento de recursos presentes en Vulkan.
Para agrupar recursos en WebGPU, se proporciona un objeto GPUBindGroup, que durante la grabación de comandos se puede vincular a otros objetos similares para su uso en los sombreadores. La creación de tales grupos permite al controlador realizar acciones preparatorias necesarias de antemano, y permite al navegador cambiar las vinculaciones de recursos mucho más rápido entre las llamadas de renderizado. El diseño de las vinculaciones de recursos se puede definir de antemano utilizando el objeto GPUBindGroupLayout.

Las versiones nocturnas de Firefox añadieron soporte para WebGPU

En Firefox, para habilitar WebGPU en about:config, hay una configuración llamada "dom.webgpu.enabled". También es necesario habilitar el sistema de composición para renderizar CanvasContext WebRender ("gfx.webrender.all" en about:config), escrito en Rust y que transfiere a la GPU las operaciones de renderizado del contenido de la página. La implementación de WebGPU se basa en el código del proyecto
wgpu, desarrollado en Rust y capaz de funcionar sobre las API DX12, Vulkan y Metal en Linux, Android, Windows y macOS (también se está desarrollando soporte para DX11 y OpenGL ES 3.0). Paralelamente, Google está desarrollando otra implementación que está disponible en la rama Canary. Chromium se activa mediante la bandera «chrome://flags/#enable-unsafe-webgpu», pero por ahora solo funciona en macOS y Windows.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster