ps_1_1__ps_1_2__ps_1_3__ps_1_4 레지스터
픽셀 셰이더는 꼭짓점 데이터를 가져오고, 픽셀 데이터를 출력하고, 계산 중에 임시 결과를 유지하고, 텍스처 샘플링 단계를 식별하기 위해 레지스터에 의존합니다. 각각 고유한 기능을 가진 여러 형식의 레지스터가 있습니다. 이 섹션에는 픽셀 셰이더 버전 1_x로 구현된 입출력 레지스터에 대한 참조 정보가 포함되어 있습니다.
레지스터는 픽셀 셰이더에서 사용할 데이터를 저장합니다. 레지스터는 다음 섹션에서 완전히 설명합니다.
- 레지스터 형식은 사용 가능한 네 가지 유형의 레지스터와 해당 용도를 설명합니다.
- 읽기 포트 제한은 단일 명령에서 여러 레지스터 사용에 대한 제한 사항을 자세히 설명합니다.
- 읽기 전용 읽기 쓰기는 읽기, 쓰기 또는 둘 다에 사용할 수 있는 레지스터를 설명합니다.
- 범위는 구성 요소 데이터의 범위를 자세히 설명합니다.
레지스터 형식
속성 | Type | 버전 1_1 | 버전 1_2 | 버전 1_3 | 버전 1_4 |
---|---|---|---|---|---|
C# | 상수 레지스터 | 8 | 8 | 8 | 8 |
r# | 임시 레지스터 | 2 | 2 | 2 | 6 |
t# | 텍스처 레지스터 | 4 | 4 | 4 | 6 |
v# | 색상 레지스터 | 2 | 2 | 2 | 2단계의 2 |
상수 레지스터에는 상수 데이터가 포함됩니다. SetPixelShaderConstantF를 사용하여 상수 레지스터에 데이터를 로드하거나 def - ps를 사용하여 정의할 수 있습니다. 상수 레지스터는 텍스처 주소 명령에서 사용할 수 없습니다. 유일한 예외는 상수 레지스터를 사용하여 눈 광선 벡터를 제공하는 texm3x3spec - ps 명령입니다.
임시 레지스터는 중간 결과를 저장하는 데 사용됩니다. r0은 픽셀 셰이더 출력으로도 사용됩니다. 셰이더 끝에 있는 r0 값은 셰이더의 픽셀 색입니다.
셰이더 유효성 검사는 이전 명령으로 작성되지 않은 임시 레지스터에서 읽으려고 시도하는 셰이더에서 CreatePixelShader에 실패합니다. 유효성 검사가 활성화되어 있다고 가정하면 D3DXAssembleShader도 유사하게 실패합니다(D3DXSHADER_SKIPVALIDATION 사용하지 말 것).
텍스처 레지스터
픽셀 셰이더 버전 1_1~1_3의 경우, 텍스처 레지스터에는 텍스처 데이터 또는 텍스처 좌표가 포함됩니다. 텍스처 데이터는 텍스처를 샘플링할 때 텍스처 레지스터에 로드됩니다. 텍스처 샘플링은 텍스처 스테이지 상태 특성을 고려하면서 텍스처 좌표를 사용하여 지정된(u,v,w,q) 좌표의 색 값을 조회하거나 샘플링합니다. 텍스처 좌표 데이터는 꼭짓점 텍스처 좌표 데이터에서 보간되며 특정 텍스처 스테이지와 연결됩니다. 텍스처 스테이지 번호와 텍스처 좌표 선언 순서 사이에는 기본 일대일 연결이 있습니다. 기본적으로 꼭짓점 형식으로 정의된 첫 번째 텍스처 좌표 집합은 텍스처 스테이지 0과 연결됩니다.
이러한 픽셀 셰이더 버전의 경우 텍스처 레지스터는 산술 명령에서 사용할 때 임시 레지스터처럼 동작합니다.
픽셀 셰이더 버전 1_4의 경우 텍스처 레지스터(t#)에는 읽기 전용 텍스처 좌표 데이터가 포함됩니다. 즉, 텍스처 좌표 집합과 텍스처 스테이지 번호는 서로 독립적입니다. 텍스처 스테이지 번호(텍스처를 샘플링할)는 대상 레지스터 번호(r0~r5)에 따라 결정됩니다. texld 명령의 경우 텍스처 좌표 집합은 원본 레지스터(t0 ~t5)에 의해 결정되므로 텍스처 좌표 집합을 모든 텍스처 단계에 매핑할 수 있습니다. 또한 texld에 대한 원본 레지스터(텍스처 좌표 지정)는 임시 레지스터(r#)일 수도 있습니다. 이 경우 임시 레지스터의 내용이 텍스처 좌표로 사용됩니다.
색상 레지스터에는 픽셀당 색 값이 포함됩니다. 값은 꼭짓점 데이터의 확산 및 반사 색 값을 픽셀당 반복하여 가져옵니다. 픽셀 셰이더 버전 1_4 셰이더의 경우, 색상 레지스터는 두 번째 단계에서만 사용할 수 있습니다.
음영 모드가 D3DSHADE_FLAT으로 설정되면 두 꼭짓점 색상(확산 및 반사)의 반복이 비활성화됩니다. 음영 모드에 관계없이 픽셀 안개를 사용하는 경우 파이프라인에서 안개가 계속 반복됩니다. 안개는 픽셀 셰이더보다 파이프라인의 뒷부분에 적용됩니다.
꼭짓점 확산 색 데이터를 사용하여 v0 레지스터를 로드하는 것이 일반적입니다. 또한 꼭짓점 반사 색 데이터를 사용하여 v1 레지스터를 로드하는 것이 일반적입니다.
입력 색 데이터 값은 픽셀 셰이더의 색상 레지스터에 유효한 입력 범위이므로 0부터 1까지의 범위로 고정됩니다.
픽셀 셰이더는 색상 레지스터에 대한 읽기 전용 액세스 권한이 있습니다. 이러한 레지스터의 내용은 반복된 값이지만 반복은 텍스처 좌표보다 훨씬 낮은 정밀도로 수행될 수 있습니다.
읽기 포트 제한
읽기 포트 제한은 단일 명령에서 원본 레지스터로 사용할 수 있는 각 레지스터 유형의 서로 다른 레지스터 수를 지정합니다.
속성 | Type | 버전 1_1 | 버전 1_2 | 버전 1_3 | 버전 1_4 |
---|---|---|---|---|---|
C# | 상수 레지스터 | 2 | 2 | 2 | 2 |
r# | 임시 레지스터 | 2 | 2 | 2 | 3 |
t# | 텍스처 레지스터 | 2 | 3 | 3 | 1 |
v# | 색상 레지스터 | 2 | 2 | 2 | 2단계의 2 |
예를 들어 거의 모든 버전에 대한 색상 레지스터의 읽기 포트 제한은 2입니다. 즉, 단일 명령은 최대 두 개의 서로 다른 색상 레지스터(예: v0 및 v1)를 원본 레지스터로 사용할 수 있습니다. 다음 예는 동일한 명령에서 사용되는 두 개의 색상 레지스터를 보여줍니다.
mad r0, v1, c2, v0
읽기 전용, 읽기/쓰기
레지스터 형식은 다음 표의 RO(읽기 전용) 기능 또는 RW(읽기/쓰기) 기능에 따라 식별됩니다. 읽기 전용 레지스터는 명령에서 원본 레지스터로만 사용할 수 있으며 대상 레지스터로 사용할 수 없습니다.
속성 | Type | 버전 1_1 | 버전 1_2 | 버전 1_3 | 버전 1_4 |
---|---|---|---|---|---|
속성 | Type | 1_1 | 1_2 | 1_3 | 1_4 |
C# | 상수 레지스터 | RO | RO | RO | RO |
r# | 임시 레지스터 | RW | RW | RW | RW |
t# | 텍스처 레지스터 | RW | RW | RW | 다음 메모를 참조하세요. |
v# | 색상 레지스터 | RO | RO | RO | RO |
RW가 가능한 레지스터는 중간 결과를 저장하는 데 사용할 수 있습니다. 여기에는 일부 셰이더 버전에 대한 임시 레지스터 및 텍스처 레지스터가 포함됩니다.
참고
- 픽셀 셰이더 버전 1_4의 경우, 텍스처 레지스터는 텍스처 주소 지정 명령을 위한 RO이며, 텍스처 레지스터는 산술 명령에서 읽거나 쓸 수 없습니다. 또한 텍스처 레지스터가 텍스처 좌표 레지스터가 되었기 때문에 RO 액세스 권한이 있는 것은 이전 기능의 회귀가 아닙니다.
범위
범위는 최대 및 최소 레지스터 데이터 값입니다. 범위는 레지스터 유형에 따라 달라집니다. 일부 레지스터의 범위는 GetDeviceCaps를 사용하여 디바이스 caps에서 쿼리할 수 있습니다.
속성 | 형식 | 범위 | 버전 |
---|---|---|---|
C# | 상수 레지스터 | -1~+1 | 모든 버전 |
r# | 임시 레지스터 | - PixelShader1xMaxValue~+ PixelShader1xMaxValue | 모든 버전 |
t# | 텍스처 레지스터 | - MaxTextureRepeat~+ MaxTextureRepeat | 모든 버전 |
v# | 색상 레지스터 | 0~1 | 모든 버전 |
초기 픽셀 셰이더 하드웨어는 고정 소수점 번호를 사용하여 레지스터의 데이터를 나타냅니다. 이렇게 하면 숫자의 소수 부분에 대해 최대 약 8비트까지 전체 자릿수가 제한됩니다. 셰이더를 디자인할 때 이 점을 염두에 두세요.
픽셀 셰이더 버전 1_1~1_3의 경우, MaxTextureRepeat은 최소 1이어야 합니다. 1_4의 경우 MaxTextureRepeat은 8 이상이어야 합니다.
PixelShader1xMaxValue에 대한 자세한 내용은 D3DCAPS9를 참조하세요.
관련 항목