В
O principal objetivo do WebGPU é fornecer uma interface de programação segura, fácil de usar, portátil e de alto desempenho para a plataforma Web aproveitar as tecnologias e recursos gráficos 3D fornecidos por APIs gráficas de sistemas modernos, como Direct3D 12 no Windows, Metal no macOS e Vulkan no Linux. Conceitualmente, o WebGPU difere do WebGL da mesma forma que o Vulkan difere do OpenGL e, ao mesmo tempo, não é baseado em uma API gráfica específica, mas é uma camada universal que geralmente usa as mesmas primitivas de baixo nível encontradas no Vulkan, Metal e Direct3D.
WebGPU fornece aplicativos JavaScript com controle de nível inferior sobre a organização, processamento e transmissão de comandos para a GPU, gerenciando recursos associados, memória, buffers, objetos de textura e shaders gráficos compilados. Essa abordagem permite obter maior desempenho para aplicativos gráficos, reduzindo custos indiretos e aumentando a eficiência do trabalho com a GPU.
O WebGPU torna possível criar projetos 3D complexos completos para a Web que não funcionam pior do que programas independentes que acessam diretamente Vulkan, Metal ou Direct3D, mas não estão vinculados a plataformas específicas. O WebGPU também fornece recursos adicionais ao portar programas gráficos nativos para um formato habilitado para web por meio do uso da tecnologia WebAssembly. Além dos gráficos 3D, o WebGPU também cobre recursos relacionados ao descarregamento de cálculos para a GPU e ao suporte ao desenvolvimento de shaders. Sombreadores
WebGPU utiliza gerenciamento separado de recursos, trabalho preparatório e transmissão de comandos para a GPU (no WebGL, um objeto era responsável por tudo de uma vez). Três contextos separados são fornecidos:
GPUDevice para criação de recursos como texturas e buffers; GPUCommandEncoder para codificação de comandos individuais, incluindo estágios de renderização e computação; GPUCommandBuffer a ser enfileirado para execução na GPU. O resultado pode ser renderizado em uma área associada a um ou mais elementos de tela ou processado sem saída (por exemplo, ao executar tarefas de computação). A separação dos estágios facilita a separação das operações de criação e preparação de recursos em diferentes manipuladores que podem ser executados em diferentes threads.
A segunda diferença entre WebGPU e WebGL é uma abordagem diferente para lidar com estados. O WebGPU oferece dois objetos - GPURenderPipeline e GPUComputePipeline, que permitem combinar vários estados pré-definidos pelo desenvolvedor, o que permite ao navegador não desperdiçar recursos em trabalhos adicionais, como recompilar shaders. Os estados suportados incluem: shaders, buffer de vértice e layouts de atributos, layouts de grupos fixos, mesclagem, profundidade e padrões e formatos de saída pós-renderização.
O terceiro recurso do WebGPU é chamado de modelo de ligação, em grande parte
uma reminiscência das ferramentas de agrupamento de recursos presentes no Vulkan.
Para agrupar recursos, o WebGPU fornece um objeto GPUBindGroup, que pode ser associado a outros objetos semelhantes para uso em shaders ao escrever comandos. A criação de tais grupos permite que o driver execute as ações preparatórias necessárias com antecedência e permite que o navegador altere as ligações de recursos entre chamadas de desenho com muito mais rapidez. O layout das vinculações de recursos pode ser predefinido usando o objeto GPUBindGroupLayout.
No Firefox, para habilitar WebGPU em about:config, existe uma configuração “dom.webgpu.enabled”. A renderização CanvasContext também requer que a composição esteja habilitada
Fonte: opennet.ru