我有一个顶点着色器(2.0)进行一些实例化 - 每个顶点指定一个数组的索引。
如果我有这样的数组:
float instanceData[100];
编译器为其分配100个常量寄存器。每个常量寄存器都是float4
,所以它分配的空间是所需空间的4倍。
我需要一种方法使它只分配25个常量寄存器并在每个寄存器中存储4个值。
理想情况下,我想要一种在CPU和GPU上看起来仍然像float[]
的方法(现在我正在调用EffectParamter.SetValue(Single[])
,我正在使用XNA)。但是,手动打包和解包float4[]
也是一种选择。
另外:这样做的性能影响是什么?它真的值得吗? (对我来说,这将每四或五个节省一批)。
答案 0 :(得分:3)
这有帮助吗?:
float4 packedInstanceData[25];
...
float data = packedInstanceData[index / 4][index % 4];