Mozilla ha decidido habilitar la compatibilidad con la API WebGPU y WGSL (WebGPU Shading Language) en Firefox. Para la plataforma Windows La compatibilidad con WebGPU estará habilitada de forma predeterminada en Firefox 141, cuyo lanzamiento está previsto para el 22 de julio. Posteriormente, se planea habilitar la compatibilidad con WebGPU en las versiones de los meses siguientes: Linux и macOSy después de algún tiempo en la versión para la plataforma AndroidPara habilitar manualmente WebGPU, puede usar los parámetros "dom.webgpu.enabled" y "gfx.webrender.all" en la página about:config.
En Chrome, la compatibilidad con WebGPU se ofrecía por defecto en la versión 113, lanzada en mayo de 2023. En Safari, está previsto que la compatibilidad con WebGPU se active por defecto este otoño (la compatibilidad experimental está disponible desde noviembre de 2021). En Firefox, la compatibilidad experimental con WebGPU existe desde 2020, pero solo se habilitaba por defecto en las compilaciones nocturnas de Firefox. La implementación de WebGPU en Firefox se basa en el código del proyecto WGPU, escrito en Rust y capaz de ejecutarse sobre las API gráficas Direct3D 12, Vulkan, OpenGL y Metal.
WebGPU proporciona una API similar a Vulkan, Metal y Direct3D 12 para realizar operaciones en la GPU. Además de los gráficos 3D, WebGPU también incluye funciones relacionadas con la descarga de cálculos a la GPU y la ejecución de sombreadores. Conceptualmente, WebGPU difiere de la antigua especificación WebGL de forma muy similar a como la API de gráficos de Vulkan difiere de OpenGL. Al mismo tiempo, WebGPU no se basa en una API de gráficos específica, sino que es una capa universal que utiliza las mismas primitivas de bajo nivel disponibles en Vulkan, Metal y Direct3D.
WebGPU permite que las aplicaciones JavaScript controlen la organización, el procesamiento y la transmisión de comandos a la GPU, además de gestionar los recursos asociados, la memoria, los búferes, los objetos de textura y los sombreadores gráficos compilados. Este enfoque permite un mayor rendimiento de las aplicaciones gráficas al reducir la sobrecarga y aumentar la eficiencia al trabajar con la GPU.
Con WebGPU, puede crear proyectos 3D complejos, independientes de la plataforma, con el mismo rendimiento que los programas independientes que utilizan directamente Vulkan, Metal o Direct3D. WebGPU también ofrece funciones adicionales para adaptar programas gráficos nativos a un formato compatible con navegadores, gracias a la compilación en WebAssembly.
Características principales de WebGPU y diferencias con WebGL:
- Gestión separada de recursos, trabajo preparatorio y transmisión 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 procesamiento y cálculo; GPUCommandBuffer se pondrá en cola para su ejecución en la GPU. El resultado se puede representar en un área asociada con uno o más elementos del lienzo o procesarse sin salida (por ejemplo, cuando se ejecutan tareas informáticas). Separar las etapas hace que sea más fácil separar las operaciones de creación y preparación de recursos en diferentes controladores que pueden ejecutarse en diferentes subprocesos.
- Un enfoque diferente para procesar estados. WebGPU ofrece dos objetos: GPURenderPipeline y GPUComputePipeline, que le permiten combinar varios estados predefinidos por el desarrollador, lo que permite que el navegador no desperdicie recursos en trabajo adicional, como recompilar sombreadores. Los estados admitidos incluyen: sombreadores, búfer de vértices y diseños de atributos, diseños de grupos fijos, fusión, profundidad y patrones, y formatos de salida posteriores al renderizado.
- Un modelo vinculante muy parecido a las funciones de agrupación de recursos de Vulkan. Para agrupar recursos, WebGPU proporciona un objeto GPUBindGroup, que se puede asociar con otros objetos similares para usarlo en sombreadores mientras se escriben comandos. La creación de dichos grupos permite al controlador realizar las acciones preparatorias necesarias por adelantado y permite al navegador cambiar los enlaces de recursos entre llamadas de extracción mucho más rápido. El diseño de los enlaces de recursos se puede predefinir utilizando el objeto GPUBindGroupLayout.
Fuente: opennet.ru
