[Archard 2016Archard, D. 2016. Pipeline State Object Caching. ACM SIGGRAPH: Khronos 3D Graphics BoF. https://www.khronos.org/assets/uploads/developers/library/2016-siggraph/3D-BOF-SIGGRAPH_Jul16.pdf.]
Why do we care?#
- なぜなら、あなたが作るであろう最も簡単な最適化のひとつである
- 完璧なPSO生成は常に実行可能であるとは限らない
- DX9やDX11のレンダリングインターフェース、スクリプト駆動レンダリングステート、など
- オンザフライで生成されるPSOは現実に存在する
- パイプライン生成はめっっっっっっっっっっっっっっっっっっちゃ遅くなる可能性がある
- 狂ったようにヒッチングする
- PSO生成中に発生する冗長な処理が大量に存在する
- GLESはあなたに代わりこれの世話をしていた
- Epic GamesのProtostarからのユースケース
PSO create time break-down --- Epic Games Protostar#
- リンク: 56%
- ユニークなリンク: 54%
- 冗長なリンク: 46%
- コンパイル: 42%
- 冗長なコンパイル: 62%
- ユニークなコンパイル: 38%
- その他の処理: 2%
Possible solutions to speed up PSO creation#
- 動的パイプラインステート
- 変化できるステートが制限される
- パイプラインを継承する
- ベンダ固有
- ほとんどのエンジンで接続するのが難しい
- パイプラインステートキャッシュ
Pipeline Cache#
- パイプラインキャッシュは
vkCreatePipelineCacheで生成する- キャッシュデータがあれば生成時に渡す
vkCreateGraphicsPipelinesなどでパイプラインを生成するpipelineCacheに生成したパイプラインキャッシュを渡す
vkGetPipelineCacheDataでキャッシュデータを取り出せる- ディスクを介して次回以降の起動を高速化できる