我有一个顶点着色器,它的 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 上限吗?
我正在使用着色器模型 4.0 级别 9_1。