Combinação de fontes duplas
A combinação de duas saídas de sombreador de fragmentos em um único framebuffer é chamada de mistura de duas fontes. Essa técnica é particularmente útil para aplicativos que exigem operações de mistura complexas, como as baseadas nos modos de mistura Porter-Duff. Ao substituir as passagens de renderização subsequentes por uma única passagem, a mesclagem de duas fontes pode melhorar o desempenho e a flexibilidade.
O novo recurso "dual-source-blending"
da WebGPU permite usar o atributo @blend_src
da WGSL em @location(0)
para denotar o índice de origem da combinação e os seguintes fatores de combinação: "src1"
, "one-minus-src1"
, "src1-alpha"
e "one-minus-src1-alpha"
. Consulte o snippet a seguir, a entrada do chromestatus e o problema 341973423.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["dual-source-blending"],
});
const code = `
enable dual_source_blending;
struct FragOut {
@location(0) @blend_src(0) color : vec4f,
@location(0) @blend_src(1) blend : vec4f,
}
@fragment fn main() -> FragOut {
var output : FragOut;
output.color = vec4f(1.0, 1.0, 1.0, 1.0);
output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
return output;
}
`;
const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...
Melhorias no tempo de compilação de sombreador no Metal
A equipe do Chrome está aprimorando o Tint, o compilador de linguagem de sombreador da WebGPU, introduzindo uma representação intermediária (IR, na sigla em inglês) para dispositivos compatíveis com a WebGPU com back-end Metal. Esse IR, posicionado entre a árvore de sintaxe abstrata (AST, na sigla em inglês) de Tint e o gravador de back-end Metal, tornará o compilador mais eficiente e fácil de manter, beneficiando desenvolvedores e usuários. Os testes iniciais mostram que a nova versão do Tint é até 10 vezes mais rápida ao traduzir os shaders WGSL do Unity para MSL.
Essas melhorias, já acessíveis no Android e no ChromeOS, estão sendo expandidas progressivamente para dispositivos macOS compatíveis com WebGPU com back-end Metal. Consulte o problema 42251016.
Descontinuação do método requestAdapterInfo() do GPUAdapter
O método assíncrono requestAdapterInfo()
do GPUAdapter é redundante, já que os desenvolvedores já podem receber o GPUAdapterInfo de forma síncrona usando o atributo info
do GPUAdapter. Portanto, o método requestAdapterInfo()
GPUAdapter não padrão foi descontinuado. Consulte Intenção de descontinuação.
Atualizações do Dawn
A API C webgpu.h definiu algumas convenções de nomenclatura para estruturas de extensão. Confira as mudanças de nome a seguir e o problema 42241174.
WGPURenderPassDescriptor extensões
|
|
WGPURenderPassDescriptorMaxDrawCount ->
|
WGPURenderPassMaxDrawCount
|
WGPUShaderModuleDescriptor extensões
|
|
WGPUShaderModuleSPIRVDescriptor ->
|
WGPUShaderSourceSPIRV
|
WGPUShaderModuleWGSLDescriptor ->
|
WGPUShaderSourceWGSL
|
WGPUSurfaceDescriptor extensões
|
|
WGPUSurfaceDescriptorFromMetalLayer ->
|
WGPUSurfaceSourceMetalLayer
|
WGPUSurfaceDescriptorFromWindowsHWND ->
|
WGPUSurfaceSourceWindowsHWND
|
WGPUSurfaceDescriptorFromXlibWindow ->
|
WGPUSurfaceSourceXlibWindow
|
WGPUSurfaceDescriptorFromWaylandSurface ->
|
WGPUSurfaceSourceWaylandSurface
|
WGPUSurfaceDescriptorFromAndroidNativeWindow ->
|
WGPUSurfaceSourceAndroidNativeWindow
|
WGPUSurfaceDescriptorFromXcbWindow ->
|
WGPUSurfaceSourceXCBWindow
|
WGPUSurfaceDescriptorFromCanvasHTMLSelector ->
|
WGPUSurfaceSourceCanvasHTMLSelector_Emscripten
|
O tipo de atributo depthWriteEnabled
do WGPUDepthStencilState
muda de booleano para WGPUOptionalBool
para refletir melhor os três estados possíveis (verdadeiro, falso e indefinido), como na API JavaScript. Para saber mais, consulte o snippet de código a seguir e o PR webgpu-headers.
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
Isso abrange apenas alguns dos principais destaques. Confira a lista completa de confirmações.
Novidades na WebGPU
Uma lista de tudo o que foi abordado na série O que há de novo na WebGPU.
Chrome 131
- Distâncias de corte na WGSL
- GPUCanvasContext getConfiguration() (link em inglês)
- As primitivas de ponto e linha não podem ter viés de profundidade
- Funções integradas da verificação inclusiva para subgrupos
- Compatibilidade experimental com o recurso indireto de vários desenhos
- Opção de compilação do módulo do sombreador: matemática rigorosa
- O método requestAdapterInfo() do GPUAdapter foi removido
- Atualizações do Dawn
Chrome 130
- Combinação de duas origens
- Melhorias no tempo de compilação de sombreador no Metal
- Descontinuação do método requestAdapterInfo() do GPUAdapter
- Atualizações do Dawn
Chrome 129
- Suporte a HDR com o modo de mapeamento de tons da tela
- Suporte a subgrupos expandidos
- Atualizações do amanhecer
Chrome 128
- Testar subgrupos
- Suspender o uso da configuração de viés de profundidade para linhas e pontos
- Ocultar aviso de erro não capturado do DevTools se preventDefault
- A WGSL interpola a amostragem primeiro e
- Atualizações do Dawn
Chrome 127
- Suporte experimental para OpenGL ES no Android
- Atributo de informações do GPUAdapter
- Melhorias na interoperabilidade do WebAssembly
- Melhoria nos erros do codificador de comando
- Atualizações do Dawn
Chrome 126
- Aumento do limite de maxTextureArrayLayers
- Otimização de upload de buffer para o back-end do Vulkan
- Melhorias no tempo de compilação do sombreador
- Os buffers de comando enviados precisam ser exclusivos
- Atualizações do Dawn
Chrome 125
Chrome 124
- Texturas de armazenamento somente leitura e leitura/gravação
- Suporte aos service workers e workers compartilhados
- Novos atributos de informações do adaptador
- Correções de bugs
- Atualizações do Dawn
Chrome 123
- Suporte a funções integradas do DP4a no WGSL
- Parâmetros de ponteiro irrestrito na WGSL
- Açúcar sintático para desreferenciar compósitos na WGSL
- Estado somente leitura separado para aspectos de stencil e profundidade
- Atualizações do Dawn
Chrome 122
- Ampliar o alcance com o modo de compatibilidade (recurso em desenvolvimento)
- Aumentar o limite de maxVertexAttributes
- Atualizações do Dawn
Chrome 121
- Suporte à WebGPU no Android
- Usar DXC em vez de FXC para a compilação de shaders no Windows
- Consultas de carimbo de data/hora em passagens de computação e renderização
- Pontos de entrada padrão para módulos de sombreador
- Suporte a display-p3 como espaço de cores de GPUExternalTexture
- Informações sobre heaps de memória
- Atualizações do amanhecer
Chrome 120
- Suporte a valores de ponto flutuante de 16 bits na WGSL
- Superar os limites
- Mudanças no estado do stencil de profundidade
- Atualizações das informações do adaptador
- Quantização de consultas de carimbo de data/hora
- Recursos para fazer faxina
Chrome 119
- Texturas flutuantes de 32 bits com filtro
- Formato de vértice unorm10-10-10-2
- Formato de textura rgb10a2uint
- Atualizações do amanhecer
Chrome 118
- Compatibilidade de HTMLImageElement e ImageData em
copyExternalImageToTexture()
- Suporte experimental para textura de armazenamento de leitura/gravação e somente leitura
- Atualizações do amanhecer
Chrome 117
- Buffer de vértice não definido
- Desvincular grupo
- Silenciar erros da criação de pipeline assíncrono quando o dispositivo for perdido
- Atualizações da criação do módulo de sombreador SPIR-V
- Como melhorar a experiência do desenvolvedor
- Armazenamento em cache de pipelines com layout gerado automaticamente
- Atualizações do Dawn
Chrome 116
- Integração com o WebCodecs
- Dispositivo perdido retornado por GPUAdapter
requestDevice()
- Manter a reprodução de vídeo suave se
importExternalTexture()
for chamado - Conformidade com as especificações
- Como melhorar a experiência do desenvolvedor
- Atualizações do amanhecer
Chrome 115
- Extensões de linguagem WGSL com suporte
- Suporte experimental para Direct3D 11
- Receber uma GPU discreta por padrão com alimentação CA
- Como melhorar a experiência do desenvolvedor
- Atualizações do Dawn
Chrome 114
- Otimizar o JavaScript
- getCurrentTexture() em uma tela não configurada gera um erro InvalidStateError
- Atualizações da WGSL
- Atualizações do Dawn