2012-09-02 26 views
8

Shader Model 2.0のHLSLシェーダで次のforループをコンパイルすると、エラーX3511が発生します。Shader Model 2.0のHLSL forループ:エラーX3511がループをアンロールできない

for (int x = -5; x <= 5; x++) 
{ 
    for (int y = -5; y <= 5; y++) 
    { 
      ... 

次のようにエラーが読み取る:ループをアンロールすることができ、ループは、タイムリーに(5回の反復)で終端するように見える[アンロール(N)]を使用して正確なより高い数を強制的に属性はありません。

私はこのエラーメッセージを認識していますが、for文の条件付き部分に変数を使用していません。これはハードコードされたx < = 5の条件です。ここで何が間違っていますか?

ありがとうございます!

+0

私は2番目のforループを削除していたときにそれをコンパイルします。 So:HLSLのネストされたループはありませんか? – barnacleboy

+0

ネストされたループで動作するかどうかはわかりませんが、属性の反復回数を増やしてみましたか?野生の推測として、両方のループの 'unroll(11) 'がうまくいくでしょうか? –

+0

残念ながら、Shader Model 2.0でコンパイルするときにアンロールを使用することはできません。私は画像処理アプリケーションで作業しているので、アプリケーションが少なくともWindows XPで動作できることを確認したい。 – barnacleboy

答えて

8

はこれを試してみてください:

[unroll(121)] for (int i=0; i<121; i++) 
{ 
    int x = i/(int)11 - 5; 
    int y = i % (int)11 - 5; 
} 
+0

それだけです!ありがとう! :) – barnacleboy