Ограничения вложенных элементов управления потоками
Инструкции по управлению потоком вершинных шейдеров имеют два специальных ограничения. Глубины вложения ограничивают количество инструкций, которые можно вызывать внутри друг друга. Кроме того, каждая инструкция имеет количество слотов инструкций, которое применяется к максимальному количеству инструкций, которые может поддерживать шейдер.
Заметка
При использовании профилей шейдера *_4_0_level_9_x HLSL вы неявно используете профили шейдера 2.x для поддержки оборудования с поддержкой Direct3D 9. Профили модели 2.x шейдера поддерживают более ограниченное поведение управления потоком, чем шейдер модели 4.x и более поздних версий профилей.
Количество глубин на инструкцию для vs_2_0
Каждая инструкция учитывает одно или несколько ограничений глубины вложения. В этой таблице показано количество глубин, которое каждая инструкция добавляет или вычитает из существующей глубины:
Инструкция | Статическое вложение | Динамическое вложение | цикл или вложенный фрагмент | вложение вызовов | Число статических потоков |
---|---|---|---|---|---|
если логическое значение — и | 0 | 0 | 0 | 0 | 1 |
if_comp — и | n/a | n/a | n/a | n/a | n/a |
, если предопределено — и | n/a | n/a | n/a | n/a | n/a |
else - vs | 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 |
перерыв - и | n/a | n/a | n/a | n/a | n/a |
break_comp — vs | n/a | n/a | n/a | n/a | n/a |
останова — и | n/a | n/a | n/a | n/a | n/a |
вызов — vs | 0 | 0 | 0 | 1 | 1 |
callnz bool - vs | 0 | 0 | 0 | 1 | 1 |
callnz pred - vs | n/a | n/a | n/a | n/a | n/a |
ret - vs | 0 | 0 | 0 | -1 | 0 |
setp_comp — vs | n/a | n/a | n/a | n/a | n/a |
Глубина вложения
Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкции имеет одно или несколько ограничений вложения:
Тип инструкции | Максимум |
---|---|
Статическое вложение | Только ограничено статическим числом потоков |
Динамическое вложение | n/a |
цикл или вложенный фрагмент | 1 |
вложение вызовов | 1 |
Число статических потоков | 16 |
Количество глубин на инструкцию для vs_2_x
Каждая инструкция учитывает одно или несколько ограничений глубины вложения. В этой таблице показано количество глубин, которое каждая инструкция добавляет или вычитает из существующей глубины:
Инструкция | Статическое вложение | Динамическое вложение | цикл или вложенный фрагмент | вложение вызовов | Число статических потоков |
---|---|---|---|---|---|
если логическое значение — и | 1 | 0 | 0 | 0 | 1 |
if_comp — и | 0 | 1 | 0 | 0 | 0 |
, если предопределено — и | 0 | 1 | 0 | 0 | 0 |
else - vs | 0 | 0 | 0 | 0 | 1(, если логическое значение — только) |
endif — vs | -1(if bool - vs) | -1(, если предварительно - 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 |
перерыв - и | 0 | 0 | 0 | 0 | 0 |
break_comp — vs | 0 | 1, -1 | 0 | 0 | 0 |
останова — и | 0 | 0 | 0 | 0 | 0 |
вызов — vs | 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 — vs | 0 | 0 | 0 | 0 | 0 |
Глубина вложения
Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкции имеет одно или несколько ограничений вложения:
Тип инструкции | Максимум |
---|---|
Статическое вложение | Только ограничено статическим числом потоков |
Динамическое вложение | 0 или 24 см. D3DCAPS9. VS20Caps.DynamicFlowControlDepth |
цикл или вложенный фрагмент | 1–4 см. D3DCAPS9. VS20Caps.StaticFlowControlDepth |
вложение вызовов | 1–4 см. D3DCAPS9. VS20Caps.StaticFlowControlDepth (независимо от ограничения цикла или rep) |
Число статических потоков | 16 |
Количество глубин на инструкцию для vs_2_sw
Каждая инструкция учитывает одно или несколько ограничений глубины вложения. В этой таблице показано количество глубин, которое каждая инструкция добавляет или вычитает из существующей глубины:
Инструкция | Статическое вложение | Динамическое вложение | цикл или вложенный фрагмент | вложение вызовов | Число статических потоков |
---|---|---|---|---|---|
если логическое значение — и | 1 | 0 | 0 | 0 | n/a |
if_comp — и | 0 | 1 | 0 | 0 | n/a |
, если предопределено — и | 0 | 1 | 0 | 0 | n/a |
else - vs | 0 | 0 | 0 | 0 | n/a |
endif — vs | -1(if bool - vs) | -1(, если предварительно - vs или if_comp - vs) | 0 | 0 | n/a |
rep - vs | 0 | 0 | 1 | 0 | n/a |
endrep — vs | 0 | 0 | -1 | 0 | n/a |
цикл — и | 0 | 0 | 1 | 0 | n/a |
endloop - vs | 0 | 0 | -1 | 0 | n/a |
перерыв - и | 0 | 0 | 0 | 0 | n/a |
break_comp — vs | 0 | 1, -1 | 0 | 0 | n/a |
останова — и | 0 | 0 | 0 | 0 | n/a |
вызов — vs | 0 | 0 | 0 | 1 | n/a |
callnz bool - vs | 0 | 0 | 0 | 1 | n/a |
callnz pred - vs | 0 | 1 | 0 | 1 | n/a |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | n/a |
setp_comp — vs | 0 | 0 | 0 | 0 | n/a |
Глубина вложения
Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкции имеет одно или несколько ограничений вложения:
Тип инструкции | Максимум |
---|---|
Статическое вложение | 24 |
Динамическое вложение | 24 |
цикл или вложенный фрагмент | 4 |
вложение вызовов | 4 |
Число статических потоков | Ограничение не ограничено |
Количество глубин на инструкцию для vs_3_0
Каждая инструкция учитывает одно или несколько ограничений глубины вложения. В этой таблице показано количество глубин, которое каждая инструкция добавляет или вычитает из существующей глубины:
Инструкция | Статическое вложение | Динамическое вложение | цикл или вложенный фрагмент | вложение вызовов | Число статических потоков |
---|---|---|---|---|---|
если логическое значение — и | 1 | 0 | 0 | 0 | n/a |
if_comp — и | 0 | 1 | 0 | 0 | n/a |
, если предопределено — и | 0 | 1 | 0 | 0 | n/a |
else - vs | 0 | 0 | 0 | 0 | n/a |
endif — vs | -1(if bool - vs) | -1(, если предварительно - vs или if_comp - vs) | 0 | 0 | n/a |
rep - vs | 0 | 0 | 1 | 0 | n/a |
endrep — vs | 0 | 0 | -1 | 0 | n/a |
цикл — и | 0 | 0 | 1 | 0 | n/a |
endloop - vs | 0 | 0 | -1 | 0 | n/a |
перерыв - и | 0 | 0 | 0 | 0 | n/a |
break_comp — vs | 0 | 1, -1 | 0 | 0 | n/a |
останова — и | 0 | 0 | 0 | 0 | n/a |
вызов — vs | 0 | 0 | 0 | 1 | n/a |
callnz bool - vs | 0 | 0 | 0 | 1 | n/a |
callnz pred - vs | 0 | 1 | 0 | 1 | n/a |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | n/a |
setp_comp — vs | 0 | 0 | 0 | 0 | n/a |
Глубина вложения
Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкции имеет одно или несколько ограничений вложения:
Тип инструкции | Максимум |
---|---|
Статическое вложение | 24 |
Динамическое вложение | 24 |
цикл или вложенный фрагмент | 4 |
вложение вызовов | 4 |
Число статических потоков | Ограничение не ограничено |
Количество глубин на инструкцию для vs_3_sw
Каждая инструкция учитывает одно или несколько ограничений глубины вложения. В этой таблице показано количество глубин, которое каждая инструкция добавляет или вычитает из существующей глубины:
Инструкция | Статическое вложение | Динамическое вложение | цикл или вложенный фрагмент | вложение вызовов | Число статических потоков |
---|---|---|---|---|---|
если логическое значение — и | 1 | 0 | 0 | 0 | n/a |
if_comp — и | 0 | 1 | 0 | 0 | n/a |
, если предопределено — и | 0 | 1 | 0 | 0 | n/a |
else - vs | 0 | 0 | 0 | 0 | n/a |
endif — vs | -1(if bool - vs) | -1(, если предварительно - vs или if_comp - vs) | 0 | 0 | n/a |
rep - vs | 0 | 0 | 1 | 0 | n/a |
endrep — vs | 0 | 0 | -1 | 0 | n/a |
цикл — и | 0 | 0 | 1 | 0 | n/a |
endloop - vs | 0 | 0 | -1 | 0 | n/a |
перерыв - и | 0 | 0 | 0 | 0 | n/a |
break_comp — vs | 0 | 1, -1 | 0 | 0 | n/a |
останова — и | 0 | 0 | 0 | 0 | n/a |
вызов — vs | 0 | 0 | 0 | 1 | n/a |
callnz bool - vs | 0 | 0 | 0 | 1 | n/a |
callnz pred - vs | 0 | 1 | 0 | 1 | n/a |
ret - vs | 0 | -1 (callnz pred - vs) | 0 | -1 | n/a |
setp_comp — vs | 0 | 0 | 0 | 0 | n/a |
Глубина вложения
Глубина вложенности определяет, сколько инструкций можно вызывать внутри друг друга. Каждый тип инструкции имеет одно или несколько ограничений вложения:
Тип инструкции | Максимум |
---|---|
Статическое вложение | 24 |
Динамическое вложение | 24 |
цикл или вложенный фрагмент | 4 |
вложение вызовов | 4 |
Число статических потоков | Ограничение не ограничено |
Связанные разделы