vs_3_0
Программируемый шейдер вершин состоит из набора инструкций, которые работают с данными вершин. Регистрирует передачу данных в ALU и из него. Для изменения инструкции, результатов или записанных данных можно применить дополнительный контроль.
Версия vs_3_0 вершинного шейдера расширяет набор функций, поддерживаемый vs_2_x. Каждая из функций в vs_2_X, для которой требуется установить ограничение, доступна в vs_3_0 без ограничения.
- Инструкции— vs_3_0 содержит список доступных инструкций.
- Registers — vs_3_0 перечисляет различные типы регистров, используемых ALU вершинного шейдера.
- Модификаторы регистра шейдера вершин используются для изменения способа работы инструкции.
- Модификаторы регистра источника шейдера вершин изменяют данные регистра источника перед выполнением инструкции.
- Source Register Swizzling дает дополнительный контроль над тем, какие компоненты регистра считываются, копируются или записываются.
- Маскирование регистра назначения определяет, какие компоненты регистра назначения будут записаны.
Новые возможности
Новые возможности версии 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, в оборудовании поддерживаются следующие ограничения (как минимум):
Колпачок | Функция |
---|---|
Шапки шейдера |
|
GuardBandLeft, GuardBandTop, GuardBandRight, GuardBandBottom | 8 КБ |
VertexShaderVersion | 3_0 |
MaxVertexShaderConst | 256 |
MaxVertexShader30InstructionSlots | 512 |
Поддержка тумана | D3DPRASTERCAPS_FOGVERTEX |
VertexTextureFilterCaps | |
D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET | Элементы вершин в объявлении вершины могут совместно использовать одно и то же смещение потока. |
Форматы вершин |
|
Связанные темы