packoffset
Необязательный ключевое слово упаковки констант шейдера, который использует следующий синтаксис:
: packoffset( c[Subcomponent][.component] )
Параметры
Элемент | Описание |
---|---|
packoffset |
Обязательный ключевое слово. |
C |
Упаковка применяется только к регистрам констант (c). |
[Подкомпонент] [.component] |
Необязательные подкомпоненты и компоненты. Подкомпонент — это регистровое число, которое является целым числом. Компонент имеет вид [.xyzw]. |
Комментарии
Используйте этот ключевое слово, чтобы вручную упаковать константу шейдера при объявлении типа переменной.
При упаковке константы нельзя смешивать типы констант.
Компилятор ведет себя немного иначе для глобальных констант и однородных констант:
- Глобальная константа. Компилятор добавляет глобальную переменную в качестве глобальной константы в $Global cbuffer. Автоматически упакованные элементы (объявленные без packoffset) будут отображаться после последней упакованной вручную переменной. Вы можете смешивать типы при упаковке глобальных констант.
- Однородная константа. Универсальный параметр в списке параметров функции будет добавлен в буфер констант $Param компилятором при компиляции шейдера за пределами платформы эффектов. При компиляции внутри платформы эффектов однородная константа должна разрешаться в однородную переменную, определенную в глобальном область. Однородная константа не может быть смещена вручную; их рекомендуется использовать только для специализации шейдеров, где они возвращаются к глобальным, а не для передачи данных приложения в шейдер.
Ниже приведены некоторые дополнительные примеры: упаковка констант с помощью модели шейдера 4.
Примеры
Ниже приведено несколько примеров упаковки констант шейдера вручную.
Упаковать подкомпоненты векторов и скаляров, размер которых достаточно велик, чтобы предотвратить пересечение границ регистра. Например, все они являются допустимыми:
cbuffer MyBuffer
{
float4 Element1 : packoffset(c0);
float1 Element2 : packoffset(c1);
float1 Element3 : packoffset(c1.y);
}