sample(sm4 - asm)

지정된 주소와 지정된 샘플러로 식별된 필터링 모드를 사용하여 지정된 요소/텍스처에서 데이터를 샘플링합니다.

sample[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler
항목 설명
dest
[in] 연산 결과의 주소입니다.
srcAddress
[in] 텍스처 좌표 집합입니다. 자세한 내용은 설명 섹션을 참조하세요.
srcResource
[in] 텍스처 레지스터입니다. 자세한 내용은 설명 섹션을 참조하세요.
srcSampler
[in] 샘플러 레지스터입니다. 자세한 내용은 설명 섹션을 참조하세요.

설명

원본 데이터는 버퍼가 아닌 모든 리소스 종류에서 가져올 수 있습니다.

srcAddress는 텍스처의 정규화된 공간을 참조하는 부동 소수점 값으로 샘플을 수행하는 데 필요한 텍스처 좌표 집합을 제공합니다. 주소 래핑 모드(wrap/mirror/clamp/border 등)는 샘플러 상태(s#)에서 가져온 [0...1] 범위 밖의 텍스처 좌표에 적용되며 주소 오프셋이 텍스처 좌표에 적용된 후에 적용됩니다.

srcResource는 텍스처 레지스터(t#)입니다. 이는 샘플링되는 리소스의 반환 데이터 형식을 포함하는 텍스처의 자리 표시자일 뿐입니다. 이 모든 정보는 셰이더 서문에 선언되어 있습니다. 샘플링할 실제 리소스는 외부적으로 슬롯 #(t#의 경우)에서 셰이더에 바인딩됩니다.

srcSampler는 샘플러 레지스터입니다. 이는 포인트 및 선형, 밉매핑 및 주소 래핑 컨트롤과 같은 필터링 컨트롤 컬렉션을 위한 자리 표시자일 뿐입니다.

하드웨어가 샘플링을 수행하는 데 필요한 정보 집합은 두 개의 직교 조각으로 나뉩니다. 첫째, 텍스처 레지스터는 예를 들어, 텍스처에 SRGB 데이터가 포함되어 있는지 여부에 대한 정보를 포함하여 원본 데이터 형식 정보를 제공합니다. 또한 샘플링 중인 실제 메모리를 참조하세요. 둘째, 샘플러 레지스터는 적용할 필터링 모드를 정의합니다.

배열 리소스

Texture1D 배열의 경우 srcAddress g 성분(POS-swizzle)은 가져올 배열 슬라이스를 선택합니다. 이는 표준 텍스처 좌표에 대한 정규화된 공간이 아니라 항상 스케일링된 부동 소수점 값으로 처리되며 값에 가장 가까운 짝수로 반올림이 적용된 다음 사용 가능한 BufferArray 범위로 클램프됩니다.

Texture2D 배열의 경우 srcAddress b 성분(POS-swizzle)은 가져올 배열 슬라이스를 선택합니다. 그렇지 않으면 Texture1D 배열에 대해 설명한 것과 동일한 의미 체계를 사용합니다.

주소 오프셋

선택적 [_aoffimmi(u,v,w)] 접미사(즉치 정수로 오프셋된 주소)는 샘플의 텍스처 좌표가 제공된 즉치 텍셀 공간 정수 상수 값 집합으로 오프셋됨을 나타냅니다. 리터럴 값은 정수 범위가 [-8,7]인 4비트 2의 보수 집합입니다. 이 한정자는 Texture1D/2D 배열 및 Texture3D를 포함한 모든 리소스에 대해 정의되지만 TextureCube에 대해서는 정의되지 않습니다.

하드웨어는 공통 위치에 대한 텍셀의 일부 풋프린트에 대한 트래버스가 일련의 샘플 명령에 의해 수행되고 있다는 즉각적인 지식을 활용할 수 있습니다. 이는 _aoffimmi(u,v,w)를 사용하여 전달할 수 있습니다.

오프셋은 액세스되는 각 밉수준에 상대적인 텍셀 공간의 텍스처 좌표에 추가됩니다. 따라서 텍스처 좌표가 정규화된 부동 소수점 값으로 제공되더라도 오프셋은 텍셀 공간 정수 오프셋을 적용합니다.

주소 오프셋은 Texture1D/2D 배열의 배열 축을 따라 적용되지 않습니다.

_aoffimmi v,w 성분은 Texture1D에 대해 무시됩니다.

_aoffimmi w 성분은 Texture2D에 대해 무시됩니다.

샘플러 상태(s#)의 주소 래핑 모드(wrap/mirror/clamp/border 등)는 주소 오프셋이 텍스처 좌표에 적용된 후에 적용됩니다.

반환 형식 제어

샘플이 대상 레지스터로 반환하는 데이터 서식은 srcResource 매개 변수(t#)에 바인딩된 리소스 형식(DXGI_FORMAT*)에 의해 결정됩니다. 예를 들어, 지정된 t#가 DXGI_FORMAT_A8B8G8R8_UNORM_SRGB 형식의 리소스와 바인딩된 경우 샘플링 작업은 샘플링된 텍셀을 감마 2.0에서 1.0으로 변환하고 필터링을 적용하며 결과는 대상 레지스터에 [0..1] 범위의 부동 소수점 값으로 기록됩니다.

반환된 값은 4-벡터입니다(형식에 없는 성분에 대한 형식별 기본값 포함). srcResource의 swizzle은 텍스처 샘플/필터에서 반환되는 4-성분 결과를 swizzle하는 방법을 결정한 후 dest의 .mask가 dest의 어떤 성분이 업데이트되는지 결정합니다.

sample이 포인트 샘플링(필터링 없음)을 사용하여 32비트 레지스터로 32비트 부동 소수점 값을 읽을 때 비정상적인 값을 플러시하거나 플러시하지 않을 수 있지만 그렇지 않은 경우 숫자는 수정되지 않습니다. 점 샘플링 비정규 값의 불확실성이 애플리케이션의 문제인 경우 32비트 부동 소수점 값이 수정되지 않은 상태로 읽히도록 보장하는 ld 명령을 사용합니다.

LOD 계산

필터링을 위한 LOD를 결정하는 과정에서 도함수를 계산하는 방법에 대한 자세한 내용은 deriv_rtxderiv_rty를 참조하세요. sample 명령은 deriv 셰이더 명령에서 사용하는 것과 동일한 정의를 사용하여 텍스처 좌표의 도함수를 암시적으로 계산합니다. sample_l 또는 sample_d 명령에는 적용되지 않습니다. 이러한 명령의 경우 LOD 또는 도함수가 애플리케이션에서 직접 제공됩니다.

샘플 명령의 경우 구현 시 2x2 스탬프의 모든 4픽셀에서 동일한 LOD 계산을 공유하거나(더 큰 영역은 아님) 픽셀당 LOD 계산을 수행하도록 선택할 수 있습니다.

기타 세부 정보

Buffer & Texture1D 의 경우 srcAddress .gba 구성 요소(POS-swizzle)는 무시됩니다. Texture1D 배열의 경우 srcAddress .ba 성분(POS-swizzle)이 무시됩니다. Texture2D의 경우 srcAddress .a 성분(POS-swizzle)이 무시됩니다.

바인딩된 것이 없는 입력 슬롯에서 가져오면 모든 성분에 대해 0을 반환합니다.

제한

  • srcResource는 t# 레지스터여야 합니다. srcResource는 t# 레지스터에 바인딩할 수 없는 ConstantBuffer일 수 없습니다.
  • srcSampler는 s# 레지스터여야 합니다.
  • srcResource 또는 srcSampler에 대한 상대 주소 지정은 허용되지 않습니다.
  • srcAddress는 임시(r#/x#), constantBuffer(cb#), 입력(v#) 레지스터 또는 즉치 값이어야 합니다.
  • dest는 임시(r#/x#) 또는 출력(o*#) 레지스터여야 합니다.
  • _aoffimmi(u,v,w)는 TextureCube에 허용되지 않습니다.

이 명령은 다음 셰이더 단계에 적용됩니다.

꼭짓점 셰이더 기하 도형 셰이더 픽셀 셰이더
x

최소 셰이더 모델

이 함수는 다음 셰이더 모델에서 지원됩니다.

셰이더 모델 지원됨
셰이더 모델 5
셰이더 모델 4.1
셰이더 모델 4
셰이더 모델 3(DirectX HLSL) 아니요
셰이더 모델 2(DirectX HLSL) 아니요
셰이더 모델 1(DirectX HLSL) 아니요

셰이더 모델 4 어셈블리(DirectX HLSL)