Indirect Drawing

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

Indirect Drawing (間接描画)とは、GPUでの画像描画の高速化の手法のひとつで、1回の描画で複数のシェーダーを段々に呼び出す必要がある場合に、いちいちVRAMからメインメモリデータを戻さない方法を指します。

この機能を利用するにはGPUが対応している必要があります。

従来のGPUでは処理が終わるとCPUに「終わった」と通知を行い、CPUはその結果をVRAMからメインメモリに転送するようGPUに指示を出します。

  1. CPUがメインメモリからVRAMにデータ転送
  2. CPUがGPUに描画指示
  3. GPUで描画処理
  4. GPUがCPUに完了通知
  5. CPUはVRAMからメインメモリにデータ転送

1回の描画で複数のシェーダーにまたがる場合は上記が何度も繰り返されます。とくにデータ転送は無駄です。VRAMからメインメモリに転送して、またすぐにメインメモリからVRAMに転送するだけ。無駄ですね。

その解決策として一部のGPUに「VRAM上のデータを再利用して描画」というDrawIndirectコマンドが追加されました。2ステージ目以降の「CPUがGPUに描画指示」をDrawIndirectコマンドで行えば無駄なデータ転送がなくなります。めでたしめでたし。