WindowModePatch 0.17 Alpha 公開

前のバージョン(0.16 Alpha)を公開してからちょうど一年後となるのが明日(11/4)なのですが、その手前で更新しました

表から見える項目はほとんど変わっていません。裏でDirect3D9を使った描画の時にPixelShaderを使って共三次内挿法による三次補間とLanczos-3に基づいた補間処理を行うようにしたものです。

どちらかというとPixelShaderのデバッグ的な意味合いが強い更新です。次のADVシステムで使う予定の補間処理が正しく動作するかを確認するためのものです。

Lanczos-3の処理にちょっと手間取りましたが・・・。

ちょっとどうでもよくないShaderのコンパイルに関する話題。

PixelShaderなどで超越関数(sinとかね)を使ったものをHLSLでコンパイルすると、ちょっと変な現象が起こります。

結果はどちらもほとんど同じなのですが、たとえばこのように書いたとします。

Aパターン

w[i].x = (t0.x != 0.0 ? ((sin(t0.x) / t0.x) * (sin(t1.x) / t1.x)) : 1.0);
w[i].y = (t0.y != 0.0 ? ((sin(t0.y) / t0.y) * (sin(t1.y) / t1.y)) : 1.0);

Bパターン

w[i] = (t0 != 0.0 ? ((sin(t0) / t0) * (sin(t1) / t1)) : 1.0);

意図していることはわかると思います。が、これをコンパイルするとかなり大きな差になります。

Aパターンの場合は素直にsincosを使うようにコンパイルするのですが、Bパターンの場合は近似式を使って無理矢理計算しようとします。すごいです。

というか、どうやら超越関数を各要素にすべて行うパターンの場合、ほとんどの場合、近似式計算を行うように変換されるようです。さすがですね。

そのために、AパターンとBパターンで演算スロット量にかなり大きな差がでます。(Aパターンのスロットがかなり使用されている)

近似を使っている分、Bパターンの方が微妙なのですが・・・。・・・というか、これって本当にほとんど同値?(t0 != 0.0の部分)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この記事のトラックバック用URL