Share via


출력 깊이 레지스터

픽셀 셰이더 출력 깊이 레지스터(oDepth)는 깊이 스텐실 버퍼에 대한 깊이 테스트의 새 깊이 값을 반환하는 [0..1] 범위의 쓰기 전용 스칼라 레지스터입니다.

Syntax

oDepth

 

매개 변수에 대한 설명은 다음과 같습니다.

이름 설명
oDepth 깊이 스텐실 버퍼에 대한 깊이 테스트의 새 깊이 값

 

oDepth에 기록하면 깊이 테스트 성능을 가속화하는 하드웨어별 깊이 버퍼 최적화 알고리즘(즉, 계층적 Z)이 손실된다는 점을 인식하는 것이 중요합니다.

복제 원본 swizzle(.x | .y | .z | .w)은 oDepth에 쓸 때 필요합니다. 명시적 쓰기 마스크는 허용되지 않습니다.

oDepth 레지스터에 쓰는 것은 보간된 깊이 값을 바꿉니다(모든 Z-축 순서 값/경사도 렌더 상태는 무시함). 깊이 버퍼가 만들어지거나 디바이스에 연결되지 않은 경우 oDepth에 대한 쓰기는 무시됩니다.

멀티샘플링 중이고 oDepth에 쓰는 경우 픽셀 셰이더가 픽셀당 한 번만 실행되므로 깊이 값은 모든 하위 샘플 위치에 대해 복제됩니다. 깊이 테스트는 여전히 샘플별로 발생하지만 oDepth를 작성하지 않은 경우와 같이 픽셀 셰이더에서 비교하는 샘플당 깊이 값이 없습니다.

애플리케이션에 깊이 버퍼로 설정된 w 버퍼가 있는 경우 oDepth에 쓰는 동안 이를 고려해야 합니다. 잠재적으로 w-범위 정보를 픽셀 셰이더로 보내고 w-범위를 계산하여 oDepth에 기록된 w-값의 크기를 조정해야 합니다.

ps_2_0 및 ps_2_x 제한 사항

  • oDepth는 mov - ps 명령으로만 쓸 수 있으며 한 번만 수행할 수 있습니다.
  • oDepth에 쓸 때 원본 한정자가 허용되지 않습니다.
  • oDepth에 쓸 때 명령 한정자가 허용되지 않습니다.
  • 흐름 제어 구문 내에서 또는 조건자를 사용할 때 oDepth에 쓰지 않습니다.

ps_3_0 제한 사항

  • ps_3_0의 경우 출력 레지스터 oC# 및 oD#를 여러 번 쓸 수 있습니다. 픽셀 셰이더의 출력은 셰이더 실행이 끝날 때 출력 레지스터의 콘텐츠에서 나옵니다. 흐름 제어로 인해 출력 레지스터에 대한 쓰기가 발생하지 않거나 셰이더가 쓰기를 하지 않은 경우 해당 렌더링 대상도 업데이트되지 않습니다. 출력 레지스터에 있는 채널의 하위 집합이 기록되면 정의되지 않은 값이 나머지 채널에 기록됩니다.
  • 가능한 모든 경로가 결국 레지스터에 기록되는 한 흐름 제어 또는 예측 내에서 oDepth에 기록할 수 있습니다.
  • 분기 조건이 기본 단위(예: 동적 흐름 제어 명령)에 따라 달라지는 흐름 제어 문 내에서 그라데이션 계산(또는 texld - ps_2_0 이상, texldb - ps, texldp - ps와 같은 그라데이션 계산을 암시적으로 호출하는 작업)을 수행할 수 없습니다. 명령 조건자는 동적 흐름 제어로 간주되지 않습니다.

레지스터