shader 2.0 & 3.0

반응형

이전에 입사하면서 2.0과 3.0의 차이를 말하라는 면접질문을 받은적이 있다.
지금도 그렇지만 그때는 더욱 아는게 없었고 그래서 머 농담식으로 "3.0이 2.0보다 더 좋을 겁니다" 라고 했었었다.
그냥 그때 알고 있던 거라도 말할걸 그랬나 하고 일년반이나 지난 지금 후회하고 있긴 하지만...
머, 결국은 회사 잘 다니고 있으니까.. ㅎㅎㅎ.

shader 공부를 하는도중에 생각이 나서좀 정리를 해두고싶네..

2.0과 3.0의 차이점.

1. 유연한 입출력 선언.
세이더 프로그램에 대한 입력의 수가 지원되는 입력 레지스터의 수를 초과하더라도,
여러 입력들을 한 레지스터에 함께 넣ㅇ르 수 있다.

2. 조건자의 제공.
동적인 쓰기 마스킹이 가능한 4개의 불린 플래그들의 묶음으로 이루어진 레지스터.
이 레지스터를 이용하여 보통 4개의 채널별로 일어나는 세이더 연산이 적용될 것인지 아닌지를 정한다.

3. 정적, 동적 조건 분기
정적 조건 제어는 분기별 서로 다른 코드들을 한 세이더 안에 넣을 수 있게 하여 세이더 상태가
변하는 횟수를 줄일 수 있게 해 주며 정적루프는 고정된 회수의 루프를 사용할 경우에 유용하다.
2.0과 3.0의 차이점은 2.0에서는 정적 조건분기가 중첩문을 사용할 수 없다는 것이다.
3.0은 4단계의 중첩이 되는 정적조건 분기를 지원하며 동적 조건분기를 지원한다.
동적조건 분기는 세이더 프로그램 내의 결과값에 의해 수정된 레지스터 값을 비교하여 다른 코드를 수행하는 것이다.

4. 임의의 스위즐
2.0은 vs만 지원하고 ps에서는 지원하지 않지만 3.0은 둘 다 지원한다.

5. 텍스쳐 명령어 상의 쓰기 금지 마스크
3.0 에서는 이 기능을 이용하여 선택된 색상채널만 destination 레지스터에 텍스쳐 샘플링 결과로 업데이트할 수 있다.
이것을 이용하여 텍스쳐 명령어를 수행하는 도중에 쓰기 금지된 성분을 보호 할 수 있다.

vs3.0의 기능

1. 레지스터
vs2.0에서는 12개의 레지스터가 있지만 vs3.0에서는 32개의 레지스터가 있다.

2. 명령어
vs2.0은 256개의 명령어를 지원하지만 vs3.0은 512개의 명령어를 지원한다.

3. 텍스쳐 샘플링
2.0에도 정점 세이더 유닛에 기본적인 텍스쳐 샘플러 기능이 있지만 기능이 제한적.
3.0에서는 정점 텍스쳐링을 완벽히 지원하기 떄문에 정점 세이더에서도 픽셀 세이더와 같은 수준의
기능과 유연함을 가지고 텍스쳐를 참조할 수 있다.

4. 정점 스트림 빈도
같은 입력데이터를 한번 이상 사용할 수 있도록 정점 데이터를 서로 다른 비율로 가져올 수 있다.

ps3.0의 기능

1. 레지스터
32개의 임시레지스터와 256개의 상수레지스터를 지원한다.

2. 명령어
ps2.0에서 96개의 명령어를 지원하는 것에 반해 ps3.0에서는 512개의 명령어를 지원한다.

3. 무제한의 텍스쳐 샘플과 의존적 읽기
ps3.0에서는 모든 텍스쳐 읽기 제한이 완벽하게 없어졌다.

결론은?
3.0이 2.0보다 더 좋아졌다는거지.
역시 난 면접때 제대로 말했군.. 좀 압축하고 결론만 말하긴 했지만.

참고 : shaderx 2권
TAGS.

Comments