Pourquoi est-il important d'avoir des cibles de rendu avec la même taille de bit?

10

Je pense actuellement au type de GBuffer dont j'ai besoin pour l'ombrage différé, c'est pourquoi j'ai également essayé de me documenter en ligne sur les plus courants et leur format.

La plupart des GBuffer que j'ai vus utilisaient la même taille de bit pour chaque cible de rendu, conduisant également souvent à des canaux inutilisés. Cependant, comme première supposition pour mon GBuffer, sur le papier, j'ai besoin de deux cibles 24 bits et deux 32 unités ou trois 24 et une 32.

Je comprends que le fait d'avoir la même "taille" pour chaque pièce jointe peut être mieux aligné, mais en pratique est-il préférable de gaspiller les canaux (ou de les réserver pour une utilisation future) et d'avoir tous les RT de la même taille ou devrais-je utiliser exactement ce dont j'ai besoin? Dans le premier cas, pourquoi c'est un tel avantage, les 24 bits seront-ils remplacés par 32 de toute façon?

cifz
la source

Réponses:

9

Je comprends que le fait d'avoir la même "taille" pour chaque pièce jointe peut être mieux aligné, mais en pratique est-il préférable de gaspiller les canaux (ou de les réserver pour une utilisation future) et d'avoir tous les RT de la même taille ou devrais-je utiliser exactement ce dont j'ai besoin?

Il est préférable d'avoir des cibles de rendu alignées 32 bits unifiées, même si cela signifie «gaspiller» de la mémoire. Ce sera beaucoup plus rapide que d'avoir une mémoire non alignée sur 32 bits. De plus, vous n'aurez pas la peine de prendre en charge plusieurs types de tampons, la copie et la combinaison de tampons seront plus faciles car vous n'aurez pas à convertir entre plusieurs types.

32 bits est natif pour les GPU et les CPU, vous réduirez donc le nombre de cycles requis pour lire la mémoire. Les GPU essaieront naturellement de lire 32 bits, si vous essayez de lire une adresse mémoire non alignée, telle que 24 bits alignés, les GPU liront 32 bits puis décaleront les octets indésirables.

Voici un article détaillé sur la raison pour laquelle l'alignement de la mémoire est important (même s'il parle de CPU et non de GPU, le concept de haut niveau s'applique toujours.)

Les 24 bits seront-ils remplacés par 32 de toute façon?

Certains GPU le remplissent, mais il ne peut pas être garanti, il se trouve donc dans la zone d'implémentation du pilote / GPU. Vous devez donc profiler et vérifier les résultats.

PS: 32 bits ou 64 bits selon l'architecture.

concept3d
la source
5
et s'ils sont tous de la même taille de bit, vous pouvez les fusionner sans avoir besoin de les convertir
ratchet freak