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

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。


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