vs_3_0

Программируемый шейдер вершин состоит из набора инструкций, которые работают с данными вершин. Регистрирует передачу данных в ALU и из него. Для изменения инструкции, результатов или записанных данных можно применить дополнительный контроль.

Версия vs_3_0 вершинного шейдера расширяет набор функций, поддерживаемый vs_2_x. Каждая из функций в vs_2_X, для которой требуется установить ограничение, доступна в vs_3_0 без ограничения.

Новые возможности

Новые возможности версии vs_3_0 вершинного шейдера перечислены в следующих разделах.

Индексирование регистров

В более ранних моделях шейдеров можно было индексировать только банк регистра констант. В этой модели можно индексировать следующие банки регистра с помощью регистра счетчика цикла (aL):

  • Входной регистр (v#)
  • Выходной регистр (o#)

Текстуры вершин

Эта модель шейдера поддерживает поиск текстур в вершинном шейдере с помощью texldl. Подсистема вершин имеет четыре этапа выборки текстур (в отличие от образца карты смещения и пробоотборщиков текстур в обработчике пикселей), которые можно использовать для выборки текстур, заданных на этих этапах. См. статью Текстуры вершин в vs_3_0 (DirectX HLSL).

Частота потока вершин

Эта функция позволяет инициализировать подмножество входных регистров со скоростью, отличной от скорости одного раза для каждой вершины. См. раздел Рисование неиндексированных геометрических объектов.

Выходные данные шейдера

Как и vs_2_0, выходные данные шейдера могут отличаться в зависимости от статического управления потоком. Будьте осторожны с динамическим ветвлением, так как это может привести к тому, что выходные данные шейдера зависят от вершины. Это приведет к непредсказуемым результатам на разных аппаратных устройствах.

Управление динамическим потоком

Поддерживаются все инструкции по управлению динамическим потоком. Максимально допустимое значение глубины вложения — 24. (Дополнительные сведения см. в разделе Пределы вложения элементов управления потоком .)

Временные регистры

Поддерживается в общей сложности 32 временных регистра (r#).

Управление статическим потоком

Максимальная глубина вложений для цикла ( против/rep ) и составляет 4. Максимальная глубина вложенности для вызова - vs/callnz bool - vs/callnz pred - против 4. Для значений if bool - и максимально допустимое значение глубины вложенности равно 24. (Дополнительные сведения см. в разделе Пределы вложения элементов управления потоком .)

Предикация

Поддерживается предикация инструкций. Используйте setp_comp и , чтобы задать регистр предиката.

Число инструкций

Каждый вершинный шейдер разрешен в любом месте от 512 до количества слотов в MaxVertexShader30InstructionSlots в D3DCAPS9. Количество выполнений инструкций может быть гораздо больше из-за поддержки циклов и повторений; однако это ограничивается maxVShaderInstructionsExecuted в D3DCAPS9, который должен быть по крайней мере 0xFFFF.

Ограничения для устройств

Если поддерживается вершинный шейдер 3_0, в оборудовании поддерживаются следующие ограничения (как минимум):

Колпачок Функция
Шапки шейдера
  • DynamicFlowControlDepth имеет значение 24
  • NumTemps — 32
  • StaticFlowControlDepth имеет значение 4
  • Поддерживается предикация.
GuardBandLeft, GuardBandTop, GuardBandRight, GuardBandBottom 8 КБ
VertexShaderVersion 3_0
MaxVertexShaderConst 256
MaxVertexShader30InstructionSlots 512
Поддержка тумана D3DPRASTERCAPS_FOGVERTEX
VertexTextureFilterCaps
D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET Элементы вершин в объявлении вершины могут совместно использовать одно и то же смещение потока.
Форматы вершин
  • D3DDECLTYPE_UBYTE4
  • D3DDECLTYPE_UBYTE4N
  • D3DDECLTYPE_SHORT2N
  • D3DDECLTYPE_SHORT4N
  • D3DDECLTYPE_FLOAT16_2
  • D3DDECLTYPE_FLOAT16_4

 

Вершинные шейдеры