HLSL: Índice para flutuadores desalinhados / compactados
Eu tenho um vertex shader (2.0) fazendo algumas instâncias - cada vértice especifica um índice em uma matriz.
Se eu tiver uma matriz como esta:
float instanceData[100];
O compilador aloca 100 registros constantes. Cada registro constante é umfloat4
, portanto, aloca 4 vezes o espaço necessário.
Eu preciso de uma maneira de fazê-lo alocar apenas 25 registros constantes e armazenar quatro valores em cada um deles.
Idealmente, eu gostaria de um método em que ele ainda pareça umfloat[]
na CPU e na GPU (agora estou chamandoEffectParamter.SetValue(Single[])
, Eu estou usando XNA). Mas embalar e desembalar manualmente umfloat4[]
também é uma opção.
Além disso: quais são as implicações de desempenho para fazer isso? Realmente vale a pena? (Para mim, isso economizará cerca de um lote a cada quatro ou cinco).