HLSL error X4507: maximum constant register index exceeded
我有一个顶点着色器,其中的cbuffer包含此成员:
1 | float4 myArray[16]; |
在着色器的主体中,我可以使用变量索引读取和使用数组值:
1 | float4 anElement = myArray[(int)(input.Color.g * 255)]; |
这可以编译。但是,如果我声明数组具有256个元素:
1 | float4 myArray[256]; |
然后,编译器将失败,并出现以下错误:
error X4507: maximum vs_4_0_level_9_1 constant register index (256)
exceeded - Try reducing number of constants referenced compilation
failed; no code produced
如果我在myArray中使用常量索引,则不会发生此错误。 MSDN没有关于错误4507的文档。我可以动态索引长度超过255个元素的数组吗?这是DirectX9的盖子吗?
我正在使用着色器模型4.0级别9_1。
这是一种解决方法,而不是解决方案。您可以将数组拆分为两个(如果有更大的数组,则可以拆分成更多)。这样编译器就不会抱怨。