同じビットサイズのレンダーターゲットが重要なのはなぜですか?


10

現在、遅延シェーディングに必要なGBufferのタイプを考えているので、最も一般的なものとそのフォーマットについてオンラインでドキュメント化しようとしました。

私が見たほとんどのGBufferは、各レンダーターゲットに同じビットサイズを使用しており、多くの場合、未使用のチャネルにもつながります。しかし、私のGBufferの最初の推測として、紙の上では、2つの24ビットターゲットと2つの32ターゲット、または3つの24と1 32が必要です。

各添付ファイルを同じ「サイズ」にするとより適切に位置合わせできることを理解していますが、実際には、チャネルを無駄にして(または将来の使用のために予約して)すべてのRTを同じサイズにするか、必要なものだけを使用する方が良いですか?前者の場合、なぜそのような利点があるのか​​、とにかく24ビットのものは32にパディングされるのでしょうか?

回答:


9

各添付ファイルを同じ「サイズ」にするとより適切に位置合わせできることを理解していますが、実際には、チャネルを無駄にして(または将来の使用のために予約して)すべてのRTを同じサイズにするか、必要なものだけを使用する方が良いですか?

一部のメモリを「浪費する」ことを意味する場合でも、統一された32ビットに揃えられたレンダーターゲットを使用することをお勧めします。これは、非32ビットアライメントのメモリよりもはるかに高速です。また、複数のタイプのバッファをサポートするという問題は発生しません。複数のタイプ間で変換する必要がないため、バッファのコピーと結合が簡単になります。

32ビットはGPUとCPUのネイティブであるため、メモリを読み取るために必要なサイクル数を減らすことができます。GPUは自然に32ビットを読み取ろうとしますが、24ビット境界などの非境界のメモリアドレスを読み取ろうとすると、GPUは32ビットを読み取ってから、不要なバイトをシフトアウトします。

ここで詳細な記事なぜメモリアライメント事項の(それがないのGPUハイレベルの概念はまだ適用されたCPUについて語っ本家。)

とにかく、24ビットのものは32に埋め込まれますか?

一部のGPUはパディングしますが、保証されないため、ドライバー/ GPU実装領域に配置されます。したがって、結果をプロファイルして確認する必要があります。

PS:アーキテクチャに応じて32ビットまたは64ビット。


5
そして、それらがすべて同じビットサイズである場合、変換する必要なくそれらを埋めることができます
ラチェットフリーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.