Suporte a HTMLImageElement e ImageData em copyExternalImageToTexture()
O método copyExternalImageToTexture() em GPUQueue permite copiar um snapshot de uma imagem, vídeo ou tela de origem para um determinado GPUTexture. Agora é possível transmitir objetos HTMLImageElement e ImageData como a origem. Confira o exemplo a seguir e o problema chromium:1471372.
// Fetch and decode image. const source = document.createElement("img"); source.src = "my-image.png"; await source.decode(); // Create destination texture. const size = [source.width, source.height]; const texture = myDevice.createTexture({ size, format: "rgba8unorm", usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING, }); // Copies a snapshot taken from the source image into a texture. myDevice.queue.copyExternalImageToTexture({ source }, { texture }, size); Suporte experimental para textura de armazenamento de leitura/gravação e somente leitura
O tipo de vinculação de textura de armazenamento permite realizar leituras de textura sem amostragem e armazenar em posições arbitrárias em shaders. Quando o recurso "chromium-experimental-read-write-storage-texture" está disponível em um GPUAdapter, é possível solicitar um GPUDevice com esse recurso e definir o acesso GPUStorageTexture como "read-write" ou "read-only" ao criar um layout de grupo de vinculação. Antes, isso era restrito ao "write-only".
Para aproveitar esse recurso, ative explicitamente a extensão no código WGSL com enable chromium_experimental_read_write_storage_texture. Quando ativada, é possível usar o qualificador de acesso read_write e read para texturas de armazenamento. As funções integradas textureLoad() e textureStore() se comportam de acordo, e uma nova função integrada textureBarrier() está disponível para sincronizar acessos à memória de textura em um grupo de trabalho. Confira o exemplo a seguir e issue dawn:1972.
Este recurso ainda está em fase de teste e pode mudar. Enquanto ele está sendo padronizado, execute o Chrome com a flag --enable-dawn-features=allow_unsafe_apis para disponibilizá-lo.
const feature = "chromium-experimental-read-write-storage-texture"; const adapter = await navigator.gpu.requestAdapter(); if (!adapter.features.has(feature)) { throw new Error("Read-write storage texture support is not available"); } // Explicitly request read-write storage texture support. const device = await adapter.requestDevice({ requiredFeatures: [feature], }); const bindGroupLayout = device.createBindGroupLayout({ entries: [{ binding: 0, visibility: GPUShaderStage.COMPUTE, storageTexture: { access: "read-write", // <-- New! format: "r32uint", }, }], }); const shaderModule = device.createShaderModule({ code: ` enable chromium_experimental_read_write_storage_texture; @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>; @compute @workgroup_size(1, 1) fn main(@builtin(local_invocation_id) local_id: vec3u) { var data = textureLoad(tex, vec2i(local_id.xy)); data.x *= 2; textureStore(tex, vec2i(local_id.xy), data); }`, }); // You can now create a compute pipeline with this shader module and // send the appropriate commands to the GPU. Atualizações do amanhecer
A API C webgpu.h renomeou os seguintes campos para manter a consistência: requiredFeaturesCount para requiredFeatureCount, pipelineStatisticsCount para pipelineStatisticCount e colorFormatsCount para colorFormatCount. Consulte o problema dawn:146040.
Um novo programa DawnInfo (semelhante ao vulkaninfo) permite listar alternâncias, adaptadores, recursos e limites de adaptadores. Ele está disponível ao criar samples do amanhecer. Confira a saída abaixo, que foi bastante reduzida para ser mais breve. Consulte change dawn:149020.
./out/Debug/DawnInfo Toggles ======= Name: allow_unsafe_apis Suppresses validation errors on API entry points or parameter combinations that aren't considered secure yet. http://crbug.com/1138528 […] Adapter ======= VendorID: 0x106B Vendor: apple Architecture: common-3 DeviceID: 0x0000 Name: Apple M1 Pro Driver description: Metal driver on macOS Version 13.5.1 (Build 22G90) Adapter Type: discrete GPU Backend Type: Metal Power: <undefined> Features ======== * depth_clip_control Disable depth clipping of primitives to the clip volume https://bugs.chromium.org/p/dawn/issues/detail?id=1178 […] Adapter Limits ============== maxTextureDimension1D: 16,384 maxTextureDimension2D: 16,384 […] 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 142
Chrome 141
- Resposta a incidentes de tonalidade concluída
- Análise de intervalo de números inteiros no compilador WGSL
- Atualização do SPIR-V 1.4 para o back-end do Vulkan
- Atualizações do Dawn
Chrome 140
- As solicitações de dispositivos consomem o adaptador
- Abreviação para usar textura onde a visualização de textura é usada
- O WGSL textureSampleLevel é compatível com texturas 1D
- Descontinuar o uso de textura de armazenamento somente leitura bgra8unorm
- Remover o atributo isFallbackAdapter do GPUAdapter
- Atualizações do Dawn
Chrome 139
- Suporte a texturas 3D para formatos compactados BC e ASTC
- Novo recurso "core-features-and-limits"
- Teste de origem para o modo de compatibilidade da WebGPU
- Atualizações do Dawn
Chrome 138
- Abreviatura para usar o buffer como um recurso de vinculação
- Mudanças nos requisitos de tamanho para buffers mapeados na criação
- Relatório de arquitetura para GPUs recentes
- Descontinuar o atributo isFallbackAdapter do GPUAdapter
- Atualizações do Dawn
Chrome 137
- Usar a visualização de textura para vinculação externalTexture
- Buffers são copiados sem especificar offsets e tamanho
- WGSL workgroupUniformLoad usando ponteiro para atômico
- Atributo powerPreference do GPUAdapterInfo
- Remover o atributo compatibilityMode de GPURequestAdapterOptions
- Atualizações do Dawn
Chrome 136
- Atributo isFallbackAdapter do GPUAdapterInfo
- Melhorias no tempo de compilação de sombreadores no D3D12
- Salvar e copiar imagens da tela
- Remover restrições do modo de compatibilidade de Lift
- Atualizações do Dawn
Chrome 135
- Permitir a criação de um layout de pipeline com um layout de grupo de vinculação nulo
- Permitir que viewports se estendam além dos limites dos destinos de renderização
- Acesso mais fácil ao modo de compatibilidade experimental no Android
- Remover o limite maxInterStageShaderComponents
- Atualizações do Dawn
Chrome 134
- Melhorar as cargas de trabalho de machine learning com subgrupos
- Remover o suporte a tipos de textura filtráveis de ponto flutuante como combináveis
- Atualizações do Dawn
Chrome 133
- Outros formatos de vértice unorm8x4-bgra e de um componente
- Permitir que limites desconhecidos sejam solicitados com valor indefinido
- Mudanças nas regras de alinhamento da WGSL
- Ganhos de performance da WGSL com descarte
- Usar displaySize do VideoFrame para texturas externas
- Processar imagens com orientações não padrão usando copyExternalImageToTexture
- Melhorar a experiência do desenvolvedor
- Ativar o modo de compatibilidade com featureLevel
- Limpeza de recursos experimentais de subgrupo
- Descontinuar o limite maxInterStageShaderComponents
- Atualizações do Dawn
Chrome 132
- Uso da visualização de textura
- Fusão de texturas de ponto flutuante de 32 bits
- Atributo adapterInfo do GPUDevice
- Configurar o contexto da tela com formato inválido gera um erro de JavaScript
- Restrições de filtragem do sampler em texturas
- Experimentos com subgrupos estendidos
- Melhorar a experiência do desenvolvedor
- Suporte experimental para formatos de textura normalizados de 16 bits
- Atualizações do Dawn
Chrome 131
- Distâncias de corte em WGSL
- GPUCanvasContext getConfiguration()
- Primitivos de ponto e linha não podem ter viés de profundidade
- Funções integradas de verificação inclusiva para subgrupos
- Suporte experimental para multi-draw indirect
- Opção de compilação do módulo de sombreador strict math
- Remover requestAdapterInfo() do GPUAdapter
- Atualizações do Dawn
Chrome 130
- Combinação de duas origens
- Melhorias no tempo de compilação de sombreadores no Metal
- Descontinuação do requestAdapterInfo() do GPUAdapter
- Atualizações do Dawn
Chrome 129
- Suporte a HDR com modo de mapeamento de tons da tela
- Suporte expandido para subgrupos
- Atualizações do Dawn
Chrome 128
- Testes com subgrupos
- Descontinuar a definição de bias de profundidade para linhas e pontos
- Ocultar aviso do DevTools de erro não capturado se preventDefault
- A WGSL primeiro faz a amostragem de interpolação 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 comandos
- Atualizações do Dawn
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 shader
- 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 shared workers
- Novos atributos de informações do adaptador
- Correções de bugs
- Atualizações do Dawn
Chrome 123
- Suporte a funções integradas DP4a em WGSL
- Parâmetros de ponteiro irrestritos na WGSL
- Açúcar sintático para desreferenciar composições em WGSL
- Estado somente leitura separado para aspectos de estêncil 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 compilação de shader no Windows
- Consultas de carimbo de data/hora em transmissões de computação e renderização
- Pontos de entrada padrão para módulos de shader
- Suporte a display-p3 como espaço de cores GPUExternalTexture
- Informações de heaps de memória
- Atualizações do Dawn
Chrome 120
- Suporte a valores de ponto flutuante de 16 bits na WGSL
- Supere os limites
- Mudanças no estado de estêncil de profundidade
- Atualizações de informações do adaptador
- Quantização de consultas de carimbo de data/hora
- Recursos de faxina geral
Chrome 119
- Texturas de ponto flutuante de 32 bits filtráveis
- 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 para textura de armazenamento de leitura/gravação e somente leitura
- Atualizações do Dawn
Chrome 117
- Remover buffer de vértice
- Remover a definição do grupo de vinculação
- Silenciar erros da criação de pipeline assíncrono quando o dispositivo é perdido
- Atualizações na criação de módulos de sombreador SPIR-V
- Melhorar a experiência do desenvolvedor
- Pipelines de cache com layout gerado automaticamente
- Atualizações do Dawn
Chrome 116
- Integração do WebCodecs
- Dispositivo perdido retornado por GPUAdapter
requestDevice() - Manter a reprodução de vídeo fluida se
importExternalTexture()for chamado - Conformidade com as especificações
- Melhorar a experiência do desenvolvedor
- Atualizações do Dawn
Chrome 115
- Extensões de linguagem WGSL compatíveis
- Suporte experimental para Direct3D 11
- Usar GPU discreta por padrão com alimentação CA
- Melhorar a experiência do desenvolvedor
- Atualizações do Dawn
Chrome 114
- JavaScript do Optimize
- getCurrentTexture() em telas não configuradas gera InvalidStateError
- Atualizações da WGSL
- Atualizações do Dawn