AdditionalSwapChainとDepthStencilSurface

Direct3D周りでメモするのを忘れてました。ウィンドウモードのマルチビューをするためには、IDirect3DDevice9::CreateAdditionalSwapChainでスワップチェインを複数作ります。で、そのとき気をつけないといけないのは、深度ステンシルの存在です。SDKヘルプのSetDepthStencilSurfaceあたりの項によると、


このメソッドの使用に関する制約を次に示す。(中略)
深度ステンシル サーフェイスのサイズは、レンダリング ターゲットのサイズ以上でなければならない。
ということらしいです。深度ステンシルサーフェイスはD3DDevice作るときにEnableAutoStencilBufferをTRUEにすることで自動的に作成されます。そのとき、サイズはウィンドウに応じたサイズだったり、自分で指定できたり、詳しくはD3DPRESENT_PARAMETERSを参照。要は、バックバッファサイズと同じです。で、このときのサイズが小さく、次に作成するスワップチェインのサイズがこれを上回れば、上記の制約に引っかかります。デバッグ版DLLなら、Clear()とかしたときに、デバッグペインにエラーメッセージが吐かれます。
そんなわけで、最初に作るバックバッファを大きめにとっておくとか、IDirect3DDevice9::CreateDepthStencilSurfaceで自前でごにょごにょするとかするしかないようです。あと、Reset時にもいろいろとあるので、気合で処理するしかないようです。
#マルチビュー関係の記事って少ないですね…。ゲーム作る人にはあまり関係ないから?