A Mozilla decidiu habilitar o suporte para a API WebGPU e WGSL (WebGPU Shading Language) no Firefox. Para a plataforma Windows O suporte a WebGPU será ativado por padrão no Firefox 141, com lançamento previsto para 22 de julho. A partir daí, o suporte a WebGPU deverá ser habilitado nas versões subsequentes nos meses seguintes: Linux и macOSE depois de algum tempo na versão para a plataforma AndroidPara ativar o WebGPU manualmente, você pode usar os parâmetros "dom.webgpu.enabled" e "gfx.webrender.all" na página about:config.
No Chrome, o suporte a WebGPU foi oferecido por padrão na versão 113, lançada em maio de 2023. No Safari, o suporte a WebGPU está previsto para ser habilitado por padrão neste outono (o suporte experimental está disponível desde novembro de 2021). No Firefox, o suporte experimental a WebGPU está presente desde 2020, mas só foi habilitado por padrão nas compilações noturnas do Firefox. A implementação de WebGPU no Firefox é baseada no código do projeto WGPU, escrito em Rust e capaz de rodar sobre as APIs gráficas Direct3D 12, Vulkan, OpenGL e Metal.
O WebGPU fornece uma API semelhante ao Vulkan, Metal e Direct3D 12 para executar operações na GPU. Além de gráficos 3D, o WebGPU também abrange recursos relacionados à transferência de cálculos para a GPU e à execução de shaders. Conceitualmente, o WebGPU difere da antiga especificação WebGL da mesma forma que a API gráfica Vulkan difere do OpenGL. Ao mesmo tempo, o WebGPU não se baseia em uma API gráfica específica, mas sim em uma camada universal que utiliza as mesmas primitivas de baixo nível disponíveis no Vulkan, Metal e Direct3D.
A WebGPU permite que aplicativos JavaScript controlem a organização, o processamento e a transmissão de comandos para a GPU, além de gerenciar recursos associados, memória, buffers, objetos de textura e shaders gráficos compilados. Essa abordagem permite maior desempenho de aplicativos gráficos, reduzindo a sobrecarga e aumentando a eficiência do trabalho com a GPU.
Com o WebGPU, você pode criar projetos 3D complexos e independentes de plataforma, com desempenho tão bom quanto programas independentes que utilizam diretamente Vulkan, Metal ou Direct3D. O WebGPU também oferece recursos adicionais para portar programas gráficos nativos para um formato que pode ser executado em navegadores, graças à compilação para WebAssembly.
Principais recursos do WebGPU e diferenças do WebGL:
- Gerenciamento separado de recursos, trabalho preparatório e transmissão de comandos para a GPU (no WebGL um objeto era responsável por tudo ao mesmo tempo). São fornecidos três contextos separados: GPUDevice para criar 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.
- Uma abordagem diferente para processar 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.
- Um modelo de ligação muito parecido com os recursos de agrupamento de recursos do 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.
Fonte: opennet.ru
