Informações sobre a integração da especificação de ajuda WebGPU lançada no Firefox nightly builds, que agora é fornece uma interface de programação para processamento de gráficos 3D e computação no lado da GPU, conceitualmente semelhante à API Vulkan, metal e Direct3D 12. A especificação está sendo desenvolvida pela Mozilla, Google, Apple, Microsoft e representantes da comunidade em um grupo de trabalho criado pela organização W3C.
O principal objetivo do WebGPU é criar uma interface de software segura, conveniente, portátil e de alto desempenho para uso na plataforma da web com tecnologia de gráficos 3D e recursos fornecidos por APIs de gráficos de sistema modernos, como Direct3D 12 no Windows, Metal no macOS e Vulkan no Linux.
Conceitualmente, WebGPU difere de WebGL da mesma forma que Vulkan difere de OpenGL e não é baseado em uma API gráfica específica, ao contrário, é uma camada universal, em geral, usando os mesmos primitivos de baixo nível que estão disponíveis em Vulkan, Metal e Direct3D.
No Firefox, a configuração "dom.webgpu.enabled" é fornecida para habilitar WebGPU em cerca de: config. Além de renderizar o CanvasContext, ele também requer a inclusão do sistema de composição do WebRender ("gfx.webrender.all" em about: config).
A implementação WebGPU é baseada no código do projeto wgpu escrito em Rust e pode funcionar com APIs DX12, Vulkan e Metal no Linux, Android, Windows e macOS (suporte DX11 e OpenGL ES 3.0 também está em desenvolvimento).
Sobre a WebGPU
WebGPU fornece aplicativos JavaScript com ferramentas para controle de nível inferior sobre a organização, o processamento e transmissão de comandos para a GPU, gerenciamento de recursos relacionados, memória, buffers, objetos de textura e sombreadores gráficos compilados. Esta abordagem irá permite aplicativos gráficos de alto desempenho reduzindo a sobrecarga e aumentando a eficiência do trabalho com a GPU.
WebGPU torna possível criar projetos 3D complexos completos para a web Eles não têm desempenho pior do que programas autônomos que se comunicam diretamente com Vulkan, Metal ou Direct3D, mas não estão vinculados a plataformas específicas.
também fornece recursos adicionais ao portar programas gráficos nativos para uma forma que pode funcionar com base em tecnologias baseadas na web usando a tecnologia WebAssembly.
Além dos gráficos 3D, WebGPU também cobre as possibilidades associadas à eliminação da computação ao lado da GPU e suporte para o desenvolvimento de shader. Os sombreadores podem ser criados na linguagem de sombreador WebGPU ou especificados no formato intermediário SPIR-V e, em seguida, traduzidos em linguagens de sombreador com suporte pelos drivers atuais.
WebGPU usa gerenciamento de recursos separado, trabalho preparatório e transferência de comando para a GPU (no WebGL, um objeto era responsável por tudo de uma vez). Três contextos separados são fornecidos: GPUDevice para criar recursos como texturas e buffers; GPUCommandEncoder para codificar comandos individuais, incluindo os estágios de renderização e computação; GPUCommandBuffer para enfileirar para execução na GPU.
A segunda diferença entre WebGPU e WebGL é uma abordagem diferente para lidar com estados. Dois objetos são propostos no WebGPU: GPURenderPipeline e GPUComputePipeline, que permitem combinar vários estados predefinidos pelo desenvolvedor, o que permite ao navegador não desperdiçar recursos em trabalhos adicionais, como recompilar shaders. Os estados suportados incluem: sombreadores, buffers de vértice e layouts de atributos, layouts de grupos anexados, combinação, profundidade e padrões, formatos de saída pós-renderização.
A terceira característica do WebGPU é o modelo de ligação, que em muitos aspectos assemelha-se aos meios de agrupar recursos presentes no Vulkan. Para agrupar recursos em grupos, WebGPU fornece um objeto GPUBindGroup que, digitando comandos, pode ser associado a outros objetos semelhantes para uso em sombreadores.
A criação de tais grupos permite que o driver execute as ações preparatórias necessárias com antecedência, e o navegador permite que ele alterne links de recursos entre chamadas pull com muito mais rapidez.
fonte: https://hacks.mozilla.org/