1

我有一个顶点着色器(2.0)做一些实例化——每个顶点都指定一个数组的索引。

如果我有这样的数组:

float instanceData[100];

编译器为其分配了 100 个常量寄存器。每个常量寄存器都是 a float4,因此它分配了所需空间的 4 倍。

我需要一种方法让它只分配 25 个常量寄存器并在每个寄存器中存储四个值。

理想情况下,我想要一种在 CPU 和 GPU 上仍然看起来像 a 的方法float[](现在我正在调用EffectParamter.SetValue(Single[]),我正在使用 XNA)。但是手动打包和解包 afloat4[]也是一种选择。

另外:这样做对性能有什么影响?它真的值得吗?(对我来说,这将在每四五个中节省一批)。

4

1 回答 1

4

这有帮助吗?:

float4 packedInstanceData[25];
...
float data = packedInstanceData[index / 4][index % 4];
于 2010-05-19T22:03:15.467 回答