0

HLSL で作業していますが、シェーダーの 1 つから次のエラーが発生します。

エラー X4505: 最大一時レジスタ インデックスを超えました

これを引き起こしている行は次のとおりです。

int count = Passes[input.Tex.y].y;

パスは次のように定義されます。

cbuffer Style  
{  
     float3 Passes[256];  
     ...  
}

input.Tex は TEXCOORD として宣言された float2 です。

誰でもこのエラーを説明できますか? MSDN (または私が知る限り他のどこにも) に文書化されておらず、ここで何が問題なのかが明確ではありません。

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

4

2 に答える 2

0

現在、フロートを整数インデックスとして配列に読み込みます。float が 1.0f だとします。これは、16 進数で 3F80 0000、10 進数で 1,065,353,216 を意味します。現在、アドレスを読み取ろうとしていますPasses + 1065353216 * sizeof(float3)。単一の定数が 4096 の最大定数を保持していることを考慮すると、このレジストリ インデックスは明らかに超過しています。

http://msdn.microsoft.com/en-us/library/windows/desktop/ff476898(v=vs.85).aspx#Shader_Constant_Buffer

于 2013-04-10T18:55:00.687 に答える