ステージングバッファ

提供: MonoBook
2020年6月3日 (水) 08:20時点における153.174.166.187 (トーク)による版 (ページの作成:「'''ステージングバッファ'''(英語:staging buffer)とは、主にGPUからCPUへデタを書き戻す際に使用される中継用の…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

ステージングバッファ英語:staging buffer)とは、主にGPUからCPUへデタを書き戻す際に使用される中継用のメモリ領域のことである。

概要

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

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

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

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


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

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

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

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