HLSL错误X4507:超出最大常量寄存器索引

时间:2013-05-28 20:57:30

标签: directx direct3d hlsl vertex-shader

我有一个顶点着色器,其中包含一个包含该成员的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上限吗?

我使用shader model 4.0 level 9_1。

1 个答案:

答案 0 :(得分:1)

这是一种解决方法而不是解决方案。您可以将阵列拆分为两个(如果您有更大的阵列,则拆分更多)。然后编译器不会抱怨。