ステージングバッファ

提供: MonoBook
ナビゲーションに移動 検索に移動

ステージングバッファ英語:staging buffer)とは、

という問題を解決すべく確保される中継用のメモリ領域のことである。

CPUはVRAMにアクセスできないのならば、

  • VRAMとメインメモリそれぞれにステージングバッファを確保して、
  • VRAMの内容を丸々コピーすればいい

という考え方である。

コンピュートシェーダーGPGPU)では計算結果を取り出すのに必須の概念である。 なお、CUDAでは全自動で実行されるので意識する必要がない。

概要[編集 | ソースを編集]

CPU上で「構造体配列」などとして作成したバーテックスバッファなどの各種バッファは、GPUに転送されると内部的に「GPUが処理しやすい」ように再配置が行われ、CPU側からは再度読み取れなくなる。基本的には一方通行だ。

しかしながら「再度読み取りたい」という需要が一部にあった。

たとえば高水準の3Dモデルの読み込みライブラリなんかを使用すると、わずか1行で3Dモデルを読み込めたりして便利ではあるが、「頂点の座標」などの細かい情報は得られないことがある。その一方で物理演算エンジンには3Dモデルのその見えない座標情報を求めるものが多い。この両方を使いたい場合にドハマリする。いわゆる「階層化の有害性」だ。

さらにコンピュートシェーダーの普及で「再度読み取りたい」という需要が激増した。


そこで最近のGPUには「CPUが処理しやすい配置に変換コピーするコマンド」が用意されており、そのコピー先となる一時バッファ的な「ステージングバッファ」というものが生まれた。

手順的にはこんな感じだ。

  • ステージングバッファを確保する
  • 頂点バッファなどをステージングバッファに変換コピーする
  • ステージングバッファをメインメモリに単純コピーする
  • ステージングバッファを解放する

GPUメインメモリにアクセスできないのでステージングバッファはVRAM上に確保される。ステージングバッファからメインメモリへの転送は無駄に思えるが構造的に仕方がない。

備考[編集 | ソースを編集]

最近では「ステージングバッファへのコピーは無駄な処理」という考えのもと、 CPUからVRAMにアクセスできるようにしてしまう「hUMA」などという新機能も提案されている。

関連項目[編集 | ソースを編集]