GLSLはループ回してる時に動的分岐入れるとまずコンパイルできない。
いや、コンパイルはできるんだがリンクできない。
「ループ時にブランチするな」とはどこにも書いてないので、恐らくコンパイラのバグなんだろう。
(ちなみにnVIDIAのCgコンパイラ経由)

かと言ってARB_vertex/fragment_programはループもブランチも実装されてないから
アセンブラでチマチマ書こうにも書けない。

結局、ベンダがコンパイラの質を上げてくれるのを待つしかない。