Integração com o WebCodecs
A WebGPU expõe uma API para criar objetos de "textura externa" opacos de HTMLVideoElement
a importExternalTexture()
. É possível usar esses objetos para extrair uma amostra dos frames do vídeo de maneira eficiente, possivelmente de maneira não direta nos dados do modelo de cores YUV de origem.
No entanto, a especificação inicial da WebGPU não permitia a criação de objetos GPUExternalTexture
a partir de objetos VideoFrame
do WebCodecs. Esse recurso é importante para aplicativos avançados de processamento de vídeo que já usam o WebCodecs e gostariam de integrar a WebGPU ao pipeline de processamento de vídeo. A integração com o WebCodecs adiciona suporte ao uso de um VideoFrame
como origem para chamadas de GPUExternalTexture
e copyExternalImageToTexture()
. Veja o exemplo a seguir e a entrada 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 o WebCodecs para brincar.
Dispositivo perdido retornado por requestDevice() do GPUAdapter
Se o método requestDevice()
em 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 o problema 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 do vídeo sem problemas se o método importExternalTexture() for chamado.
Quando importExternalTexture()
é chamado com um HTMLVideoElement
, a reprodução do vídeo associado não é mais limitada quando o vídeo não está visível na janela de visualização. Consulte o problema chromium:1425252.
Conformidade com especificações
O argumento message
no construtor GPUPipelineError()
é opcional. Consulte alterar chromium:4613967.
Um erro será disparado ao chamar createShaderModule()
se o code
de origem da WGSL contiver \0
. Consulte problema dawn:1345.
O nível máximo de detalhes (lodMaxClamp
) padrão usado ao criar uma amostra de uma textura com createSampler()
é 32. Consulte alterar chromium:4608063.
Aprimoramento da experiência do desenvolvedor
Uma mensagem é exibida no console JavaScript do DevTools para lembrar os desenvolvedores quando eles estão 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 a getMappedRange()
falha sem forçar os desenvolvedores a enviar comandos para a fila. Consulte alterar chromium:4597950.
Atualizações ao amanhecer
O botão de alternância de depuração disallow_unsafe_apis
foi renomeado como allow_unsafe_apis
e definido como 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 consideradas seguras. Pode ser útil para depuração.
Consulte problema dawn:1685.
O atributo source
descontinuado do wgpu::ShaderModuleWGSLDescriptor
foi removido e substituído por code
Consulte mudar amanhecer:130321.
O método wgpu::RenderBundle::SetLabel()
ausente foi implementado. Consulte Mudar amanhecer: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 issue dawn:1875.
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 issue dawn:1551.
wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();
Esses são 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 125
Chrome 124
- Texturas de armazenamento somente leitura e leitura/gravação
- Suporte para 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 irrestrito na WGSL
- Simplificação da sintaxe para desreferenciar compostos na WGSL
- Separar o estado somente leitura para aspectos de estêncil e profundidade
- Atualizações do amanhecer
Chrome 122
- Expandir o alcance com o modo de compatibilidade (recurso em desenvolvimento)
- Aumentar o limite maxVertexAttributes
- Atualizações do amanhecer
Chrome 121
- Suporte para 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
Google Chrome 120
- Suporte para valores de ponto flutuante de 16 bits na WGSL
- Supere os limites
- Mudanças no estado do estêncil de profundidade
- Atualizações de informações sobre os adaptadores
- Quantização de consultas de carimbo de data/hora
- Recursos para limpeza de primavera
Chrome 119
- Texturas flutuantes de 32 bits filtráveis
- Formato de vértice unorm10-10-10-2
- Formato de textura rgb10a2uint
- Atualizações do amanhecer
Chrome 118
- Suporte para HTMLImageElement e ImageData no
copyExternalImageToTexture()
- Suporte experimental para textura de leitura/gravação e armazenamento somente leitura
- Atualizações do amanhecer
Chrome 117
- Buffer de vértice não definido
- Grupo de vinculação não definido
- Silenciar erros da criação de pipeline assíncrono quando o dispositivo é perdido
- Atualizações na criação do módulo de sombreador SPIR-V
- Melhorias na experiência do desenvolvedor
- Pipelines de armazenamento em cache com layout gerado automaticamente
- Atualizações do amanhecer
Chrome 116
- Integração do WebCodecs
- Dispositivo perdido retornado pelo GPUAdapter
requestDevice()
- Manter a reprodução do vídeo suave se
importExternalTexture()
for chamado - Conformidade com especificações
- Melhorias na experiência do desenvolvedor
- Atualizações do amanhecer
Chrome 115
- Extensões de idioma da WGSL compatíveis
- Suporte experimental para Direct3D 11
- Receber GPU discreta por padrão com alimentação CA
- Melhorias na experiência do desenvolvedor
- Atualizações do amanhecer
Chrome 114
- Optimize JavaScript
- getCurrentTexture() na tela não configurada gera InvalidStateError.
- Atualizações da WGSL
- Atualizações do amanhecer