As compilações noturnas do Firefox agora incluem suporte para WebGPU

В todas as noites Compilações do Firefox apareceu suporte de especificação WebGPU, que fornece uma interface de programação para processamento gráfico 3D e computação no lado da GPU, conceitualmente semelhante à API Vulcão, Metal и Direct3D 12. A especificação está sendo desenvolvida pela Mozilla, Google, Apple, Microsoft e membros da comunidade em grupo de trabalho, criado pela organização W3C.

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 lata ser criado na linguagem de sombreamento WebGPU ou especificado no formato SPIR-V intermediário e, em seguida, traduzido para linguagens de sombreador suportadas pelos drivers atuais.

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.

As compilações noturnas do Firefox agora incluem suporte para WebGPU

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 WebRender (“gfx.webrender.all” em about:config), escrito em Rust e terceirizando as operações de renderização de conteúdo da página para a GPU. A implementação do WebGPU é baseada no código do projeto
wgpu, escrito em Rust e capaz de rodar sobre as APIs DX12, Vulkan e Metal em Linux, Android, Windows e macOS (suporte para DX11 e OpenGL ES 3.0 também está em desenvolvimento). Paralelamente, o Google está desenvolvendo outra implementação, que está disponível em Ramo canário Chromium e é habilitado usando o sinalizador “chrome://flags/#enable-unsafe-webgpu”, mas até agora só funciona em macOS e Windows.

Fonte: opennet.ru

Adicionar um comentário