Zソートしない高速化

Window.draw系でzを全部指定しなければ、ソートは1スキャンで終了するのでほとんど時間はかからない。
なので、zを指定する必要がなければすべて省略すれば速い。
明示的にzソートを省くオプションがあれば、もっと速くできる方法があるのではないか、と思った。


単純に1スキャンの時間を省く、という話ではない。
DirectX9の描画はハードウェアで行う。
実際には、DrawPrimitive系を実行したときに裏でハードが動き出す。
Presentもプライマリサーフェイスの切り替えが発生するまで待ったりしないで、それすらGPUに投げられてすぐ戻る。はずだ。
でもそれだとGPUにどんどん命令がたまっていって、CPUの処理が何フレームも先にいってしまうから、Presentをためられる数が決まっている。
この数はDirectXでは明示的に定められていなくて、ドライバに依存するようだ。


ここまで考えて、速くはならないかもしれないと思った。
狙っていたのはWindow.draw系メソッドの中でDrawPrimitiveUPを実行すること。
その画面の描画が終わるまでPresentで待たされるなら、Ruby処理中に描画を開始できれば待ち時間が減るのではないか、という話だ。
もちろんそれをやるとzソートできなくなるから、しない場合限定となる。
ドライバに依存するなら確かめるのも難しいし、効果が無ければ頑張って実装する意味も無い。
SDL1.3が描画命令の中でDrawPrimitiveUPを実行していたから、そのメリットの可能性を考えていたのだ。
まあ、ひとつ実験してみる価値はあるだろう。
そのうちやってみよう。