UAV
UAV (Unordered Access View) é um mecanismo nas APIs Direct3D e Vulkan que permite aos shaders escreverem dados em recursos de memória da GPU sem uma sequência de acesso rígida. Diferente dos buffers e texturas tradicionais, que são apenas para leitura nos shaders de pixel e vértice, os UAVs suportam leitura e escrita simultânea a partir de múltiplas threads de shader.
Principais Características do UAV
- Acesso Arbitrário – Os dados podem ser lidos e escritos em qualquer ordem, tornando os UAVs ideais para cálculos paralelos.
- Suporte a Múltiplos Tipos de Recursos – UAVs podem ser aplicados a texturas, buffers e outros recursos de memória da GPU.
- Uso em Compute Shaders – UAVs são amplamente utilizados em Compute Shaders, onde grandes volumes de dados precisam ser escritos sem uma estrutura rígida de acesso.
- Compatibilidade com Diferentes Estágios do Pipeline – No Direct3D 12 e Vulkan, os UAVs podem ser usados não apenas em Compute Shaders, mas também em Pixel e até Geometry Shaders.
Onde os UAVs são Utilizados?
- Iluminação Baseada em Física – Permite que os shaders armazenem cálculos intermediários de iluminação global.
- Pós-Processamento – Efeitos como desfoque gaussiano ou profundidade de campo podem utilizar UAVs para acelerar os cálculos.
- Geração e Mapeamento de Texturas – Usado em técnicas como Screen Space Reflections (SSR) ou voxelização.
- Simulações Físicas – Aplicado no processamento de sistemas dinâmicos, como partículas ou fluidos.
Exemplo de Código
Um exemplo de criação de um UAV para um buffer no Direct3D 12:
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER;
uavDesc.Format = DXGI_FORMAT_UNKNOWN;
uavDesc.Buffer.FirstElement = 0;
uavDesc.Buffer.NumElements = elementCount;
uavDesc.Buffer.StructureByteStride = sizeof(MyStruct);
uavDesc.Buffer.CounterOffsetInBytes = 0;
device->CreateUnorderedAccessView(buffer, nullptr, &uavDesc, uavHandle);
Conclusão
O UAV (Unordered Access View) é uma ferramenta essencial para operações de memória na GPU, proporcionando flexibilidade na escrita e no processamento de dados. Devido ao seu poder e versatilidade, os UAVs são amplamente utilizados em renderização, simulações e outras tarefas computacionalmente intensivas.