В
O obxectivo principal de WebGPU é proporcionar unha interface de programación segura, fácil de usar, portátil e de alto rendemento para a plataforma web para aproveitar as tecnoloxías e as capacidades de gráficos 3D que proporcionan as API de gráficos do sistema moderno, como Direct3D 12 en Windows, Metal. en macOS e Vulkan en Linux. Conceptualmente, WebGPU difire de WebGL da mesma forma que Vulkan difiere de OpenGL e, ao mesmo tempo, non se basea nunha API gráfica específica, senón que é unha capa universal que xeralmente usa as mesmas primitivas de baixo nivel que se atopan en Vulkan. Metal e Direct3D.
WebGPU ofrece ás aplicacións JavaScript un control de nivel inferior sobre a organización, procesamento e transmisión de comandos á GPU, xestionando os recursos asociados, a memoria, os búfers, os obxectos de textura e os sombreadores de gráficos compilados. Este enfoque permítelle acadar un maior rendemento para as aplicacións gráficas reducindo os custos xerais e aumentando a eficiencia de traballar coa GPU.
WebGPU permite crear proxectos 3D complexos completos para a web que non funcionan peor que os programas autónomos que acceden directamente a Vulkan, Metal ou Direct3D, pero non están vinculados a plataformas específicas. WebGPU tamén ofrece capacidades adicionais ao portar programas de gráficos nativos nun formulario habilitado para a web mediante o uso da tecnoloxía WebAssembly. Ademais dos gráficos 3D, WebGPU tamén cobre capacidades relacionadas coa descarga de cálculos na GPU e co apoio ao desenvolvemento de sombreadores. Sombreadores
WebGPU usa xestión separada de recursos, traballo preparatorio e transmisión de comandos á GPU (en WebGL, un obxecto era responsable de todo á vez). Ofrécense tres contextos separados:
GPUDevice para crear recursos como texturas e buffers; GPUCommandEncoder para codificar ordes individuais, incluídas as fases de renderización e cálculo; GPUCommandBuffer que se poñerá en cola para a súa execución na GPU. O resultado pódese renderizar nunha área asociada a un ou máis elementos do lenzo ou procesarse sen saída (por exemplo, cando se executan tarefas de cálculo). Separar as fases facilita a separación das operacións de creación e preparación de recursos en diferentes controladores que poden executarse en diferentes fíos.
A segunda diferenza entre WebGPU e WebGL é un enfoque diferente para manexar os estados. WebGPU ofrece dous obxectos: GPURenderPipeline e GPUComputePipeline, que permiten combinar varios estados predefinidos polo programador, o que permite que o navegador non desperdicie recursos en traballos adicionais, como recompilar sombreadores. Os estados admitidos inclúen: sombreadores, búfer de vértices e deseños de atributos, deseños de grupos adhesivos, mestura, profundidade e patróns e formatos de saída post-renderizado.
A terceira característica da WebGPU chámase, en gran medida, o modelo de vinculación
lembra as ferramentas de agrupación de recursos presentes en Vulkan.
Para agrupar recursos, WebGPU proporciona un obxecto GPUBindGroup, que se pode asociar con outros obxectos similares para usar en sombreadores mentres se escriben comandos. A creación destes grupos permite que o controlador realice as accións preparatorias necesarias con antelación e permite que o navegador cambie as ligazóns de recursos entre chamadas de sorteo moito máis rápido. O deseño das ligazóns de recursos pódese predefinir mediante o obxecto GPUBindGroupLayout.
En Firefox, para habilitar WebGPU en about:config, hai unha configuración "dom.webgpu.enabled". A representación de CanvasContext tamén require que se active a composición
Fonte: opennet.ru