2015-07-07

もっぱら、3DMarkでテストしているのだが、ようやくオーバーレイなんでかちゃんと描画できない問題を解決できた。
まず原因は自分のコード。
DX12の仕様上、Present呼び出し前までにコマンドキューに入ってるコマンドは必ず実行されます。
実行中は、コマンドリストのバッファは参照つまり拘束状態なので、その状態でResetすると実行前の場合、コマンドが実行されない結果になります。
なんかデバイスリムーブが起きそうな状態ですが、どこにもエラーも出なければクラッシュもしない。
この状態に気付くのに3日ですか!
バックバッファー分、コマンドリストのバッファを準備するのが安全です。


1つのコマンドリストを使いまわす適当なコードだと、次フレーム時にまだレンダリング中である場合、この問題が起きる可能性があるのです。


DX11だとこのあたりの管理がOS側なので気にすることも無いのですが、エラーも何も出ないまずい状態系のバグはほんと見つけ辛い。


ちなみに、API Overhead feature testのFPSはDXGI_PRESENT_TEST込みのカウントなので、画面更新数のFPSでは無いです。TEST時ってコマンド実行されていない気がするけど、いいのかそれ?!
普通のPresent時だけのカウントじゃないと、ベンチの意味無いような。

0 件のコメント:

コメントを投稿