我有一个顶点着色器,其中包含一个包含该成员的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。
答案 0 :(得分:1)
这是一种解决方法而不是解决方案。您可以将阵列拆分为两个(如果您有更大的阵列,则拆分更多)。然后编译器不会抱怨。