W3C revela rascunho do padrão WebGPU

O W3C lançou os primeiros rascunhos das especificações WebGPU e WebGPU Shading Language (WGSL), que definem APIs para executar operações de GPU, como renderização e computação, bem como uma linguagem de shader para escrever programas que rodam na GPU. conceitualmente semelhante às APIs Vulkan, Metal e Direct3D 12. As especificações foram preparadas por um grupo de trabalho que incluía engenheiros da Mozilla, Google, Apple e Microsoft.

Conceitualmente, o WebGPU difere do WebGL da mesma forma que a API gráfica Vulkan difere do OpenGL, mas não é baseado em uma API gráfica específica, mas é uma camada universal que usa as mesmas primitivas de baixo nível encontradas no Vulkan, Metal e Direto3D. WebGPU fornece aplicativos JavaScript com controle de baixo nível 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 possibilita a criação de projetos 3D complexos 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 para portar programas gráficos nativos para um formato habilitado para web por meio de compilação no WebAssembly. Além dos gráficos 3D, o WebGPU também inclui recursos relacionados ao descarregamento de cálculos para a GPU e à execução de shaders.

Principais recursos do WebGPU:

  • 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

Adicionar um comentário