ps_1_X에 대한 한정자

명령 한정자는 대상 레지스터에 기록되기 전에 명령의 결과에 영향을 미칩니다. 예를 들어 결과에 인수 2를 곱하거나, 결과를 인수 2로 나누거나, 결과를 0과 1 사이로 고정하는 데 사용합니다. 명령 한정자는 명령이 실행된 후 대상 레지스터에 결과를 쓰기 전에 적용됩니다.

한정자 목록은 다음과 같습니다.

한정자 설명 Syntax 버전 1_1 버전 1_2 버전 1_3 버전 1_4
_x2 2 곱하기 instruction_x2 X X X X
_x4 4 곱하기 instruction_x4 X X X X
_x8 8 곱하기 instruction_x8 X
_d2 2로 나누기 instruction_d2 X X X X
_d4 4로 나누기 instruction_d4 X
_d8 8로 나누기 instruction_d8 X
_sat 포화(0과 1에서 고정) instruction_sat X X X X

 

  • 곱하기 한정자는 읽힌 후 레지스터 데이터에 멱수 2를 곱합니다. 이는 왼쪽 시프트와 동일합니다.
  • 나누기 한정자는 읽힌 후 레지스터 데이터를 멱수 2로 나눕니다. 이는 오른쪽 시프트와 동일합니다.
  • 포화 한정자는 레지스터 값의 범위를 0~1로 고정합니다.

명령 한정자는 산술 명령에 사용할 수 있습니다. 텍스처 주소 지침에서는 사용할 수 없습니다.

곱하기 한정자

다음은 원본 피연산자(src0 및 src1)에서 두 색의 합계를 사용하여 대상 레지스터(dest)를 로드하고 그 결과를 2로 나누는 예제입니다.

add_x2 dest, src0, src1

이 예제에서는 명령 한정자 두 개를 결합합니다. 먼저, 원본 피연산자(src0 및 src1)의 두 색을 더합니다. 그런 다음 결과에 2를 곱하고 각 구성 요소에 대해 0.0에서 1.0 사이로 고정됩니다. 결과는 대상 레지스터에 저장됩니다.

add_x2_sat dest, src0, src1

나누기 한정자

다음은 원본 피연산자(src0 및 src1)에서 두 색의 합계를 사용하여 대상 레지스터(dest)를 로드하고 그 결과를 2로 나누는 예제입니다.

add_d2 dest, src0, src1

포화 한정자

산술 명령의 경우 채도 한정자는 이 명령의 결과를 각 구성 요소에 대해 0.0~1.0 범위로 고정합니다. 다음 예제에서는 이 명령 한정자를 사용하는 방법을 보여 줍니다.

dp3_sat r0, t0_bx2, v0_bx2    ; t0 is bump, v0 is light direction

이 작업은 곱하기 또는 나누기 명령 한정자 다음에 발생합니다. _sat는 내적 결과를 고정하는 데 가장 자주 사용됩니다. 그러나 프레임 버퍼가 항상 0~1 범위이고, 모든 단계에서 포화가 발생하도록 정의된 DirectX 6 및 7.0 다중 텍스트 구문의 멀티패스 메서드를 일관되게 에뮬레이션할 수도 있습니다.

다음은 원본 피연산자(src0 및 src1)에서 두 색의 합계를 사용하여 대상 레지스터(dest)를 로드하고 그 결과를 각 구성 요소에 대해 0.0~1.0 범위로 고정하는 예제입니다.

add_sat dest, src0, src1

이 예제에서는 명령 한정자 두 개를 결합합니다. 먼저, 원본 피연산자(src0 및 src1)의 두 색을 더합니다. 그 결과에 2를 곱하고 결과는 각 구성 요소에 대해 0.0에서 1.0 사이로 고정됩니다. 결과는 대상 레지스터에 저장됩니다.

add_x2_sat dest, src0, src1

픽셀 셰이더 명령