В
El objetivo clave de WebGPU es proporcionar una interfaz de programación segura, fácil de usar, portátil y de alto rendimiento para que la plataforma web aproveche las tecnologías y capacidades de gráficos 3D proporcionadas por las API de gráficos de sistemas modernos, como Direct3D 12 en Windows, Metal. en macOS y Vulkan en Linux. Conceptualmente, WebGPU se diferencia de WebGL de la misma manera que Vulkan se diferencia de OpenGL y, al mismo tiempo, no se basa en una API de gráficos específica, sino que es una capa universal que generalmente utiliza las mismas primitivas de bajo nivel que se encuentran en Vulkan. Metal y Direct3D.
WebGPU proporciona aplicaciones JavaScript con control de nivel inferior 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 y completos 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 al migrar programas de gráficos nativos a un formato habilitado para la web mediante el uso de la tecnología WebAssembly. Además de los gráficos 3D, WebGPU también cubre capacidades relacionadas con la descarga de cálculos a la GPU y el soporte al desarrollo de sombreadores. Sombreadores
WebGPU utiliza 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.
La segunda diferencia entre WebGPU y WebGL es un enfoque diferente para manejar 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.
La tercera característica de WebGPU se llama modelo vinculante, en gran parte
que recuerda a las herramientas de agrupación de recursos presentes en 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.
En Firefox, para habilitar WebGPU en about:config, existe una configuración "dom.webgpu.enabled". La representación de CanvasContext también requiere que la composición esté habilitada
Fuente: opennet.ru