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