2010-05-19 3 views
1

J'ai un vertex shader (2.0) qui fait de l'instanciation - chaque vertex spécifie un index dans un tableau.HLSL: Index pour les flottants non alignés/compressés

Si j'ai un tableau comme celui-ci:

float instanceData[100]; 

Le compilateur alloue 100 registres constants. Chaque registre de constantes est un float4, donc il alloue 4 fois plus d'espace que nécessaire.

J'ai besoin d'un moyen de le faire allouer seulement 25 registres constants et de stocker quatre valeurs dans chacun d'eux.

Idéalement, je voudrais une méthode où il ressemble encore à un float[] à la fois sur le processeur et GPU (En ce moment j'appelle EffectParamter.SetValue(Single[]), j'utilise XNA). Mais l'emballage et le déballage manuel d'une float4[] est également une option.

En outre: quelles sont les implications de performance pour ce faire? Cela vaut-il vraiment la peine? (Pour moi, cela économisera environ un lot tous les quatre ou cinq ans).

Répondre

3

Est-ce que ça aide ?:

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

Oui, cela fonctionne, merci. Pratique pour savoir que vous pouvez indexer en sous-éléments. Pour référence - dans ma situation, cette indexation prend 14 slots d'instructions et 4 registres constants. –

Questions connexes