DirectX Graphics 레퍼런스 셰이더 레퍼런스 픽셀 셰이더 1_X 레지스터 - ps_1_X [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
픽셀 셰이더는, 정점 데이터를 취득해, 픽셀 데이터를 래스터라이저에 출력해, 계산중에 일시적인 결과를 저장 해, 텍스처 샘플링 스테이지를 식별하기 위해서, 레지스터를 사용한다. 레지스터에는 몇개의 종류가 있어, 종류 마다 고유의 기능이 있다. 여기에서는, 픽셀 셰이더 버전 1_X 가 처리 하는 입력 레지스터와 출력 레지스터에 대한 레퍼런스 정보를 기술한다.
레지스터는, 픽셀 셰이더가 사용하는 데이터를 보관 유지한다. 이러한 페이지에 대해서는, 이하로 설명한다.
버전 | |||||
---|---|---|---|---|---|
이름 | 타입 | 1_1 | 1_2 | 1_3 | 1_4 |
cn | 정수 레지스터 | 8 | 8 | 8 | 8 |
rn | 임시 레지스터 | 2 | 2 | 2 | 6 |
tn | 텍스처 레지스터 | 4 | 4 | 4 | 6 |
vn | 컬러 레지스터 | 2 | 2 | 2 | 국면 2 에서는 2 |
픽셀 셰이더의 버전 | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_sw | 2_x | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
정수 레지스터 | x | x | x | x | x | x | x | x | x |
전의 명령으로 기입해지지 않은 임시 레지스터로부터 읽기를 실시하려고 하면, 셰이더의 사전 처리는 CreatePixelShader 를 실패시킨다. 평가가 유효하면 (D3DXASM_SKIPVALIDATION 를 사용하지 않으면), D3DXAssembleShader 도 이와 같이 실패시킨다 (D3DXASM_SKIPVALIDATION 는 사용하지 않는 것).
픽셀 셰이더의 버전 | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_sw | 2_x | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
임시 레지스터 | x | x | x | x | x | x | x | x | x |
픽셀 셰이더 버전 1_1 ~ 1_3 의 경우, 텍스처 레지스터에는, 4 개의 고정 소수점값으로 해 정리된 텍스처 데이터가 저장 된다. 텍스처의 샘플링시에, 텍스처 데이터는 텍스처 레지스터에 로드 된다. 텍스처 샘플링에서는, 지정된 (u, v, w, q) 좌표에 있어서의 색값을, 텍스처 스테이지 스테이트 속성을 고려하면서, 텍스처 좌표를 사용해 참조 (또는 샘플링)한다. 텍스처 좌표 데이터는, 정점의 텍스처 좌표 데이터로부터 보간 되어 특정의 텍스처 스테이지와 관련지을 수 있다. 텍스처 스테이지 번호와 텍스처 좌표 선언 순서와의 사이에는, 디폴트의 일대일대가 관련짓고가 있다. 정점 포맷으로 정의한 최초의 텍스처 좌표 세트가, 디폴트로 텍스처 스테이지 0 으로 관련지을 수 있다.
이러한 픽셀 셰이더 버전에서는, 텍스처 레지스터를 산술 명령으로 사용할 때는, 임시 레지스터와 같이 동작한다.
픽셀 셰이더 버전 1_4 의 경우, 텍스처 레지스터 (t#)에는, 읽기 전용의 텍스처 좌표 데이터가 저장 된다. 즉, 텍스처 좌표 세트와 텍스처 스테이지 번호는 서로 관계없다. 텍스처 스테이지 번호 (텍스처를 샘플링 하는 바탕으로 되는 것)는, 출력 레지스터 번호 (r0 ~ r5)에 의해 정해진다. texld 명령의 경우, 텍스처 좌표 세트는, 입력 레지스터 (t0 ~ t5)에 의해 정해지므로, 텍스처 좌표 세트는, 임의의 텍스처 스테이지에 맵핑 할 수 있다. 또, texld 의 입력 레지스터 (텍스처 좌표를 지정한다)도 임시 레지스터 (r#)가 될 수가 있다. 이 경우, 임시 레지스터의 내용은 텍스처 좌표로서 사용된다.
이 픽셀 셰이더 버전에서는, 텍스처 레지스터에는 텍스처 좌표 데이터가 저장 되어 텍스처어드레싱 명령에서도 입력 인수로서 사용할 수 있다.
픽셀 셰이더의 버전 | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_sw | 2_x | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
텍스처 레지스터 | x | x | x | x | x | x | x | x | x |
쉐이딩 모드에 D3DSHADE_FLAT 를 설정 하면, 애플리케이션에 의한 양쪽 모두의 정점색 (디퓨즈와 스펙큐러)의 보간은 무효이다. 셰이더 모드 에 관계없이, 픽셀 포그(안개:fog)가 유효한 경우, 포그(안개:fog)는 파이프라인에 의해 보간 된다. 포그(안개:fog)는, 파이프라인내에서는 픽셀 셰이더보다 다음에 적용되므로 주의 해야 한다.
보통은, v0 레지스터로부터 정점 디퓨즈색데이터를 로드한다. 또, v1 레지스터로부터 정점 스펙큐러색데이터를 로드하는 일도 일반적이다.
입력색데이터값은, 0 ~ 1 의 범위에 제한 (포화)된다. 왜냐하면, 이것이 픽셀 셰이더의 컬러 레지스터에 있어 유효한 입력 범위이니까이다.
픽셀 셰이더는, 컬러 레지스터에는 읽기 전용 액세스를 가지고 있다. 이러한 레지스터의 내용은 보간 된 값이지만, 보간은 텍스처 좌표보다 꽤 낮은 정밀도로 실행된다.
픽셀 셰이더의 버전 | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_sw | 2_x | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
컬러 레지스터 | x | x | x | x | x | x | x | x | x |
읽기 포트의 제한에서는, 1 명령의 입력 레지스터로서 사용할 수 있는 레지스터 타입마다 레지스터의 수를 지정한다.
버전 | |||||
---|---|---|---|---|---|
이름 | 타입 | 1_1 | 1_2 | 1_3 | 1_4 |
cn | 정수 레지스터 | 2 | 2 | 2 | 2 |
rn | 임시 레지스터 | 2 | 2 | 2 | 3 |
tn | 텍스처 레지스터 | 2 | 3 | 3 | 1 |
vn | 컬러 레지스터 | 2 | 2 | 2 | 국면 2 에서는 2 |
예를 들어, 거의 모든 버전의 컬러 레지스터에는, 읽기 포트는 2 개라고 하는 제한이 있다. 즉, 1 개의 명령으로 최대 2 개까지가 다른 컬러 레지스터 (v0 및 v1 등)를 입력 레지스터로서 사용할 수 있는 것이다. 이 예에서는, 동일한 명령으로 2 개의 컬러 레지스터가 사용되고 있다.
레지스터 타입은, 다음 표의 읽기 전용 (RO) 능력 또는 읽고 쓰기 (RW) 능력에 따라 식별된다. 읽기 전용 레지스터는, 명령의 입력 레지스터로서의 보고 사용할 수 있다. 출력 레지스터로서는 사용할 수 없다.
버전 | |||||
---|---|---|---|---|---|
이름 | 타입 | 1_1 | 1_2 | 1_3 | 1_4 |
cn | 정수 레지스터 | RO | RO | RO | RO |
rn | 임시 레지스터 | RW | RW | RW | RW |
tn | 텍스처 레지스터 | 이하의 「주」참조 | RW | RW | RW |
vn | 컬러 레지스터 | RO | RO | RO | RO |
읽고 쓰기 가능한 레지스터는, 중간 결과의 저장에 사용할 수 있다. 이 레지스터에는, 몇개의 셰이더 버전의 임시 레지스터와 텍스처 레지스터가 포함된다.
범위란, 레지스터 데이터의 최대치로 최소 값이다. 범위는, 레지스터의 타입에 따라서 다르다. 몇개의 레지스터의 범위는,GetDeviceCaps 를 사용해 장치의 능력으로부터 참조할 수 있다.
이름 | 타입 | 범위 | 버전 |
---|---|---|---|
cn | 정수 레지스터 | -1 ~ +1 | 모든 버전 |
rn | 임시 레지스터 | - MaxPixelShaderValue ~ + MaxPixelShaderValue | 모든 버전 |
tn | 텍스처 레지스터 | - MaxPixelShaderValue ~ + MaxPixelShaderValue | 1_1 ~ 1_3 |
tn | 텍스처 레지스터 | - MaxTextureRepeat ~ + MaxTextureRepeat | 1_4 |
vn | 컬러 레지스터 | 1_4 |
초기의 픽셀 셰이더 하드웨어는, 레지스터내의 데이터를 고정 소수점수를 사용해 나타내고 있다. 이 때문에, 정밀도가 최대로 숫자의 소수부에 대응하는 약 8 비트에 제한되고 있다. 셰이더를 설계하는 경우는, 이 점에 주의 해야 한다.
픽셀 셰이더 버전 1_1 ~ 1_3 에서는, MaxTextureRepeat 는 1 이상이 아니면 안된다. 1_4 의 경우, MaxTextureRepeat 는 8 이상이 아니면 안된다.