none
Windows7のAero ON時のDirectXでの3フレーム遅延について

    質問

  •  ネット上で、Windows7(Vista)では、Aero ON時に、DirectXで描画が3フレーム遅延するので、ゲームをするときなど、AeroをOFFにした方が良いという記事を見つけます。

     ここで質問なのですが、Aero ON時には、必ず3フレーム遅延するのでしょうか?それとも最大3フレーム遅延するというのが正しい表現で、描画の負荷によっては、3フレーム遅延を発生しない場合もあるのでしょうか?

     頂点シェーダーとかを数多く使いGPUの負荷が重いときは、Aero ON時には3フレーム遅れそうですが、ただBMPの画像などをDirectXで表示するだけなら、3フレーム遅延など発生させなくても良さそうな気がします。

     実は、http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?mode=view&no=3320 にも記載があるのですが DirectX実践プログラミング
    [WindowsXP/Vista/7対応版]という本のサンプルコードを動作させて、microsoft SDK for Windows7のPerformance tool kitsのGPUViewerでログを見ると、確かにAERO ONでも、3フレーム遅延が発生していないサンプルが有ります。 3フレーム遅延を発生しないサンプルコードは余り複雑なシェーダーの計算をしていないような見受けられ、もしかすると描画負荷が重い時だけ、AERO ONの3フレーム遅延は発生するものではないかと推測しております。 AERO ON時の、DirectXの3フレーム遅延についての仕様について、詳しい方がいましたら、正しい仕様(必ず3フレーム遅延するのか?、最大3フレーム遅延を発生するのか(発生しない場合もあるのか)、お教え頂きたく投稿させて頂きました。

     

    • 移動 星 睦美 2014年7月2日 0:37 Visual Studio 共通 から
    2014年7月2日 0:22

すべての返信

  • フォーラム オペレーターの星 睦美です。
    yoshimartina さん、投稿ありがとうございます。

    今回の質問をWindows クライアント開発 フォーラムに移動させて頂きました。
    フォーラムで参考になる回答がありましたら投稿者からの[回答としてマーク] をお願いします。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2014年7月2日 0:41
  • この問題は個人的にも気になっています。

    Windows Vista登場当時に3フレーム遅延とAeroをOffにすると解消されるという対策の噂が出ました。その後MicrosoftはWindows 7でDirectXのパフォーマンス改善を行っています。にもかかわらずこの噂は修正されることなく揺るぎないものとして定着し今に至っています。
    また「DirectX 3 frames delay」などでググっても英語文献でこの話題はほとんどヒットしません。

    結局、私は、この件に関してどのような問題があり、Vista / Win7 / Win8でそれぞれどのような状況なのか調べることはできませんでした。

    2014年7月2日 4:07
  • フォーラム オペレーターの星 睦美です。
    yoshimartina さん、投稿ありがとうございます。

    今回の質問をWindows クライアント開発 フォーラムに移動させて頂きました。
    フォーラムで参考になる回答がありましたら投稿者からの[回答としてマーク] をお願いします。


    フォーラム オペレーター 星 睦美 - MSDN Community Support


    Microsoft社の正式仕様としてはどういう仕様になっているか開示されていないのでしょうか?
    2014年7月15日 0:53
  • DirectXにおける描画フレームの遅延という記事を見つけました。

    Windows Vistaで導入されたDirect3D 9Ex及びWindows 7で導入されたDirect3D 11(DXGI 1.1)に

    で遅延を設定でき、最小値は1フレーム遅延、デフォルトは3フレーム遅延だそうです。

    ゲームがDirect3D 9以前を使用した場合にこの設定が行われず、その場合に推測ですが、Aero Onの場合に3フレーム遅延、Offにすると1フレーム遅延?になっている可能性はあるかもしれません。(誤りでした)
    # 見落としかもしれませんがDirect3D 10にもこのインターフェースがない…?


    • 回答の候補に設定 星 睦美 2014年7月15日 8:35
    • 編集済み 佐祐理 2014年7月16日 1:01 誤りを訂正
    • 回答の候補の設定解除 星 睦美 2014年7月18日 8:11
    2014年7月15日 2:29
  • NyaRuRuさんの記事 DirectXの真実によると

    マイクロソフトは、ドライバに対する画面更新命令がウィンドウ当たり最大3回までキューイングされることを許している *9。
    *9 DirectX 10の3DグラフィックスAPIであるDirect3D 10では、IDirect3DDevice9Ex::SetMaximumFrameLatency APIによって画面更新の最大キューイング回数をアプリケーションから変更できるようになる。

    とのことで、これに関しては遅延が増えたわけではなく調整できるようになっただけのようでした。

    2014年7月15日 11:54