HLSL:未对齐/打包浮点数的索引

时间:2010-05-19 15:10:55

标签: xna shader hlsl vertex-shader

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

如果我有这样的数组:

float instanceData[100];

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

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

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

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

1 个答案:

答案 0 :(得分:3)

这有帮助吗?:

float4 packedInstanceData[25];
...
float data = packedInstanceData[index / 4][index % 4];