Por que é importante ter destinos de renderização com o mesmo tamanho de bit?

10

Atualmente, estou pensando em que tipo de GBuffer vou precisar para sombreamento diferido, portanto, tentei também me documentar on-line sobre os mais comuns e seu formato.

A maior parte do GBuffer que eu vi utilizava o mesmo tamanho de bit para cada destino de renderização, levando também frequentemente a canais não utilizados. No entanto, como primeira sugestão para o meu GBuffer, no papel, preciso de dois destinos de 24 bits e dois de 32 ou três de 24 e um de 32 bits.

Entendo que ter o mesmo "tamanho" de cada anexo pode ser melhor alinhado, mas, na prática, é melhor desperdiçar canais (ou reservá-los para uso futuro) e ter todos os RTs do mesmo tamanho ou devo usar apenas o necessário? No primeiro caso, por que é tão vantajoso, os de 24 bits serão aumentados para 32 de qualquer maneira?

cifz
fonte

Respostas:

9

Entendo que ter o mesmo "tamanho" de cada anexo pode ser melhor alinhado, mas, na prática, é melhor desperdiçar canais (ou reservá-los para uso futuro) e ter todos os RTs do mesmo tamanho ou devo usar apenas o necessário?

Ter um destino de renderização unificado de 32 bits alinhado é melhor, mesmo que isso signifique "desperdiçar" alguma memória. Isso será muito mais rápido do que ter uma memória alinhada que não seja de 32 bits. Além disso, você não terá problemas para oferecer suporte a vários tipos de buffers; copiar e combinar buffers será mais fácil, pois você não precisará converter entre vários tipos.

32bit é o nativo para GPUs e CPUs, portanto, você reduzirá o número de ciclos necessários para ler a memória. As GPUs tentarão naturalmente ler 32 bits, se você estiver tentando ler um endereço de memória desalinhado, como 24 bits alinhados, as GPUs lerão 32 bits e, em seguida, mudarão bytes indesejados.

Aqui está um artigo detalhado de por que o alinhamento da memória é importante (mesmo que ele fale sobre CPUs e não GPUs, o conceito de alto nível ainda se aplica).

Os de 24 bits serão acolchoados até 32?

Algumas GPUs irão protegê-lo, mas isso não pode ser garantido, portanto fica na área de implementação de driver / GPU. Então você precisa criar um perfil e verificar os resultados.

PS: 32 bits ou 64 bits, dependendo da arquitetura.

concept3d
fonte
5
e se eles são todos do mesmo tamanho pouco você pode blit-los sem a necessidade de converter
aberração catraca