callc(sm4 - asm)
프로그램에서 l# 레이블이 나타나는 위치로 표시된 서브루틴을 조건부로 호출합니다.
callc{_z|_nz} src0.select_component, l# |
---|
항목 | 설명 |
---|---|
src0 |
[in] 조건을 테스트할 성분입니다. |
l# |
[in] 서브루틴의 레이블입니다. |
설명
ret가 발생하면 이 호출 후 명령으로 실행을 반환합니다.
토큰 형식에는 편의상 셰이더에서 해당 레이블의 오프셋이 포함되어 있습니다.
다음 예에서는 호출 명령을 보여 줍니다.
...
callc_z r1.y, l3 // if all bits in r0.x are 0, call l3
callc_nz r2.z, l3 // if any bit in r0.x is nonzero, call l3
...
ret
label l3
...
retc_nz r0.x
...
ret
제한
- 서브루틴은 32개의 깊이로 중첩될 수 있습니다.
- 반환 주소 스택은 구현에 의해 투명하게 관리됩니다.
- 반환 주소 스택에 이미 32개의 항목이 있고 호출이 발생하면 호출을 건너뜁니다.
- 자동 매개 변수 스택이 없습니다. 애플리케이션은 인덱싱 가능한 임시 레지스터 배열(x#[])을 사용하여 수동으로 스택을 구현할 수 있습니다. 그러나 서브루틴 호출 반환 주소는 표시되지 않으며 애플리케이션에서 수행하는 수동 스택 관리와 직교합니다.
- l# 매개 변수의 인덱싱은 허용되지 않습니다.
- src0에서 제공하는 32비트 레지스터는 비트 수준에서 테스트됩니다. 0이 아닌 비트가 있으면 callc_nz가 호출을 수행합니다. 모든 비트가 0이면 callc_z가 호출을 수행합니다.
- 재귀는 허용되지 않습니다.
이 명령은 다음 셰이더 단계에 적용됩니다.
꼭짓점 셰이더 | 기하 도형 셰이더 | 픽셀 셰이더 |
---|---|---|
x | x | x |
최소 셰이더 모델
이 함수는 다음 셰이더 모델에서 지원됩니다.
셰이더 모델 | 지원됨 |
---|---|
셰이더 모델 5 | 예 |
셰이더 모델 4.1 | 예 |
셰이더 모델 4 | 예 |
셰이더 모델 3(DirectX HLSL) | 아니요 |
셰이더 모델 2(DirectX HLSL) | 아니요 |
셰이더 모델 1(DirectX HLSL) | 아니요 |