3

このメンバーを含む cbuffer を持つ頂点シェーダーがあります。

float4 myArray[16];

シェーダーの本体では、変数インデックスを使用して配列値を読み取って使用できます。

float4 anElement = myArray[(int)(input.Color.g * 255)];

これはうまくコンパイルされます。ただし、配列に 256 個の要素があると宣言すると、次のようになります。

float4 myArray[256];

その後、コンパイラは次のエラーで失敗します。

エラー X4507: 最大 vs_4_0_level_9_1 定数レジスタ インデックス (256) を超えました - コンパイルに失敗した参照定数の数を減らしてみてください。コードは生成されません

myArray に定数インデックスを使用すると、このエラーは発生しません。MSDN にはエラー 4507 に関するドキュメントがありません。255 要素を超える長さの配列に動的にインデックスを付けることはできますか? これは DirectX9 キャップですか?

シェーダー モデル 4.0 レベル 9_1 を使用しています。

4

1 に答える 1

1

解決策というより回避策です。配列を 2 つ (または、より大きな配列がある場合はそれ以上) に分割できます。その後、コンパイラは文句を言いません。

于 2013-06-27T07:16:13.787 に答える