흐름 제어 중첩 제한

꼭짓점 셰이더 흐름 제어 명령에는 두 가지 특별한 제한 사항이 있습니다. 중첩 깊이는 서로 내부에서 호출할 수 있는 명령 수를 제한합니다. 또한 각 명령에는 셰이더가 지원할 수 있는 최대 명령 수에 적용되는 명령 슬롯 수가 있습니다.

참고

*_4_0_level_9_x HLSL 셰이더 프로필을 사용하는 경우 셰이더 모델 2.x 프로필을 암시적으로 사용하여 Direct3D 9 가능 하드웨어를 지원합니다. 셰이더 모델 2.x 프로필은 셰이더 모델 4.x 이상 프로필보다 더 제한된 흐름 제어 동작을 지원합니다.

 

vs_2_0에 대한 명령당 깊이 수

각 명령은 하나 이상의 중첩 깊이 제한에 대해 계산됩니다. 이 표는 각 명령이 기존 깊이에서 더하거나 빼는 깊이 수를 보여 줍니다.

명령 정적 중첩 동적 중첩 루프/반복 중첩 호출 중첩 정적 흐름 수
if bool - vs 0 0 0 0 1
if_comp - vs 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음
if pred - vs 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음
else - vs 0 0 0 0 1(if bool - vs only)
endif - vs -1 0 0 0 0
rep - vs 0 0 1 0 1
endrep - vs 0 0 -1 0 0
loop - vs 0 0 1 0 1
endloop - vs 0 0 -1 0 0
break - vs 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음
break_comp - vs 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음
breakp - vs 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음
call - vs 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 - vs 해당 없음 해당 없음 해당 없음 해당 없음 해당 없음

 

중첩 깊이

중첩 깊이는 서로 내부에서 호출할 수 있는 명령 수를 정의합니다. 각 명령 형식에는 하나 이상의 중첩 제한이 있습니다.

명령 형식 최대
정적 중첩 정적 흐름 수에 의해서만 제한됨
동적 중첩 해당 없음
루프/반복 중첩 1
호출 중첩 1
정적 흐름 수 16

 

vs_2_x에 대한 명령당 깊이 수

각 명령은 하나 이상의 중첩 깊이 제한에 대해 계산됩니다. 이 표는 각 명령이 기존 깊이에서 더하거나 빼는 깊이 수를 보여 줍니다.

명령 정적 중첩 동적 중첩 루프/반복 중첩 호출 중첩 정적 흐름 수
if bool - vs 1 0 0 0 1
if_comp - vs 0 1 0 0 0
if pred - vs 0 1 0 0 0
else - vs 0 0 0 0 1(if bool - vs only)
endif - vs -1(if bool - vs) -1(if pred - vs or if_comp - vs) 0 0 0
rep - vs 0 0 1 0 1
endrep - vs 0 0 -1 0 0
loop - vs 0 0 1 0 1
endloop - vs 0 0 -1 0 0
break - vs 0 0 0 0 0
break_comp - vs 0 1, -1 0 0 0
breakp - vs 0 0 0 0 0
call - 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(loop/rep 제한과 무관) 참조
정적 흐름 수 16

 

vs_2_sw에 대한 명령당 깊이 수

각 명령은 하나 이상의 중첩 깊이 제한에 대해 계산됩니다. 이 표는 각 명령이 기존 깊이에서 더하거나 빼는 깊이 수를 보여 줍니다.

명령 정적 중첩 동적 중첩 루프/반복 중첩 호출 중첩 정적 흐름 수
if bool - vs 1 0 0 0 해당 없음
if_comp - vs 0 1 0 0 해당 없음
if pred - vs 0 1 0 0 해당 없음
else - vs 0 0 0 0 해당 없음
endif - vs -1(if bool - vs) -1(if pred - vs or 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 - vs 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 - vs 0 0 0 0 해당 없음

 

중첩 깊이

중첩 깊이는 서로 내부에서 호출할 수 있는 명령 수를 정의합니다. 각 명령 형식에는 하나 이상의 중첩 제한이 있습니다.

명령 형식 최대
정적 중첩 24
동적 중첩 24
루프/반복 중첩 4
호출 중첩 4
정적 흐름 수 제한 없음

 

vs_3_0에 대한 명령당 깊이 수

각 명령은 하나 이상의 중첩 깊이 제한에 대해 계산됩니다. 이 표는 각 명령이 기존 깊이에서 더하거나 빼는 깊이 수를 보여 줍니다.

명령 정적 중첩 동적 중첩 루프/반복 중첩 호출 중첩 정적 흐름 수
if bool - vs 1 0 0 0 해당 없음
if_comp - vs 0 1 0 0 해당 없음
if pred - vs 0 1 0 0 해당 없음
else - vs 0 0 0 0 해당 없음
endif - vs -1(if bool - vs) -1(if pred - vs or 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 - vs 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 - vs 0 0 0 0 해당 없음

 

중첩 깊이

중첩 깊이는 서로 내부에서 호출할 수 있는 명령 수를 정의합니다. 각 명령 형식에는 하나 이상의 중첩 제한이 있습니다.

명령 형식 최대
정적 중첩 24
동적 중첩 24
루프/반복 중첩 4
호출 중첩 4
정적 흐름 수 제한 없음

 

vs_3_sw에 대한 명령당 깊이 수

각 명령은 하나 이상의 중첩 깊이 제한에 대해 계산됩니다. 이 표는 각 명령이 기존 깊이에서 더하거나 빼는 깊이 수를 보여 줍니다.

명령 정적 중첩 동적 중첩 루프/반복 중첩 호출 중첩 정적 흐름 수
if bool - vs 1 0 0 0 해당 없음
if_comp - vs 0 1 0 0 해당 없음
if pred - vs 0 1 0 0 해당 없음
else - vs 0 0 0 0 해당 없음
endif - vs -1(if bool - vs) -1(if pred - vs or 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 - vs 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 - vs 0 0 0 0 해당 없음

 

중첩 깊이

중첩 깊이는 서로 내부에서 호출할 수 있는 명령 수를 정의합니다. 각 명령 형식에는 하나 이상의 중첩 제한이 있습니다.

명령 형식 최대
정적 중첩 24
동적 중첩 24
루프/반복 중첩 4
호출 중첩 4
정적 흐름 수 제한 없음

 

꼭짓점 셰이더 명령