昨日の記事で使った走査線位置を調べるプログラムで、以前から疑問に思っていたクローンモードでの同期について確認できることに気が付きました。
LCD Delay Checkerでは、クローンモードで2つの画面が同時に更新されることを期待しています。片方の画面にn番目の走査線を出力している際に、もう一方も同じn番目が出力されているという状態です。
PC用液晶モニタはリフレッシュレートが60Hzで、日本のテレビは59.94Hzなので周期が合いませんが、液晶モニタはだいたい59Hzくらいまでは受け付けているので、同じ周期で更新しても表示は可能です。また、クローンモードにすると(NVIDIAのドライバでは)プライマリモニタ側のリフレッシュレートしか設定できず、セカンダリモニタのリフレッシュレートは選択不可能になります。
これらのことから、同時に更新されているのではないかという仮定をしていました。もし2つの画面が同期しているならば、昨日のプログラムを動かすと両方の画面に同じグラデーションが表示されるはずです。
さて、実際にクローンモードでプログラムを動かしてみると……セカンダリモニタのグラデーションがスクロールしていましたorz
2つの画面の更新は非同期で、独立したタイミングで走査しているようです。走査線位置の取得はプライマリモニタ側で有効で、テレビ出力側をプライマリにするとPCモニタ側がスクロールし、PCモニタ側をプライマリにするとテレビ出力側がスクロールしました。
というわけで、LCD Delay Checkerを使った遅延測定は、クローンモードでは最大1フレームの誤差が発生します。
ちなみに、この確認はGeForce 9600GT(ドライババージョン178.13)で行いました。異なる環境では、異なる結果になる可能性もあります。
ディスプレイを接続するコネクタを入れ替えて検証すると、遅延箇所が分かりやすくなる気がしますね。
でもHDMI端子を装備しているCRTなんてまず無いでしょうし、完璧な測定は困難ですね。
LCD Delay Checkerの仕組み上、セカンダリモニタへの出力がプライマリモニタよりも進むことはないはずなので、何度も測定してベストケースを採用というのが妥当でしょうか。