コンピューターのモニターに画像を表示するには、一連の非同期呼び出しをディスパッチするグラフィック API を使用する必要があります...そして、ある時点で、必要なものをコンピューターの画面に表示します。
しかし、必要な画像が完全に描画される (そしてユーザーに表示される) 時点での正確なCPU 時間を知りたい場合はどうでしょうか?
この時点を私が行った他の測定値と関連付けるために、すべてが表示されたときに CPU タイムスタンプを取得する必要があります。
グラフィック スタックの非同期動作を考慮しないと、多くのことがジッターへのグラフィック呼び出しの長さを取得できます。
- マルチスレッド;
- V-BLANK に同期します (残念ながらティアリングを避けるために必要です)。
- 私は他に何を忘れましたか?:P
Linux でのソリューションをターゲットにしていますが、他の OS にもオープンです。X.org サーバーのxvideo 拡張機能と OpenGL API の一部については既に調査しましたが、効果的な解決策はまだ見つかっていません。
解決策がビデオ ドライバーやハードウェアへのハッキングを伴わないことを願うばかりです。
注: 必要なハードウェアで最近の Nvidia G-SYNC を使用することはできません。この技術は、予測できないジッターの一部を取り除きますが、この問題を完全に解決することはできないと思います.
OpenGL Wikiでは次のように提案されています。
GPUキューでswapBuffer呼び出しが完了した直後に、そのような高精度/マルチメディアタイマー値を適切に取得する方法を誰かが知っていますか?