loop (정점 셰이더)
loop...endloop 블록을 시작 한다.
구문
여기서
- aL 는, 현재의 루프 카운트를 저장 하는루프 카운터 레지스터를 나타낸다.
- integerRegister 는 입력 레지스터를 나타낸다. integerRegister.x 는 반복해 수를 나타내, integerRegister.y 는 현재의 루프 카운터 레지스터의 초기값을 나타낸다. integerRegister.z 는 현재의 루프 카운터 레지스터의 증분을 나타낸다. 이 레지스터에서는, 성분을 명시적으로 나타낼 필요가 있다. 즉,. xyzw (rgba) 성분 마스크를 지정해야 한다.
주의
정점 셰이더의 버전 | 1_1 | 2_0 | 2_sw | 2_x | 3_0 | 3_sw |
---|
loop | | x | x | x | x | x |
---|
loop 는,loop...endloop 블록을 시작 한다. 이 명령으로 사용할 수 있는 명령은, 정수 레지스터뿐이다. loop 명령은, 반복을 위한 명령이며, 루프 카운터 레지스터의 자동 인크리먼트(increment)를 지원 한다. 이것을 이용해, 정수 배열의 요소를 지정할 수 있다. 네스트 했을 경우, 루프 카운터 레지스터를 사용할 때마다, 현재의 루프를 참조한다. loop 명령은, 정점 셰이더 명령 슬롯을 1 개 사용한다. 다만, 이제 1 개의 명령 슬롯을 사용하는 endloop 명령과 함께 사용할 필요가 있다. 런타임은, 불완전한 loop...endloop 명령을 검출하려고 한다.
이 명령의 기능을 다음에 나타낸다.
StartLoopOffset = next instruction offset
LoopCounter = IntegerReg.x
IterationCount = IntegerReg.y
LoopStep = InteferReg.z
if (IterationCounter <= 0)
Continue execution after the next EndLoop instruction
- endLoop 명령은, loop 블록 마지막 명령의 뒤에 두지 않으면 안 된다.
- EndLoop 명령의 오프셋(offset)는, loop 명령의 오프셋(offset)보다 크지 않으면 안 된다.
- 루프는 네스트 할 수 없다.
- 루프는, 완전하게 if 블록내에 있는지, 완전하게 블록을 둘러싸고 있는 경우에 사용할 수 있어 if 블록을 또 있고로 사용할 수 없다.
- loop 명령은, 정점 셰이더 명령 슬롯을 1 개 사용한다. 다만, 명령 슬롯을 1 개 소비하는 endloop 명령과 함께 사용할 필요가 있다.
- 루프의 최대 초기값 (베이스 오프셋(offset))은 255 이다.
- loop 의 최대 반복수는 255 이다.
- 최대 스텝/보폭 사이즈는, 부호 첨부의 보폭으로 127 이다. 예를 들어,-128 가 지원 된다.
- 루프의 초기값 및 루프의 반복수는 부로 할 수 없다.
시스템 요건
최저한의 operating system | Windows 98 |
---|