출력 색 레지스터
픽셀 셰이더 색 출력 레지스터(oC#)는 결과를 여러 렌더링 대상으로 출력하는 쓰기 전용 레지스터입니다.
Syntax
oC# |
---|
매개 변수에 대한 설명은 다음과 같습니다.
이름 | 설명 |
---|---|
oC0 | 렌더링 대상 #0 |
oC1 | 렌더링 대상 #1 |
oC2 | 렌더링 대상 #2 |
oC3 | 렌더링 대상 #3 |
설명
- oCn이 쓰였지만 해당 렌더링 대상이 없는 경우 oCn에 대한 이 쓰기는 무시됩니다.
- 렌더링 상태 D3DRS_COLORWRITEENABLE, D3DRS_COLORWRITEENABLE1, D3DRS_COLORWRITEENABLE2 및 D3DRS_COLORWRITEENABLE3은 (해당하는 경우 혼합 후) 최종적으로 렌더링 대상에 어떤 oCn 구성 요소가 기록되는지 결정합니다. 셰이더가 지정된 oCn 레지스터에 대해 D3DRS_COLORWRITEENABLE* 렌더링 상태로 정의된 구성 요소 중 전부가 아니라 일부를 기록하는 경우 기록되지 않은 채널은 해당 렌더링 대상에서 정의되지 않은 값을 생성합니다. oCn의 구성 요소 중 어떤 것도 기록되지 않은 경우 해당 렌더링 대상은 (위에서 설명한 대로) 업데이트해서는 안 됩니다. 따라서 D3DRS_COLORWRITEENABLE* 렌더링 상태가 적용되지 않습니다.
셰이더 모델 2 제한 사항
- oCn은 mov - ps 명령으로만 쓸 수 있습니다.
- oC0은 항상 셰이더에서 써야 합니다.
- 임의 oCn에 쓸 때 원본 스위즐(.xyzw = 기본 스위즐 제외) 또는 원본 한정자는 허용되지 않습니다.
- 임의 oCn에 쓸 때 대상 쓰기 마스크(.xyzw = 기본 마스크 제외) 또는 명령 한정자가 허용되지 않습니다.
- oCn을 쓰면 oC0 - oCn-1도 써야 합니다. 예를 들어 oC2로 쓰려면 oC0 및 oC1로도 써야 합니다.
- 셰이더당 oC#에 대한 쓰기는 최대 1회 허용됩니다.
- ps_2_x 및 ps_3_0 경우 동적 흐름 제어 또는 조건자 내에서 oC# 및 oD# 레지스터에 쓸 수 없습니다(정적 흐름 제어 내에서 oC#에 쓰기는 괜찮음).
셰이더 모델 3 제한 사항
- ps_3_0 경우 출력 레지스터 oC# 및 oD#은 횟수에 제한 없이 쓸 수 있습니다. 픽셀 셰이더의 출력은 셰이더 실행이 끝날 때 출력 레지스터의 내용에서 가져옵니다. 흐름 제어로 인해 출력 레지스터에 대한 쓰기가 발생하지 않거나 셰이더가 이러한 쓰기를 기록하지 않은 경우 해당 렌더링 대상 역시 업데이트되지 않습니다. 출력 레지스터에 있는 채널의 하위 집합이 기록되면 정의되지 않은 값이 나머지 채널에 기록됩니다.
- ps_3_0 경우 모든 쓰기 마스크를 사용하여 oC# 레지스터를 작성할 수 있습니다.
- ps_2_x 및 ps_3_0 경우 동적 흐름 제어 또는 조건자 내에서 oC# 및 oD# 레지스터에 쓸 수 없습니다(정적 흐름 제어 내에서 oC#에 쓰기는 괜찮음).
- 분기 조건이 기본 단위(예: 동적 흐름 제어 명령)에 따라 달라지는 흐름 제어 문 내에서 그라데이션 계산(또는 texld - ps_2_0 이상, texldb - ps, texldp - ps와 같은 그라데이션 계산을 암시적으로 호출하는 작업)을 수행할 수 없습니다. 명령 조건자는 동적 흐름 제어로 간주되지 않습니다.
관련 항목