GPUはテクスチャとVRAMをどのように処理しますか?


18

実際には、相互に関連する一連の質問です。

  1. 圧縮パイプライン(dxt5 / dxt1など)は、レンダリングパイプラインを通過するときに完全に解凍されますか?

  2. 最初の質問の答えが正しい場合、いくつかの大きな非圧縮テクスチャのメモリはどのように管理されますか?

  3. フレームバッファーは最新のGPUのVRAMとは異なりますか?

回答:


29

DXT / BC / ETCなどのGPU圧縮テクスチャ形式は、圧縮された形式から直接読み取るように特別に設計されています。生のRGBAバッファに展開する必要はありません。

これが機能する方法は、テクセルの各ブロック(多くの場合4x4)が一定のビット数を占有するため(特定のテクセルを探すためにバッファー内をどれだけ正確に移動するかを知っています)、これらのブロックは周囲のすべてを読み取らずに圧縮解除できます/前のテクスチャ情報。GPUには、シェーダーからのテクスチャサンプリング要求を満たすために、必要に応じて要求されたテクセルブロックのみを解凍する特殊なハードウェアが含まれています。

これは、各テクセルが占有するスペースの量が画像全体で異なる場合があるjpgやpngなどのフォーマットとは対照的です(詳細な領域はより多くのデータを取得し、予測可能な領域はより少ない領域を占有します)。画像全体、または少なくともその大部分/分散チャンク。ただし、テクスチャの予測可能な領域を選択的に圧縮できるため、ディスクに保存したり、GPUに適した形式から得られるよりもネットワーク経由で送信したりするために、画像を小さいサイズに圧縮する傾向があります。用途ごとに異なる戦略。


一般的に、複数の質問は複数の投稿を介して行う必要がありますが、これは非常に短い回答なので、ポイント3にもヒットします。

フレームバッファ」は、画面に表示したい合成画像を保存するために使用することにしたビデオメモリの特定のビットです。JarkkoLの回答の詳細に注意してください。特殊なハードウェアでは、レンダーターゲットの帯域幅のニーズに最適化された利用可能なビデオメモリの特定の部分にこのバッファを配置することを選択できます。


圧縮アルゴリズムのそのリンクは、非常に役立ち、詳細です。素敵な発見!
コバーン

7

あなたの質問に対する答えは、本当にプラットフォームに依存します。通常、BC形式はメモリ内に圧縮形式で保持され、GPUテクスチャユニットによって圧縮解除が実行されますが、例外があります。つまり、Xbox 360は、TUがデータをフェッチする前に完全な4x4ピクセルBCブロックを解凍してキャッシュするため、キャッシュの使用量が増大することが知られています。ただし、ロード時にテクスチャ全体をvramに解凍するプラットフォームは知りませんが、メモリと帯域幅の使用量が増えているため、それを疑います。

同じことがフレームバッファにも当てはまります-プラットフォームに依存します。Xbox 360には、レンダーターゲットに使用する必要があった10 MBの専用高帯域幅EDRAMがありました。Xbox Oneでは、高帯域幅のためにレンダーターゲットに適した32MBの特別なESRAMがまだあります(Xbox 360とは異なり、そこから取得することもできます)が、レンダーターゲットは通常のDDR3メモリに常駐することもできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.