5

デスクトップ モードの Windows 8 で動作する独自のメディア プレーヤーがあります。ランタイム DirectX のバージョンは 11 ですが、ネイティブ グラフィックス ドライバーのサポートは DirectX 9 用です。
まったく同じセットアップの一部のコンピューターでは、実際のスワップ チェーンのバック バッファー カウントが 2 であり、パフォーマンスが優れていることがわかります。バッファ カウントは 7 で、ドロップされたフレームがあります。
私はそのプレーヤーのソース コードを持っていないので、実行時に異なるバック バッファー カウント数を決定する理由は何でしょうか。
そのようなバックバッファ数がパフォーマンスの変化につながる理由を誰かが説明できますか? または、バックバッファ数の意味を説明する関連ドキュメントを教えてください。

(詳細なデバッグ情報: GPUView を使用すると、バックバッファー カウントが 2 の場合、ハードウェアが同期モードで動作することがわかります。つまり、1 秒の VSync (クリップ フレーム レートは 30fps) ごとに HW キューに 1 つのパケットがあり、7 つのバックバッファーの場合、作業は5 ~ 7 フレームまとめて実行し、次にいくつかの空の VSync、次に 5 ~ 7 フレーム、というように)。

前もって感謝します!

4

2 に答える 2

7

4 つ以上のバッファ (立体視に使用されるクワッド バッファリング) の使用は実際には見当たりません。ほとんどのアプリケーションは 2 つのバッファー (ダブル バッファー) を使用して、最初の (フロント) バッファーがモニターに表示されている間に、アプリケーションが次のフレームを 2 番目の (バック) バッファーに描画し始めることができるようにします。フロント バッファーは、次のフレームの描画を開始する前に、画面への描画を終了します。トリプル バッファリングはこの考え方を拡張したものであり、2 つのバック バッファがあります。このようにして、アプリケーションがフロント バッファーが画面に表示されるよりも速くバッファー全体の描画を終了できる場合、フロント バッファーが表示を終了するのを待つ代わりに、次のフレームを 3 番目のバッファーに描画し始めることができます。

7 つのバッファを使用している他のアプリについての質問に本当に答えているかどうかはわかりませんが、モニターは通常 60 ~ 75Hz のレートでしかリフレッシュしないため、その必要はないと思います。

最初のバッファの表示が終了する前に 2 つのバッファを描画できるほどアプリケーションが高速に実行されている場合は、フロント バッファが終了するまでアプリをスリープ状態にして、他のプログラムに CPU を使用する機会を与えるか、それを費やす機会を与えます。アプリの他の処理に余分な時間がかかります。メディア プレーヤーの場合は、メディアの再生の品質を向上させるために、よりコストのかかる操作に余分な時間を費やすことができます。

ただし、バッファリングについて説明しているリンクがありますが、おそらく必要がないため、4つ以上のバッファについては話していません。

http://en.wikipedia.org/wiki/Multiple_buffering

PS おそらく、アプリケーションが 7 つのバッファーを使用するときにフレーム レートをいくらか失う理由は、アプリケーションが画面に表示する必要がある前にすべてのバッファーへの書き込みを続けることができないためです。マルチスレッドが使用されている場合、アプリが他のすべてのバック バッファーへの描画を完了する前に、次のバッファーが画面に表示される可能性があるため、これはおそらく当てはまりません。

于 2012-06-07T10:15:30.427 に答える
5

さて、マイクロソフトから回答がありました。これは、DC (バッテリー) で作業しているときに電力を節約するためです。これにより、使用可能なすべてのバッファーを処理するためにプロセッサが起動し、それらを GPU に送信して作業し、より長い省電力モードに長時間移行できます。

于 2012-11-19T10:05:06.787 に答える