ドライバーの内部エラーについて、ここに記載がちょっとありました。http://msdn.microsoft.com/ja-jp/library/ee417865%28VS.85%29.aspx
こんな仕組みになっているけど、デバイスの破棄および再生成で処理を復帰っていうことが、
果たしてどのくらい可能なんだろうか。ちょっと疑問に思います。
でも、IDirect3DDevice9::ValidateDevice というメソッドを DrawPrimitive系の直前に挿入して、
デバイス状態を確認するという手法はなかなか良さそうに思いました。
デバッグビルドとかフラグでそんなコードになるように、元々のコードに準備をしておくのは役立つかもしれません。
■コマンドバッファな話
Direct3D API 呼び出しの正確なプロファイリング (Direct3D 9)と題して、MSDNに記載を発見。
以前はどこかのWeb記事でDirectXのコマンドバッファの話を読んだ気がしていましたが。
このドキュメントの本来の意味は、タイトル通りプロファイリングの話です。
しかし、アプリケーションから実デバイスまでに設定データ類がどのように伝達するか、というのが使用されている図と、プロファイリングの注意点より読み取ることが出来ます。
ドキュメントの後方にある構成の図はなかなかわかりやすいです。
結局デバイスに到達するときには、各設定はコマンドバッファというバッファに単純なコマンドとして記録された状態になっています。
GPUはそのバッファを順番に解釈し、実行しているだけに過ぎません。
もちろん、このやりとりにはデバイス制御があるため、
カーネルモードに遷移したりするのですが、この部分まできちんと説明があるため、
このドキュメントはよく出来ていると思いました。