W3Cha publicado los primeros borradores del estándar WebGPU
El W3C dio a conocer recientemente, los primeros borradores de las especificaciones de WebGPU y WebGPU Shading Language (WGSL), que definen las API para realizar operaciones de GPU como la representación y el cálculo, y un lenguaje de sombreado para escribir programas del lado de la GPU.
Estas especificaciones son conceptualmente similares a las API de Vulkan, Metal y Direct3D 12. Las especificaciones fueron preparadas por un grupo de trabajo que incluía ingenieros de Mozilla, Google, Apple y Microsoft.
El objetivo de la GPU para el grupo de trabajo web es proporcionar una interfaz entre la plataforma web y las modernas capacidades de computación y gráficos 3D presentes en las plataformas de sistemas nativos. Obtenga más información sobre los objetivos, el alcance y los entregables .
La GPU para Web Community Group desarrolló las especificaciones adoptadas por este Grupo de Trabajo. The Community Group continúa impulsando el trabajo técnico sobre las especificaciones e incubando nuevas características. Este Grupo de Trabajo trabaja con el Grupo de la Comunidad para dar forma a las especificaciones para la vía de Recomendación.
Conceptualmente, WebGPU se diferencia de WebGL de la misma manera que la API de gráficos de Vulkan se diferencia de OpenGL, pero 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 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, el procesamiento y la transmisión de comandos a la GPU, la gestión de recursos asociados, memoria, búferes, objetos de textura y sombreadores de gráficos compilados. Este enfoque le permite lograr un mayor rendimiento para las aplicaciones de gráficos al reducir la sobrecarga y aumentar la eficiencia de la GPU.
WebGPU permite crear proyectos 3D complejos para la Web que no funcionan de la misma forma que en los programas independientes que acceden directamente a Vulkan, Metal o Direct3D, pero que no están vinculados a plataformas específicas.
WebGPU también proporciona capacidades adicionales para portar programas gráficos nativos a un formulario basado en web compilando en WebAssembly. Además de los gráficos 3D, WebGPU también cubre las posibilidades asociadas con la subcontratación de cálculos al lado de la GPU y la ejecución de sombreadores.
Características clave de WebGPU:
- Gestión separada de recursos, trabajo preparatorio y 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 tampones; GPUCommandEncoder para codificar comandos individuales, incluidas las etapas de procesamiento y cálculo; GPUCommandBuffer para poner en cola para ejecución en la GPU. El resultado se puede renderizar en un área asociada con uno o más lienzos, o renderizar sin renderizar (por ejemplo, al ejecutar tareas computacionales). La separación de etapas facilita la separación de la creación de recursos y las operaciones preparatorias en diferentes controladores que pueden ejecutarse en diferentes subprocesos.
- Un enfoque diferente al manejar estados. WebGPU ofrece dos objetos, GPURenderPipeline y GPUComputePipeline, que le permiten combinar diferentes 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 adjuntos, combinación, profundidad y plantillas, y formatos de salida posteriores al procesamiento.
- Un modelo vinculante muy parecido a las herramientas de agrupación de recursos de Vulkan. Para agrupar recursos en grupos, WebGPU proporciona un objeto GPUBindGroup que, mientras escribe comandos, se puede vincular a otros objetos del mismo tipo para su uso en sombreadores. La creación de dichos grupos permite al conductor realizar las acciones preparatorias necesarias por adelantado, y el navegador permite que el navegador cambie las vinculaciones de recursos mucho más rápido entre llamadas de sorteo. El diseño de los enlaces de recursos se puede predefinir mediante el objeto GPUBindGroupLayout.
Finalmente, si estás interesado en conocer más al respecto sobre la nota, puedes consultar los detalles en el siguiente enlace.