У меня есть вершинный шейдер (2.0), выполняющий некоторые instancing - каждая вершина указывает индекс в массив.HLSL: индекс для неуравновешенных/упакованных поплавков
Если у меня есть массив как это:
float instanceData[100];
Компилятор выделяет его 100 постоянных регистров. Каждый постоянный регистр является float4
, поэтому он выделяет в 4 раза больше места, чем необходимо.
Мне нужно, чтобы он выделил только 25 постоянных регистров и сохранил четыре значения в каждом из них.
В идеале мне нужен метод, который по-прежнему выглядит как float[]
как на CPU, так и на GPU (прямо сейчас я звоню EffectParamter.SetValue(Single[])
, я использую XNA). Но ручная упаковка и распаковка float4[]
- тоже вариант.
Также: каковы последствия для выполнения этого? Это на самом деле стоит? (Для меня это сэкономит около одной партии каждые четыре или пять).
Да, это работает, спасибо. Удобно знать, что вы можете индексировать субэлементы. Для справки - в моей ситуации это индексирование занимает 14 слотов инструкций и 4 постоянных регистра. –