W3C presenta el borrador del estándar WebGPU

El W3C ha publicado los primeros borradores de las especificaciones WebGPU y WebGPU Shading Language (WGSL), que definen las API para realizar operaciones de GPU como renderizado y computación, así como un lenguaje de sombreado para escribir programas que se ejecutan en la GPU. conceptualmente similar a las API Vulkan, Metal y Direct3D 12. Las especificaciones fueron preparadas por un grupo de trabajo que incluía ingenieros de Mozilla, Google, Apple y Microsoft.

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 aplicaciones JavaScript con control de bajo nivel sobre la organización, procesamiento y transmisión de comandos a la GPU, administrando recursos asociados, memoria, buffers, objetos de textura y sombreadores de gráficos compilados. Este enfoque le permite lograr un mayor rendimiento para las aplicaciones gráficas al reducir los costos generales y aumentar la eficiencia del trabajo con la GPU.

WebGPU permite crear proyectos 3D complejos para la Web que no funcionan peor que 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 de gráficos nativos a un formato habilitado para la web mediante la compilación en WebAssembly. Además de los gráficos 3D, WebGPU también incluye capacidades relacionadas con la descarga de cálculos a la GPU y la ejecución de sombreadores.

Características clave de WebGPU:

  • 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

Añadir un comentario