El soporte WebGPU llega a las versiones nightly de Firefox

abril 24, 2020 , 0 Comments

Se dio a conocer información sobre la integración de la especificación de ayuda WebGPU en las compilaciones de Firefox nightly, con lo cual ahora se proporciona una interfaz de programación para el procesamiento de gráficos en 3D y la informática en el lado de la GPU, conceptualmente similar a la API de Vulkan, metal y Direct3D 12. La especificación está siendo desarrollada por Mozilla, Google, Apple, Microsoft y representantes de la comunidad en un grupo de trabajo creado por la organización W3C.

El objetivo clave de WebGPU es crear una interfaz de software segura, conveniente, portátil y de alto rendimiento para su uso en la plataforma web con tecnología de gráficos 3D y capacidades proporcionadas por API de gráficos de sistemas modernos como Direct3D 12 en Windows, Metal en macOS y Vulkan en Linux.

Conceptualmente, WebGPU difiere de WebGL de la misma manera que Vulkan difiere de OpenGL y no se basa en una API gráfica específica, sino que es una capa universal, en general, que usa las mismas primitivas de bajo nivel que están disponibles en Vulkan, Metal y Direct3D.

En Firefox, se proporciona la configuración “dom.webgpu.enabled” para habilitar WebGPU en about:config. Ademas de que para renderizar CanvasContext también requiere la inclusión del sistema de composición WebRender (“gfx.webrender.all” en about: config).

La implementación de WebGPU se basa en el código del proyecto wgpu escrito en Rust y puede funcionar sobre las API DX12, Vulkan y Metal en Linux, Android, Windows y macOS (también se está desarrollando la compatibilidad con DX11 y OpenGL ES 3.0).

Sobre WebGPU

WebGPU proporciona aplicaciones de JavaScript con herramientas para el control de nivel inferior sobre la organización, el procesamiento y la transmisión de comandos a la GPU, la administración de recursos relacionados, memoria, buffers, objetos de textura y sombreadores gráficos compilados. Este enfoque le permite lograr aplicaciones gráficas de mayor rendimiento al reducir los gastos generales y aumentar la eficiencia del trabajo con la GPU.

WebGPU hace posible crear proyectos 3D complejos completos para la Web que no funcionan peor que los programas independientes que se comunican directamente con Vulkan, Metal o Direct3D, pero que no están vinculados a plataformas específicas.

También proporciona capacidades adicionales al portar programas gráficos nativos a un formulario que puede funcionar sobre la base de tecnologías basadas en la web mediante el uso de la tecnología WebAssembly.

Además de los gráficos en 3D, WebGPU también cubre las posibilidades asociadas con la eliminación de la informática al lado de la GPU y el soporte para el desarrollo de sombreadores. Los sombreadores pueden crearse en el lenguaje de sombreado WebGPU o especificarse en el formato intermedio SPIR-V, y luego traducirse a los idiomas de sombreador compatibles con los controladores actuales.

WebGPU utiliza la gestión de recursos por separado, el trabajo preparatorio y la transferencia de comandos a la GPU (en WebGL, un objeto era responsable de todo a la vez). Se proporcionan tres contextos separados: GPUDevice para crear recursos como texturas y buffers; GPUCommandEncoder para codificar comandos individuales, incluidas las etapas de renderizado y computación; GPUCommandBuffer para hacer cola para la ejecución en la GPU.

La segunda diferencia entre WebGPU y WebGL es un enfoque diferente para manejar estados. Se proponen dos objetos en WebGPU: GPURenderPipeline y GPUComputePipeline, que permiten combinar varios estados predefinidos por el desarrollador, lo que permite que el navegador no desperdicie recursos en trabajos adicionales, como la recompilación de sombreadores. Entre los estados admitidos se encuentran: sombreadores, búfer de vértices y diseños de atributos, diseños de grupos adjuntos, fusión, profundidad y patrones, formatos de salida después del renderizado.

La tercera característica de WebGPU es el modelo de enlace, que en muchos aspectos se asemeja a los medios de agrupar recursos presentes en Vulkan. Para agrupar recursos en grupos, WebGPU proporciona un objeto GPUBindGroup que, al escribir comandos, puede asociarse con otros objetos similares para usar en sombreadores.

La creación de dichos grupos permite al conductor realizar las acciones preparatorias necesarias de antemano, y el navegador le permite cambiar los enlaces de recursos entre llamadas de extracción mucho más rápido.

Fuente: https://hacks.mozilla.org/


Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.