3

我有一个顶点着色器,它的 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。

4

1 回答 1

1

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

于 2013-06-27T07:16:13.787 回答