Integração com o WebCodecs
A WebGPU expõe uma API para criar objetos opacos de "textura externa" de HTMLVideoElement
a importExternalTexture()
. Você pode usar esses objetos para amostrar os frames de vídeo de maneira eficiente, possivelmente sem cópias, diretamente dos dados do modelo de cor 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 apps avançados de processamento de vídeo que já usam WebCodecs e gostariam de integrar o WebGPU no pipeline de processamento de vídeo. A integração com o WebCodecs adiciona suporte para usar um VideoFrame
como a origem de uma chamada GPUExternalTexture
e copyExternalImageToTexture()
. Confira 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 Envio de vídeo com WebCodecs para testar.
Dispositivo perdido retornado por requestDevice() do GPUAdapter
Se o método requestDevice()
em GPUAdapter
falhar porque já foi usado para criar um GPUDevice
, ele agora será atendido com um GPUDevice
marcado imediatamente como perdido, em vez de retornar uma promessa rejeitada com null
. Consulte 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 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 o problema chromium:1425252.
Conformidade com a especificação
O argumento message
no construtor GPUPipelineError()
é opcional. Consulte mudança do Chromium:4613967.
Um erro é disparado ao chamar createShaderModule()
se a origem da WGSL code
contiver \0
. Consulte issue dawn:1345.
O nível máximo de detalhamento padrão (lodMaxClamp
) usado ao amostrar uma textura com createSampler()
é 32. Consulte mudança chromium:4608063.
Melhorar a experiência do desenvolvedor
Uma mensagem é exibida no console JavaScript do DevTools para lembrar os desenvolvedores quando eles estão usando o WebGPU em uma plataforma sem suporte. Consulte mudança chromium:4589369.
As mensagens de erro de validação de buffer são mostradas instantaneamente no console JavaScript do DevTools quando getMappedRange()
falha sem forçar os desenvolvedores a enviar comandos para a fila. Consulte mudança do Chromium:4597950.
Atualizações do Dawn
A chave de depuração disallow_unsafe_apis
foi renomeada como allow_unsafe_apis
e desativada 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
wgpu::ShaderModuleWGSLDescriptor
descontinuado foi removido em favor de code
. Consulte change 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
. Confira 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
de retorno possa ser usado em cópias. Confira um exemplo abaixo e issue dawn:1551.
wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();
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 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 amanhecer
Chrome 129
- Suporte a HDR com modo de mapeamento de tons de 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 o aviso do DevTools de erro não capturado 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 de 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 a 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 irrestritos 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)
- Aumento do 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 pilhas de memória
- Atualizações do Dawn
Chrome 120
- Suporte para valores de ponto flutuante de 16 bits na WGSL
- Superar os limites
- Mudanças no estado de profundidade do estêncil
- Atualizações das informações do adaptador
- Quantização de consultas de carimbo de data/hora
- Recursos de limpeza geral
Chrome 119
- Texturas flutuantes de 32 bits com filtro
- Formato de vértice unorm10-10-10-2
- Formato de textura rgb10a2uint
- Atualizações do Dawn
Chrome 118
- Suporte a HTMLImageElement e ImageData em
copyExternalImageToTexture()
- Suporte experimental à textura de armazenamento somente leitura e leitura/gravação
- Atualizações do Dawn
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 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 Dawn
Chrome 115
- Extensões de linguagem WGSL com suporte
- Suporte experimental para Direct3D 11
- Acessar a GPU discreta por padrão na 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