差分
ナビゲーションに移動
検索に移動
'''ステージングバッファ'''([[英語]]:staging buffer)とは、主に[[GPU]]から[[CPU]]へデ[[ー]]タを書き戻す際に使用される中継用のメモリ領域のことである。
== 概要 ==
[[CPU]]上で「[[構造体]]の[[配列]]」などとして作成した[[バーテックスバッファ]]などの各種バッファは、[[GPU]]に転送されると内部的に「GPUが処理しやすい」ように再配置が行われ、[[CPU]]側からは再度読み取れなくなる。基本的には一方通行だ。
しかしながら「再度読み取りたい」という需要が一部にあった。
たとえば高水準の3Dモデルの読み込み[[ライブラリ]]なんかを使用すると、わずか1行で3Dモデルを読み込めたりして便利ではあるが、「頂点の座標」などの細かい情報は得られないことがある。その一方で[[物理演算エンジン]]には3Dモデルのその見えない座標情報を求めるものが多い。この両方を使いたい場合にドハマリする。いわゆる「[[階層化の有害性]]」だ。
さらに[[コンピュートシェーダー]]の普及で「再度読み取りたい」という需要が激増した。
そこで最近の[[GPU]]には「[[CPU]]が処理しやすい配置に変換コピーするコマンド」が用意されており、そのコピー先となる一時バッファ的な「ステージングバッファ」というものが生まれた。
手順的にはこんな感じだ。
* ステージングバッファを確保する
* 頂点バッファなどをステージングバッファに変換コピーする
* ステージングバッファをメインメモリに単純コピーする
* ステージングバッファを解放する
[[GPU]]は[[メインメモリ]]にアクセスできないのでステージングバッファはVRAM上に確保される。ステージングバッファからメインメモリへの転送は無駄に思えるが構造的に仕方がない。
== 概要 ==
[[CPU]]上で「[[構造体]]の[[配列]]」などとして作成した[[バーテックスバッファ]]などの各種バッファは、[[GPU]]に転送されると内部的に「GPUが処理しやすい」ように再配置が行われ、[[CPU]]側からは再度読み取れなくなる。基本的には一方通行だ。
しかしながら「再度読み取りたい」という需要が一部にあった。
たとえば高水準の3Dモデルの読み込み[[ライブラリ]]なんかを使用すると、わずか1行で3Dモデルを読み込めたりして便利ではあるが、「頂点の座標」などの細かい情報は得られないことがある。その一方で[[物理演算エンジン]]には3Dモデルのその見えない座標情報を求めるものが多い。この両方を使いたい場合にドハマリする。いわゆる「[[階層化の有害性]]」だ。
さらに[[コンピュートシェーダー]]の普及で「再度読み取りたい」という需要が激増した。
そこで最近の[[GPU]]には「[[CPU]]が処理しやすい配置に変換コピーするコマンド」が用意されており、そのコピー先となる一時バッファ的な「ステージングバッファ」というものが生まれた。
手順的にはこんな感じだ。
* ステージングバッファを確保する
* 頂点バッファなどをステージングバッファに変換コピーする
* ステージングバッファをメインメモリに単純コピーする
* ステージングバッファを解放する
[[GPU]]は[[メインメモリ]]にアクセスできないのでステージングバッファはVRAM上に確保される。ステージングバッファからメインメモリへの転送は無駄に思えるが構造的に仕方がない。