>>126-127
アドバイスありがとうございます。
静的分岐とは言え、さすがにON/OFFのチェンジはしたいので
>>126や、>>127の�@というわけにはいきません。

ひとまず、>>127の�Aではうまくいきました。

そこで再質問なのですが、グローバル定数は、uniformとして扱われるMSの説明に書いてある上、
1回の描画命令の間では不変ですよね?
グローバル定数ではダメなのでしょうか?(ダメだったから>>125はダメだったわけですが…)

正直引数のuniformでやる方法ですと、
pass P0{ pixelShader = compile PIXELSHADER_TARGET PS( false );}
pass P1{ pixelShader = compile PIXELSHADER_TARGET PS( true );}
このようにtrueの場合とfalseの場合をいちいち定義しなければならず、
組み合わせが多い場合(ライトON/OFF、影ON/OFFなどなど)に組み合わせ爆発が厄介そうです。

uniform int の場合はintの取りうる範囲が多すぎるため、
PS(0) PS(1) のように定義しなければならないのはわかるのですが、
MSの説明を見る限り「bool型のシェーダ定数は特別扱いだよ」みたいに読めるのですが、
bool型を使うことによる利点のようなものは何かないのでしょうか?
MSの説明を見て