以前は NVIDIA 8400GS (256MB) を使用して一貫した 60 FPS (モニターの同期速度) で実行された 2 画面の DirectX アプリケーションがあります。ただし、512 MB の RAM を搭載したカードに交換したところ、フレーム レートが 40 FPS を超えるのに苦労しました。(トリプルバッファリングを使用しているため、これだけ高くなります。) 2 枚のカードは同じメーカー (PNY) のものです。他のすべての条件は同じです。これは Windows XP Embedded アプリケーションであり、各カードの新しいイメージから始めました。ドライバーのバージョン番号は 169.21 です。
アプリケーションはすべて 2D です。つまり、テクスチャ化されたクワッドの束と、事前にレンダリングされたグラフィックスがたくさんあります (したがって、カードのメモリをアップグレードする必要があります)。また、CPU がオンザフライでデコードする圧縮アニメーションもあります。これにはテクスチャ ロックが含まれます。ロックには永遠に時間がかかりますが、CPU が更新する別のシステム メモリ テクスチャを用意してから、デバイスの UpdateTexture メソッドを使用してレンダリングされたテクスチャを更新することも試みました。全体的なパフォーマンスの違いはありません。
DirectX のパフォーマンスに関してインターネットで見つけられるすべての FAQ を読みましたが、DirectX プロジェクトに取り組むのはこれが初めてなので、難解な知識があれば役に立ちます。:)
私が主題に取り組んでいる間、もう1つ。スワップ チェーンで Present を呼び出すと、現在のパラメーター (PresentationInterval) と呼び出し自体のフラグの両方で D3DPRESENT_DONOTWAIT を使用しているにもかかわらず、DirectX は現在の完了を待機しているようです。これは 2 画面のアプリケーションであるため、2 つのモニターがゲンロックされていないように見えるため、これは問題です。スレッドプールを介して Present 呼び出しを実行することで、この問題を回避しています。この根本的な原因は何でしょうか?