Novidades do WebGPU (Chrome 140)

François Beaufort
François Beaufort

Publicado em: 27 de agosto de 2025

Solicitações de dispositivo consomem o adaptador

De acordo com a especificação da WebGPU (link em inglês), um adaptador é marcado como "consumido" após uma solicitação de dispositivo bem-sucedida. Consequentemente, qualquer chamada requestDevice() subsequente usando o mesmo adaptador vai resultar em uma promessa rejeitada. Antes, essas chamadas retornavam um dispositivo perdido na criação. Consulte o problema 415825174.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

await adapter.requestDevice(); // Fails because adapter has been consumed.

Atalho para usar textura onde a visualização de textura é usada

Agora, uma GPUTexture pode ser usada diretamente como um GPUBindingResource para expor ao shader para vinculação. Ele também pode ser usado como um GPURenderPassColorAttachment view, um GPURenderPassColorAttachment resolveTarget e um GPURenderPassDepthStencilAttachment view para melhorar a ergonomia. Isso oferece uma abordagem mais simples do que usar uma GPUTextureView para receber uma visualização padrão. Consulte o problema 425906323.

const bindGroup = myDevice.createBindGroup({
  layout: myPipeline.getBindGroupLayout(0),
  entries: [
    { binding: 0, resource: mySampler },
    { binding: 1, resource: myTexture }, // Same as myTexture.createView()
    { binding: 2, resource: myExternalTexture },
    { binding: 3, resource: myBuffer },
  ],
});

O WGSL textureSampleLevel é compatível com texturas 1D

Agora, as texturas 1D podem ser testadas usando textureSampleLevel() para consistência com texturas 2D. Isso permite fazer uma amostragem de uma textura 1D de um shader de vértice, o que antes só era possível com um shader de fragmento com textureSample(). Consulte o problema 382514673.

Descontinuar o uso de textura de armazenamento somente leitura bgra8unorm

O uso do formato "bgra8unorm" com texturas de armazenamento somente leitura agora está descontinuado. A especificação WebGPU proíbe explicitamente isso, e a permissão anterior no Chrome era um bug, já que esse formato é destinado ao acesso somente gravação e não é portátil. Consulte o problema 427681156.

Remover o atributo isFallbackAdapter do GPUAdapter

Conforme anunciado anteriormente, o atributo isFallbackAdapter do GPUAdapter foi removido. Ele foi substituído pelo atributo isFallbackAdapter do GPUAdapterInfo, que foi introduzido no Chrome 136. Consulte intenção de remoção.

Atualizações do amanhecer

A função wgpuInstanceGetWGSLLanguageFeatures() é usada para receber uma lista de recursos da linguagem WGSL compatíveis com a instância. Antes, ela retornava um valor WGPUStatus. Ele foi atualizado para não retornar um valor, já que não pode falhar. Consulte o problema 429178774.

A função wgpuSurfacePresent() agora retorna um erro WGPUStatus se a superfície não tiver uma textura atual. Consulte o problema 425930323.

Com o novo recurso wgpu::InstanceFeatureName::MultipleDevicesPerAdapter, os adaptadores podem criar vários dispositivos sem serem "consumidos". Consulte o problema 415825174.

A alternância de dispositivo dump_shaders_on_failure permite despejar shaders apenas em caso de falha para fins de depuração. Ele se aplica exclusivamente aos backends D3, mas é possível que seja expandido para outros backends no futuro. Consulte o problema 429187478.

Várias mudanças foram feitas no back-end do Vulkan para reduzir a sobrecarga ao enviar transmissões de renderização, principalmente para melhorar o desempenho em GPUs móveis. Por exemplo: caching VkFramebuffers.

Isso abrange apenas alguns dos principais destaques. Confira a lista completa de commits.

Novidades no WebGPU

Uma lista de tudo o que foi abordado na série O que há de novo no WebGPU.

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113