1

私はいくつかのインスタンス化を行う頂点シェーダー (2.0) を持っています - 各頂点は配列へのインデックスを指定します。

次のような配列がある場合:

float instanceData[100];

コンパイラは、100 個の定数レジスタを割り当てます。各定数レジスタは であるfloat4ため、必要なスペースの 4 倍を割り当てています。

定数レジスタを 25 個だけ割り当て、それぞれに 4 つの値を格納する方法が必要です。

理想的には、CPU と GPU の両方で のように見えるメソッドが必要float[]です (現在、 を呼び出しEffectParamter.SetValue(Single[])ており、XNA を使用しています)。ただし、手動でのパックとアンパックfloat4[]もオプションです。

また、これを行うことによるパフォーマンスへの影響は何ですか? それは実際にそれだけの価値がありますか?(私にとっては、これにより 4 ~ 5 回ごとに約 1 つのバッチが節約されます)。

4

1 に答える 1

4

それは役に立ちますか?:

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