Ограничения вложенного элемента управления потоком

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

Примечание

При использовании профилей шейдеров *_4_0_level_9_x HLSL вы неявно используете профили модели шейдера 2.x для поддержки оборудования с поддержкой Direct3D 9. Профили модели шейдера 2.x поддерживают более ограниченное поведение управления потоком, чем профили модели шейдера 4.x и более поздних версий.

 

Число глубин на инструкцию для vs_2_0

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

Инструкция Статическая вложенная Динамическое вложение Вложенное вложение loop/rep вложение вызовов Число статических потоков
если bool - vs 0 0 0 0 1
if_comp по сравнению с Недоступно Недоступно Недоступно Недоступно Недоступно
If pred — vs Недоступно Недоступно Недоступно Недоступно Недоступно
else — против 0 0 0 0 1(если логическое значение — не только)
endif — vs -1 0 0 0 0
rep - vs 0 0 1 0 1
endrep — vs 0 0 -1 0 0
цикл — и 0 0 1 0 1
endloop - vs 0 0 -1 0 0
break — и Недоступно Недоступно Недоступно Недоступно Недоступно
break_comp и Недоступно Недоступно Недоступно Недоступно Недоступно
breakp — и Недоступно Недоступно Недоступно Недоступно Недоступно
вызов — и 0 0 0 1 1
callnz bool - vs 0 0 0 1 1
callnz pred - vs Недоступно Недоступно Недоступно Недоступно Недоступно
ret — vs 0 0 0 -1 0
setp_comp по сравнению с Недоступно Недоступно Недоступно Недоступно Недоступно

 

Глубина вложения

Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкций имеет одно или несколько ограничений вложенности:

Тип инструкции Максимум
Статическая вложенная Ограничивается только статическим числом потоков
Динамическое вложение Недоступно
Вложенное вложение loop/rep 1
вложение вызовов 1
Число статических потоков 16

 

Число глубин на инструкцию для vs_2_x

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

Инструкция Статическая вложенная Динамическое вложение Вложенное вложение loop/rep вложение вызовов Число статических потоков
если bool - vs 1 0 0 0 1
if_comp по сравнению с 0 1 0 0 0
If pred — vs 0 1 0 0 0
else — против 0 0 0 0 1(если логическое значение — не только)
endif — vs -1(если логическое значение — vs) -1(если pred - vs или if_comp - vs) 0 0 0
rep - vs 0 0 1 0 1
endrep — vs 0 0 -1 0 0
цикл — и 0 0 1 0 1
endloop - vs 0 0 -1 0 0
break — и 0 0 0 0 0
break_comp и 0 1, -1 0 0 0
breakp — и 0 0 0 0 0
вызов — и 0 0 0 1 1
callnz bool - vs 0 0 0 1 1
callnz pred - vs 0 1 0 1 0
ret — vs 0 -1 (callnz pred - vs) 0 -1 0
setp_comp по сравнению с 0 0 0 0 0

 

Глубина вложения

Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкций имеет одно или несколько ограничений вложенности:

Тип инструкции Максимум
Статическая вложенная Ограничивается только статическим числом потоков
Динамическое вложение 0 или 24, см. раздел D3DCAPS9. VS20Caps.DynamicFlowControlDepth
Вложенное вложение loop/rep От 1 до 4 см. раздел D3DCAPS9. VS20Caps.StaticFlowControlDepth
вложение вызовов От 1 до 4 см. раздел D3DCAPS9. VS20Caps.StaticFlowControlDepth (независимо от ограничения цикла или повторения)
Число статических потоков 16

 

Число глубин на инструкцию для vs_2_sw

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

Инструкция Статическая вложенная Динамическое вложение Вложенное вложение loop/rep вложение вызовов Число статических потоков
если bool - vs 1 0 0 0 Недоступно
if_comp по сравнению с 0 1 0 0 Недоступно
If pred — vs 0 1 0 0 Недоступно
else — против 0 0 0 0 Недоступно
endif — vs -1(если логическое значение — vs) -1(если pred - vs или if_comp - vs) 0 0 Недоступно
rep - vs 0 0 1 0 Недоступно
endrep — vs 0 0 -1 0 Недоступно
цикл — и 0 0 1 0 Недоступно
endloop - vs 0 0 -1 0 Недоступно
break — и 0 0 0 0 Недоступно
break_comp и 0 1, -1 0 0 Недоступно
breakp — и 0 0 0 0 Недоступно
вызов — и 0 0 0 1 Недоступно
callnz bool - vs 0 0 0 1 Недоступно
callnz pred - vs 0 1 0 1 Недоступно
ret — vs 0 -1 (callnz pred - vs) 0 -1 Недоступно
setp_comp по сравнению с 0 0 0 0 Недоступно

 

Глубина вложения

Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкций имеет одно или несколько ограничений вложенности:

Тип инструкции Максимум
Статическая вложенная 24
Динамическое вложение 24
Вложенное вложение loop/rep 4
вложение вызовов 4
Число статических потоков Без ограничений

 

Число глубин на инструкцию для vs_3_0

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

Инструкция Статическая вложенная Динамическое вложение Вложенное вложение loop/rep вложение вызовов Число статических потоков
если bool - vs 1 0 0 0 Недоступно
if_comp по сравнению с 0 1 0 0 Недоступно
If pred — vs 0 1 0 0 Недоступно
else — против 0 0 0 0 Недоступно
endif — vs -1(если логическое значение — vs) -1(если pred - vs или if_comp - vs) 0 0 Недоступно
rep - vs 0 0 1 0 Недоступно
endrep — vs 0 0 -1 0 Недоступно
цикл — и 0 0 1 0 Недоступно
endloop - vs 0 0 -1 0 Недоступно
break — и 0 0 0 0 Недоступно
break_comp и 0 1, -1 0 0 Недоступно
breakp — и 0 0 0 0 Недоступно
вызов — и 0 0 0 1 Недоступно
callnz bool - vs 0 0 0 1 Недоступно
callnz pred - vs 0 1 0 1 Недоступно
ret — vs 0 -1 (callnz pred - vs) 0 -1 Недоступно
setp_comp по сравнению с 0 0 0 0 Недоступно

 

Глубина вложения

Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкций имеет одно или несколько ограничений вложенности:

Тип инструкции Максимум
Статическая вложенная 24
Динамическое вложение 24
Вложение loop/rep 4
вложение вызовов 4
Число статических потоков Без ограничений

 

Число глубин на инструкцию для vs_3_sw

Каждая инструкция учитывается в соответствии с одним или несколькими ограничениями глубины вложенной вложения. В этой таблице показано количество глубин, которое каждая инструкция добавляет или вычитает из существующей глубины:

Инструкция Статическая вложенная Динамическое вложение Вложение loop/rep вложение вызовов Число статических потоков
if bool — vs 1 0 0 0 Недоступно
if_comp по сравнению с 0 1 0 0 Недоступно
If pred — vs 0 1 0 0 Недоступно
else — против 0 0 0 0 Недоступно
endif — vs -1(если логическое значение — против) -1(если pred - vs или if_comp - vs) 0 0 Недоступно
rep - vs 0 0 1 0 Недоступно
endrep — vs 0 0 -1 0 Недоступно
loop — vs 0 0 1 0 Недоступно
endloop — vs 0 0 -1 0 Недоступно
break — vs 0 0 0 0 Недоступно
break_comp по сравнению с 0 1, -1 0 0 Недоступно
breakp — vs 0 0 0 0 Недоступно
call - vs 0 0 0 1 Недоступно
callnz bool - vs 0 0 0 1 Недоступно
callnz pred — vs 0 1 0 1 Недоступно
ret — vs 0 -1 (callnz pred - vs) 0 -1 Недоступно
setp_comp по сравнению с 0 0 0 0 Недоступно

 

Глубина вложения

Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкций имеет одно или несколько ограничений вложенности:

Тип инструкции Максимум
Статическая вложенная 24
Динамическое вложение 24
Вложение loop/rep 4
вложение вызовов 4
Число статических потоков Без ограничений

 

Инструкции по шейдеру вершин