Suporte para WebGPU foi adicionado nas versões noturnas do Firefox

Em noturnos compilações do Firefox foi introduzida suporte à especificação WebGPU, fornecendo uma interface de programação para processamento de gráficos 3D e computação no lado da GPU, conceitualmente semelhante ao API Vulkan, Metal e Direct3D 12. A especificação é desenvolvida pela Mozilla, Google, Apple, Microsoft e representantes da comunidade na grupo de trabalho, criado sob a organização W3C.

A tarefa principal do WebGPU é criar uma interface de programação segura, acessível, portátil e de alto desempenho para uso na plataforma Web das tecnologias e capacidades de gráficos 3D fornecidas pelas APIs gráficas do sistema moderno, como Direct3D 12 no Windows, Metal no macOS e Vulkan no Linux. Conceitualmente, o WebGPU difere do WebGL de forma semelhante a como o Vulkan difere do OpenGL, e não se baseia em uma API gráfica específica, mas apresenta uma camada universal que, de forma geral, utiliza os mesmos primitivos de baixo nível disponíveis no Vulkan, Metal e Direct3D.

O WebGPU oferece às aplicações em JavaScript meios para um controle de nível mais baixo sobre a organização, processamento e transmissão de comandos para a GPU, gerenciamento de recursos relacionados, memória, buffers, objetos de textura e sombreados gráficos compilados. Essa abordagem permite alcançar um desempenho mais alto em aplicações gráficas ao reduzir a sobrecarga e aumentar a eficiência no uso da GPU.

O WebGPU possibilita a criação de projetos 3D complexos completos para a Web, funcionando tão bem quanto programas isolados que interagem diretamente com Vulkan, Metal ou Direct3D, mas sem estar vinculado a plataformas específicas. O WebGPU também oferece capacidades adicionais ao portar programas gráficos nativos para uma forma capaz de operar em base a tecnologias web, utilizando a tecnologia WebAssembly. Além dos gráficos 3D, o WebGPU abrange também as capacidades relacionadas ao descarregamento de computações para a GPU e ao suporte para desenvolvimento de sombreados. Sombreados podem podem ser criados na linguagem WebGPU Shading Language ou definidos em um formato intermediário SPIR-V, após o que são traduzidos para linguagens de sombreados suportadas pelos drivers atuais.

No WebGPU, há um gerenciamento separado de recursos, trabalhos preparatórios e transmissão de comandos para a GPU (no WebGL, um único objeto era responsável por tudo ao mesmo tempo). Três contextos separados são fornecidos:
GPUDevice para a criação de recursos, como texturas e buffers; GPUCommandEncoder para codificar comandos individuais, incluindo estágios de renderização e computação; GPUCommandBuffer para ser colocado em fila para execução na GPU. O resultado pode ser renderizado em uma área associada a um ou mais elementos de canvas, ou processado sem saída (por exemplo, ao executar tarefas de computação). A divisão de estágios facilita a separação da criação de recursos e operações preparatórias em diferentes manipuladores que podem ser executados em threads diferentes.

A segunda diferença do WebGPU em relação ao WebGL é a abordagem distinta para o tratamento de estados. O WebGPU introduz dois objetos — GPURenderPipeline e GPUComputePipeline, que permitem combinar diferentes estados previamente definidos pelo desenvolvedor, o que evita que o navegador desperdice recursos em trabalhos adicionais, como recompilação de shaders. Entre os estados suportados estão: shaders, layouts de buffers de vértices e atributos, layouts de grupos anexados, mistura, profundidade e padrões, formatos de saída após a renderização.

A terceira característica do WebGPU é chamada de modelo de vinculação, que se assemelha muito
aos recursos de agrupamento presentes no Vulkan.
Para agrupar recursos no WebGPU, é fornecido o objeto GPUBindGroup, que durante a gravação de comandos pode ser vinculado a outros objetos semelhantes para uso em shaders. A criação de tais grupos permite que o driver execute antecipadamente as ações preparatórias necessárias e possibilita ao navegador alterar as vinculações de recursos de forma significativamente mais rápida entre chamadas de renderização. O layout das vinculações de recursos pode ser definido com antecedência usando o objeto GPUBindGroupLayout.

Suporte para WebGPU foi adicionado nas versões noturnas do Firefox

No Firefox, para habilitar o WebGPU em about:config, existe a configuração "dom.webgpu.enabled". Para renderização do CanvasContext, também é necessário habilitar o sistema de composição WebRender ("gfx.webrender.all" em about:config), escrito na linguagem Rust e que desloca para a GPU as operações de renderização do conteúdo da página. A implementação do WebGPU é baseada no código do projeto
wgpu, escrito em Rust e capaz de operar sobre as APIs DX12, Vulkan e Metal em Linux, Android, Windows e macOS (o suporte ao DX11 e OpenGL ES 3.0 também está em desenvolvimento). Paralelamente, outra implementação está sendo desenvolvida pela Google, que está disponível na ramo Canary O Chromium é ativado através da flag «chrome://flags/#enable-unsafe-webgpu», mas atualmente funciona apenas no macOS e no Windows.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster