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);
}

См. также раздел

Синтаксис переменных

Переменные (DirectX HLSL)