texldl (정점 셰이더)
특정의 샘플러로 텍스처를 샘플링 한다. 샘플링 되는 특정의 밉맵 레벨 (LOD)을, 텍스처 좌표의 4 번째의 성분으로서 지정할 필요가 있다.
구문
여기서
- dst 는 출력 레지스터를 나타낸다.
- src0 는, 텍스처 샘플의 텍스처 좌표를 지정하는 입력 레지스터를 나타낸다.
- src1 는 입력 샘플러 레지스터 (s#)를 나타낸다. 여기서,# 는 샘플링 하는 텍스처 샘플러의 번호를 나타낸다. 샘플러에는,D3DSAMPLERSTATETYPE 열거에 의해 정의되는 텍스처와 제어 스테이트를 관련지을 수 있다 (예를 들어, D3DSAMP_MINFILTER).
주의
정점 셰이더의 버전 | 1_1 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|
texldl | | | | | x | x |
---|
texldl 는,src1 가 참조하는 샘플러 스테이지로 설정된 텍스처를 참조한다. 상세 레벨 (LOD)은 src0.w 로부터 선택된다. 이 값은 부로 할 수 있어 그 경우에 선택되는 LOD 는, MAGFILTER 에 의한 "0 번째" (최대의 맵)의 것이 된다. src0.w 는 부동 소수점값이므로, 소수의 값을 사용해 (MIPFILTER 가 LINEAR 의 경우) 2 개의 밉맵 레벨간을 보간 한다. 샘플러 스테이트 MIPMAPLODBIAS 및 MAXMIPLEVEL 가 받아들여진다. 샘플러 스테이트의 더 자세한 정보는, 「D3DSAMPLERSTATETYPE 」를 참조할것.
셰이더 프로그램이 텍스처 세트가 없는 샘플러로부터 샘플링을 실시하면, 출력 레지스터에 0001 이 취득된다.
참고를 위해, 대범한 알고리즘을 나타낸다. 다음에, 레퍼런스 래스터라이저가 계속된다.
LOD = src0.w + LODBIAS;
if (LOD <= 0 )
{
LOD = 0;
Filter = MagFilter;
tex = Lookup( MAX(MAXMIPLEVEL, LOD), Filter );
}
else
{
Filter = MinFilter;
LOD = MAX( MAXMIPLEVEL, LOD);
tex = Lookup( Floor(LOD), Filter );
if( MipFilter == LINEAR )
{
tex1 = Lookup( Ceil(LOD), Filter );
tex = (1 - frac(src0.w)) *tex + frac(src0.w) *tex1;
}
}
제한
- 텍스처 좌표는 텍스처 사이즈에 맞추어 스케일링 해서는 안 된다.
- dst 는 r# 가 아니면 안된다.
- dst 에는 쓰기 마스크를 사용할 수 있다.
- 빠져 있는 성분에 대한 디폴트값은 0 또는 1 이며, 텍스처 포맷에 따라서 다르다.
- src1 는 s# 가 아니면 안되어, 정부 반전은 지정할 수 없지만, 교체는 지정할 수 있다. s# 는 셰이더의 선두에서 dcl 를 사용해 선언하고 있을 필요가 있다.
- 텍스처 샘플링의 실행에 필요한 좌표의 수는, s# 의 선언에 따라서 다르다. s# 를 큐브로서 선언했을 경우는, 3 성분의 텍스처 좌표 (. rgb)가 필요하다. texld 에게 건네진 좌표가, 샘플러에 대해서 선언된 텍스처의 넓이를 채우고 있는지를 평가한다. 다만, 샘플러에 대해서 선언한 것과 동일한 넓이의 텍스처를, 애플리케이션이 애플리케이션 프로그래밍 인터페이스 (API)를 사용해 실제로 설정 하면 한정되지 않는다. 그러한 경우, 런타임은 불일치를 검출하려고 한다 (경우에 따라서는 디버그시만). 텍스처 좌표내에 있는 것 보다 낮은 넓이로 텍스처를 샘플링 하는 것은 가능하고, 그 때, 불필요한 텍스처 좌표 성분은 무시된다. 반대로, 텍스처 좌표내에 있는 것 보다 높은 넓이로 텍스처를 샘플링 할 수 없다.
- src0 (텍스처 좌표)가 r# 의 경우는, 위에서 설명한 참조에 필요한 성분이 이미 기입해지지 않으면 안 된다.
- 부호 없음 RGB 텍스처의 샘플링 결과는, 0.0 ~ 1.0 의 부동 소수점수(실수)값이다.
- 부호 첨부 텍스처의 샘플링 결과는,-1. 0 ~ 1.0 의 부동 소수점수(실수)값이다.
- 부동 소수점 텍스처를 샘플링 하는 경우, Float16 는, 데이터는 MAX_FLOAT16 내의 범위인 것을 의미한다. Float32 는, 파이프라인의 최대 범위가 사용되는 것을 의미한다. 범위외에서의 샘플링은 미정도리이다.
- 종속 read에 제한은 없다.