Integração com WebCodecs
A WebGPU expõe uma API para criar "textura externa" opaca Objetos de HTMLVideoElement
a importExternalTexture()
. É possível usar esses objetos para criar amostras dos frames de vídeo de maneira eficiente, possivelmente sem cópia, diretamente dos dados do modelo de cores YUV de origem.
No entanto, a especificação da WebGPU inicial não permitia a criação de objetos GPUExternalTexture
a partir de objetos VideoFrame
do WebCodecs. Esse recurso é importante para apps avançados de processamento de vídeo que já usam o WebCodecs e gostariam de integrar a WebGPU no pipeline de processamento de vídeo. A integração com o WebCodecs adiciona suporte ao uso de um VideoFrame
como origem para chamadas GPUExternalTexture
e copyExternalImageToTexture()
. Veja o exemplo abaixo e a entrada do chromestatus.
// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);
// Create texture from VideoFrame.
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.
Confira o exemplo experimental Upload de vídeo com WebCodecs para testar.
Dispositivo perdido retornado por GPUAdapter requestDevice().
Se o método requestDevice()
no GPUAdapter
falhar porque já foi usado para criar um GPUDevice
, ele será atendido com um GPUDevice
imediatamente marcado como perdido, em vez de retornar uma promessa que será rejeitada com null
. Consulte issue chromium:1234617.
const adapter = await navigator.gpu.requestAdapter();
const device1 = await adapter.requestDevice();
// New! The promise is not rejected anymore with null.
const device2 = await adapter.requestDevice();
// And the device is immediately marked as lost.
const info = await device2.lost;
Manter a reprodução de vídeo suave se importExternalTexture() for chamada
Quando importExternalTexture()
é chamado com uma HTMLVideoElement
, a reprodução do vídeo associada não é mais limitada quando o vídeo não está visível na janela de visualização. Consulte problema chromium:1425252.
Conformidade com as especificações
O argumento message
no construtor GPUPipelineError()
é opcional. Consulte alterar chromium:4613967.
Um erro é disparado ao chamar createShaderModule()
se a origem da WGSL code
contiver \0
. Consulte o problema dawn:1345.
O nível máximo padrão de detalhe (lodMaxClamp
) usado ao fazer a amostragem de uma textura com createSampler()
é 32. Consulte alterar chromium:4608063.
Como melhorar a experiência do desenvolvedor
Uma mensagem é exibida no console JavaScript do DevTools para lembrar os desenvolvedores quando eles estiverem usando a WebGPU em uma plataforma sem suporte. Consulte alterar chromium:4589369.
As mensagens de erro de validação do buffer são mostradas instantaneamente no console JavaScript do DevTools quando o getMappedRange()
falha sem forçar os desenvolvedores a enviar comandos para a fila. Consulte alterar chromium:4597950.
Atualizações do amanhecer
O botão de alternância de depuração disallow_unsafe_apis
foi renomeado como allow_unsafe_apis
e desativado por padrão Essa opção suprime erros de validação em pontos de entrada da API ou combinações de parâmetros que ainda não são considerados seguros. Isso pode ser útil para a depuração.
Consulte o problema dawn:1685.
O atributo source
descontinuado por wgpu::ShaderModuleWGSLDescriptor
foi removido e substituído por code
Veja alterar dawn:130321.
O método wgpu::RenderBundle::SetLabel()
ausente foi implementado. Veja alterar dawn:134502.
Os aplicativos podem solicitar um back-end específico ao receber um adaptador com a opção wgpu::RequestAdapterOptionsBackendType
. Veja um exemplo abaixo e o problema dawn:1875 (link em inglês).
wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;
wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;
// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);
Um novo método SwapChain::GetCurrentTexture()
foi adicionado com outros usos para texturas de cadeia de troca para que o wgpu::Texture
retornado possa ser usado em cópias. Veja um exemplo abaixo e o problema dawn:1551 (link em inglês).
wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();
Isso cobre apenas alguns dos principais destaques. Confira a lista completa de confirmações (link em inglês).
Novidades da WebGPU
Uma lista de tudo o que foi abordado na série O que há de novo na WebGPU.
Chrome 128
- Fazendo testes com 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 amostragem de WGSL é interpolada primeiro e
- Atualizações do amanhecer
Chrome 127
- Suporte experimental para OpenGL ES no Android
- Atributo de informações do GPUAdapter
- Melhorias na interoperabilidade do WebAssembly
- Erros aprimorados do codificador de comando
- Atualizações do amanhecer
Chrome 126
- Aumentar o limite de maxTextureArrayLayers
- Otimização do upload de buffer para back-end do Vulkan
- Melhorias no tempo de compilação do sombreador
- Os buffers de comando enviados precisam ser exclusivos
- Atualizações do amanhecer
Chrome 125
- Subgrupos (recurso em desenvolvimento)
- Renderizar uma fração de textura 3D
- Atualizações do amanhecer
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 amanhecer
Chrome 123
- Suporte para funções integradas do DP4a na WGSL
- Parâmetros de ponteiro irrestritos na WGSL
- Sintaxe de açúcar para desreferenciar compostos na WGSL (link em inglês)
- Estado somente leitura separado para aspectos de estêncil e de profundidade
- Atualizações do amanhecer
Chrome 122
- Expandir o alcance com o modo de compatibilidade (recurso em desenvolvimento)
- Aumentar o limite de maxVertexAttributes
- Atualizações do amanhecer
Chrome 121
- Suporte à WebGPU no Android
- Usar DXC em vez de FXC para compilação de sombreador 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 GPUExternalTexture
- Informações sobre heaps de memória
- Atualizações do amanhecer
Chrome 120
- Suporte para valores de ponto flutuante de 16 bits na WGSL
- Supere os limites
- Mudanças no estado de profundidade do estêncil
- Atualizações de informações sobre os adaptadores
- Quantização de consultas de carimbo de data/hora
- Recursos para fazer faxina
Chrome 119
- Texturas flutuantes filtráveis de 32 bits
- 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 à textura de armazenamento somente leitura e leitura-gravação
- Atualizações do amanhecer
Chrome 117
- Não definir buffer de vértice
- Cancelar configuração do grupo de vinculação
- 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
- Pipelines em cache com layout gerado automaticamente
- Atualizações do amanhecer
Chrome 116
- Integração com WebCodecs
- Dispositivo perdido retornado pelo GPUAdapter
requestDevice()
- Manter a reprodução de vídeo suave se
importExternalTexture()
for chamado - Conformidade com especificações
- Como melhorar a experiência do desenvolvedor
- Atualizações do amanhecer
Chrome 115
- Extensões de idiomas da WGSL compatíveis
- 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 amanhecer
Chrome 114
- Otimizar o JavaScript
- getCurrentTexture() em uma tela não configurada gera InvalidStateError
- Atualizações da WGSL
- Atualizações do amanhecer