의미 체계

의미 체계는 매개 변수의 용도에 대 한 정보를 제공 하는 셰이더 입력 또는 출력에 연결 된 문자열입니다. 셰이더 단계 간에 전달 되는 모든 변수에는 의미 체계가 필요 합니다. 셰이더 변수에 의미 체계를 추가 하는 구문은 여기에 표시 됩니다 (변수 구문 (DIRECTX HLSL)).

일반적으로 파이프라인 단계 간에 전달 되는 데이터는 완전히 일반적 이며 시스템에서 고유 하 게 해석 되지 않습니다. 특별 한 의미가 없는 임의의 의미 체계가 허용 됩니다. 이러한 특수 한 의미 체계를 포함 하는 매개 변수 (Direct3D 10 이상)를 시스템 값 의미 체계라고 합니다.

Direct3D 9 및 Direct3D 10 이상에서 지원 되는 의미 체계

다음 종류의 의미 체계는 Direct3D 9 및 Direct3D 10 이상에서 지원 됩니다.

꼭 짓 점 셰이더 의미 체계

이러한 의미 체계는 꼭 짓 점 셰이더 매개 변수에 연결 된 경우 의미가 있습니다. 이러한 의미 체계는 Direct3D 9 및 Direct3D 10 이상에서 지원 됩니다.

입력 Description 형식
BINORMAL [ n] Binormal float4
BLENDINDICES [ n] Blend 인덱스 uint
BLENDWEIGHT [ n] 블렌드 가중치 float
색 [ n] 확산 및 반사 색 float4
일반 [ n] 법선 벡터 float4
위치 [ n] 개체 공간의 꼭 짓 점 위치입니다. float4
POSITIONT 변환 된 꼭 짓 점 위치입니다. float4
PSIZE [ n] 포인트 크기 float
탄젠트 [ n] 탄젠트 float4
TEXCOORD [ n] 질감 좌표 float4
출력 Description 형식
색 [ n] 확산 또는 반사 색 float4
안개 꼭 짓 점 안개 float
위치 [ n] 동일한 공간에 있는 꼭 짓 점의 위치입니다. (X, y, z)를 w로 나누면 화면 공간에서의 위치를 계산 합니다. 모든 꼭 짓 점 셰이더는이 의미 체계를 사용 하 여 매개 변수를 작성 해야 합니다. float4
PSIZE 포인트 크기 float
TESSFACTOR [ n] 공간 분할 비율 float

n 0과 지원 되는 리소스 수 사이의 선택적 정수입니다. 예: POSITION0, TEXCOORD1 등

픽셀 셰이더 의미 체계

이러한 의미 체계는 픽셀 셰이더 입력 매개 변수에 연결 된 경우 의미가 있습니다. 이러한 의미 체계는 Direct3D 9 및 Direct3D 10 이상에서 지원 됩니다.

입력 Description 형식
색 [n] 확산 또는 반사 색입니다. float4
TEXCOORD [n] 질감 좌표 float4
VFACE 백 연결 기본 형식을 나타내는 부동 소수점 스칼라입니다. 음수 값은 뒤로, 양수 값은 카메라를 향하도록 합니다.
[!Note]
이 의미 체계는 Direct3D 9 셰이더 모델 3.0에서 사용할 수 있습니다. Direct3D 10 이상에서는 대신 SV_IsFrontFace 를 사용 합니다.

float
VPOS 화면 공간의 픽셀 위치 (x, y)입니다. 이 의미 체계를 사용 하는 Direct3D 9 셰이더를 Direct3D 10 이상 셰이더에 변환 하려면 direct3d 9 VPOS 및 direct3d 10 SV_Position)를 참조 하세요. float2
출력 Description 형식
색 [n] 출력 색 float4
깊이 [n] 출력 깊이 float

n 0과 지원 되는 리소스 수 사이의 선택적 정수입니다. 예: PSIZE0, COLOR1 등

색 의미 체계는 셰이더 호환성 모드 에서만 유효 합니다. 즉, D3D10 셰이더를 사용 하 여 셰이더를 만든 경우 _ _ _ 이전 버전과의 호환성을 사용 _ 합니다.

의미 체계는 Direct3D 10 이상 에서만 지원 됩니다.

다음 종류의 의미 체계가 Direct3D 10에 대해 새로 도입 되었으며 Direct3D 9에서 사용할 수 없습니다.

System-Value 의미 체계

시스템 값 의미 체계는 Direct3D 10의 새로운 기능입니다. 모든 시스템 값 _ 은 sv 접두사로 시작 하 고, 일반적인 예로는 래스터 위치를 사용 하 여 래스터를 사용 _ 합니다. 시스템 값은 파이프라인의 다른 부분에서 유효 합니다. 예를 들어, SV 위치는 출력 뿐만 아니라 _ 꼭 짓 점 셰이더에 대 한 입력으로 지정할 수 있습니다. 픽셀 셰이더는 SV _ Depth 및 sv _ 대상 시스템-값 의미 체계를 사용 하는 매개 변수에만 쓸 수 있습니다.

다른 시스템 값 (SV _ VertexID, sv _ INSTANCEID, sv _ IsFrontFace)은 파이프라인에서 특정 값을 해석할 수 있는 첫 번째 활성 셰이더에만 입력할 수 있습니다. 그런 다음 셰이더 함수는 이후 단계에 값을 전달 해야 합니다.

SV _ PrimitiveID은 파이프라인에서 특정 값을 해석할 수 있는 첫 번째 활성 셰이더에 대 한 입력 으로만 사용 되는이 규칙에 대 한 예외입니다. 하드웨어는이를 사용 하 여 모든 단계를 사용 하는 것과 동일한 ID 값을 제공 합니다.

공간 분할 (tessellation)을 사용 하는 경우에는 선체-셰이더 단계와 도메인 셰이더 단계가 제공 됩니다. 지정 된 패치의 경우 동일한 PrimitiveID이 패치의 선체 호출 및 모든 공간 분할 도메인 셰이더 호출에 적용 됩니다. 동일한 PrimitiveID 다음 활성 스테이지로 전파 됩니다. 사용 하도록 설정 된 경우 기 하 도형-셰이더 단계 또는 픽셀 셰이더 단계.

기 하 도형 셰이더가 SV PrimitiveID를 입력 _ 하 고 호출 당 0 개 또는 하나 이상의 기본 형식을 출력할 수 있으므로 셰이더는 _ 후속 픽셀 셰이더가 sv PrimtiveID를 입력 하는 경우 각 출력 기본에 대해 고유한 SV PrimitiveID 값을 프로그래밍 해야 합니다 _ .

또 다른 예로, _ 꼭 짓 점이 여러 기본 형식의 멤버일 수 있으므로 SV PrimitiveID는 꼭 짓 점 셰이더 단계에서 해석할 수 없습니다.

이러한 의미 체계가 Direct3D 10에 추가 되었습니다. Direct3D 9에서는 사용할 수 없습니다.

래스터 라이저 단계에 대 한 시스템 값 의미 체계입니다.

System-Value 의미 체계 Description 형식
SV _ ClipDistance [ n] 거리 데이터를 클리핑 합니다. SV _ ClipDistance 값은 각각 평면에 대 한 float32 부호 있는 거리로 가정 됩니다. 기본 설정에서는 보간된 평면 거리가 >= 0 인 픽셀에 대 한 래스터화만 호출 합니다. 하나 이상의 꼭 짓 점 요소의 여러 구성 요소를 SV ClipDistance 선언 하 여 여러 클립 평면을 동시에 구현할 수 있습니다 _ . 결합 된 클립과 추려내 distance 값은 최대 # _ _ _ _ _ d3d # _ 클립 _ 또는 _ 추려내 _ distance _ 요소 _ 수 레지스터의 최대 d3d 클립 또는 추려내 distance count 구성 요소입니다. 값을 쓸 수 있지만 입력으로 사용 하지 않는 꼭 짓 점 셰이더를 제외 하 고, 모든 셰이더를 읽거나 쓸 수 있습니다.
Clipplanes 특성은 SV ClipDistance 처럼 작동 _ 하지만 모든 하드웨어 기능 수준 9 _ x 이상에서 작동 합니다. 자세한 내용은 기능 수준 9 하드웨어의 사용자 클립 평면을 참조 하세요.
float
SV _ CullDistance [ n] 추려내 거리 데이터입니다. 꼭 짓 점 요소의 구성 요소에이 레이블이 지정 된 경우 이러한 값은 각각 평면에 대 한 float32 부호 있는 거리로 가정 됩니다. 기본 형식에 있는 모든 꼭 짓 점의 평면 거리가 0 < 경우 기본 형식은 완전히 삭제 됩니다. 하나 이상의 꼭 짓 점 요소의 여러 구성 요소를 SV CullDistance로 선언 하 여 여러 추려내 평면을 동시에 사용할 수 있습니다 _ . 결합 된 클립과 추려내 distance 값은 최대 # _ _ _ _ _ d3d # _ 클립 _ 또는 _ 추려내 _ distance _ 요소 _ 수 레지스터의 최대 d3d 클립 또는 추려내 distance count 구성 요소입니다. 값을 쓸 수 있지만 입력으로 사용 하지 않는 꼭 짓 점 셰이더를 제외 하 고, 모든 셰이더를 읽거나 쓸 수 있습니다.
float
SV _ 적용 범위 픽셀 셰이더의 입력, 출력 또는 둘 다에 지정할 수 있는 마스크입니다.
픽셀 셰이더에 대 한 SV _ 적용 범위에서 출력은 ps _ 4 1 이상에서 지원 됩니다 _ .
픽셀 셰이더에 대 한 SV 검사의 경우 입력에는 _ ps _ 5 _ 0 이상이 필요 합니다.
uint
SV _ 깊이 깊이 버퍼 데이터입니다. 픽셀 셰이더로 작성할 수 있습니다. float
SV _ DepthGreaterEqual 픽셀 셰이더에서 는 래스터라이저에 의해 결정된 값보다 크거나 같은 경우 출력 깊이를 허용합니다. 초기 Z를 사용하지 않도록 설정하지 않고 깊이를 조정할 수 있습니다. float
SV _ DepthLessEqual 픽셀 셰이더에서 는 래스터라이저에 의해 결정된 값보다 적거나 같은 경우 출력 깊이를 허용합니다. 초기 Z를 사용하지 않도록 설정하지 않고 깊이를 조정할 수 있습니다. float
SV _ DispatchThreadID 디스패치 호출 내에서 그룹의 차원별로 전역 스레드 오프셋을 정의합니다. 컴퓨팅 셰이더에 대한 입력으로 사용할 수 있습니다. (읽기 전용) uint3
SV _ DomainLocation 평가 중인 현재 도메인 지점의 을(를) 기준으로 위치를 정의합니다. 도메인 셰이더에 대한 입력으로 사용할 수 있습니다. (읽기 전용) float2 | 3
SV _ GroupID 디스패치 호출의 차원별로 디스패치 호출 내에서 그룹 오프셋을 정의합니다. 컴퓨팅 셰이더에 대한 입력으로 사용할 수 있습니다. (읽기 전용) uint3
SV _ GroupIndex 지정된 그룹 내의 지정된 스레드에 대해 평면화 인덱스 를 제공합니다. 컴퓨팅 셰이더에 대한 입력으로 사용할 수 있습니다. (읽기 전용) uint
SV _ GroupThreadID 그룹 내의 스레드 오프셋을 그룹의 차원별로 정의합니다. 컴퓨팅 셰이더에 대한 입력으로 사용할 수 있습니다. (읽기 전용) uint3
SV _ GSInstanceID 기하 도형 셰이더의 인스턴스를 정의합니다. 기하 도형 셰이더에 대한 입력으로 사용할 수 있습니다. 동일한 기하 도형 기본형에서 최대 32회까지 기하 도형 셰이더를 호출할 수 있기 때문에 인스턴스가 필요합니다. uint
SV _ InnerCoverage 과소 평가된 중요 래스터화 정보(즉, 픽셀이 완전히 덮어지는지 여부)를 나타냅니다. 픽셀 셰이더에서 읽거나 쓸 수 있습니다.
SV _ InsideTessFactor 패치 표면 내의 간격을 정의합니다. 쓰기를 위해 셔들 셰이더에서 사용할 수 있으며 읽기 위해 도메인 셰이더에서 사용할 수 있습니다. float | float [ 2]
SV _ InstanceID 런타임에서 자동으로 생성된 인스턴스별 식별자입니다(System-Generated 값 사용(Direct3D 10) 참조). 모든 셰이더에서 사용할 수 있습니다.
SV _ IsFrontFace 삼각형이 전면에 있는지 여부를 지정합니다. 선과 점의 경우 IsFrontFace의 값은 true입니다. 단색 모드에서 삼각형을 래스터화하는 것과 동일한 방식으로 IsFrontFace를 설정하는 삼각형(와이어프레임 모드)에서 그린 선은 예외입니다. 기하 도형 셰이더에서 에 쓰고 픽셀 셰이더에서 읽을 수 있습니다. bool
SV _ OutputControlPointID 차원 셰이더의 주 진입점을 호출하여 작동 중인 제어점 ID의 인덱스를 정의합니다. 셔들 셰이더에서만 읽을 수 있습니다. uint
SV _ 위치 _셰이더에 대한 입력을 위해 SV 위치가 선언되면 두 가지 보간 모드인 linearNoPerspective 또는 linearNoPerspectiveCentroid 중 하나를 지정할 수 있습니다. 여기서 후자는 다중샘플 앤티 앨리어싱 시 중심이 맞춰진 xyzw 값을 제공합니다. 셰이더에서 사용되는 경우 SV _ 위치는 픽셀 위치를 설명합니다. 모든 셰이더에서 0.5 오프셋이 있는 픽셀 중심을 얻는 데 사용할 수 있습니다. float4
SV _ PrimitiveID 런타임에서 자동으로 생성되는 기본별 식별자입니다(System-Generated 값 사용(Direct3D 10) 참조). 기하 도형 또는 픽셀 셰이더에 기록할 수 있으며 geometry, pixel, hull 또는 도메인 셰이더에서 읽을 수 있습니다. uint
SV _ RenderTargetArrayIndex 렌더링 대상 배열 인덱스입니다. 기하 도형 셰이더 출력에 적용되며, 픽셀 셰이더에서 기본형을 그릴 렌더링 대상 배열 조각을 나타냅니다. SV _ RenderTargetArrayIndex는 렌더링 대상이 배열 리소스인 경우에만 유효합니다. 이 의미 체계는 기본형에만 적용됩니다. 기본형에 꼭짓점이 두 개 이상 있으면 선행 꼭짓점의 값이 사용됩니다. 이 값은 읽기/쓰기 목적으로 사용되는 깊이/스텐실 뷰의 배열 조각도 나타냅니다.
기하 도형 셰이더에서 작성하고 픽셀 셰이더에서 읽을 수 있습니다.
D3D11_FEATURE_DATA_D3D11_OPTIONS3::VPAndRTArrayIndexFromAnyShaderFeedingRasterizer가 true 이면 _ SV RenderTargetArrayIndex가 래스터라이저를 공급한 모든 셰이더에 적용됩니다.
uint
SV _ SampleIndex 샘플 빈도 인덱스 데이터입니다. 픽셀 셰이더에서만 읽거나 쓸 수 있습니다. uint
SV _ 스텐실Ref 현재 픽셀 셰이더 스텐실 참조 값을 나타냅니다. 픽셀 셰이더에서만 쓸 수 있습니다. uint
SV _ 대상 n , 여기서 [ ] 0 <= n <= 7 렌더링 대상에 저장될 출력 값입니다. 인덱스는 8개의 바인딩된 렌더링 대상 중 쓸 대상을 나타냅니다. 이 값은 모든 셰이더에서 사용할 수 있습니다. float [ 2 | 3 | 4]
SV _ TessFactor 패치의 각 가장자리에서 조각화 양을 정의합니다. 외면 셰이더에서 작성하고 도메인 셰이더에서 읽기에 사용할 수 있습니다. float [ 2 | 3 | 4]
SV _ VertexID 런타임에서 자동으로 생성된 꼭짓점별 식별자입니다(System-Generated 값 사용(Direct3D 10) 참조). 꼭짓점 셰이더에 대한 입력으로만 사용할 수 있습니다. uint
SV _ ViewportArrayIndex 뷰포트 배열 인덱스입니다. 기 하 도형 셰이더 출력에 적용 되며 현재 작성 중인 기본 형식에 사용할 뷰포트를 나타냅니다. 픽셀 셰이더에 서 읽을 수 있습니다. 기본 형식은 래스터 라이저로 전달 되기 전에 인덱스에서 지정한 뷰포트에 대해 변환 되 고 잘립니다. 이 의미 체계는 기본 형식에만 적용 됩니다. 기본에 두 개 이상의 꼭지점이 있는 경우 선행 꼭 짓 점의 값이 사용 됩니다.
D3D11_FEATURE_DATA_D3D11_OPTIONS3:: VPAndRTArrayIndexFromAnyShaderFeedingRasterizer 이 인 경우에는 true SV _ ViewportArrayIndex가 래스터를 공급 하는 모든 셰이더에 적용 됩니다.
uint
SV _ ShadingRate 1 픽셀 셰이더 호출에서 가변 음영 처리 시간 계층 2 이상 장치에 대해 쓴 픽셀 수를 음영이 있는 을 통해 정의 합니다. 픽셀 셰이더에서 읽을 수 있습니다. 꼭 짓 점 또는 기 하 도형 셰이더에서 쓸 수 있습니다. uint

SV 깊이를 쓸 때의 제한 사항 _ :

  • 다중 샘플링 (MultisampleEnable가 D3D10 _ 래스터 _ DESC에서 TRUE 인 경우) 및 깊이 값 (픽셀 셰이더 사용)을 작성 하는 경우에는 작성 된 단일 값이 깊이 테스트에도 사용 되므로 다중 샘플링 시 고해상도에서 기본 가장자리를 렌더링 하는 기능이 손실 됩니다.
  • 동적 흐름 제어를 사용 하는 경우 일부 경로에서 SV 깊이를 기록 하는 셰이더가 _ 모든 실행에서 sv 깊이를 쓰도록 보장 되는지 여부를 컴파일 시간에 결정할 수는 없습니다 _ . _선언 될 때 SV 깊이를 쓰지 못하면 정의 되지 않은 동작이 발생 합니다 (픽셀의 삭제를 포함 하거나 포함 하지 않을 수 있음).
  • +/-INF 및 NaN을 포함 하는 float32 값은 SV 깊이에 쓸 수 있습니다 _ .
  • _이중 소스 색 혼합을 수행할 때에도 SV 깊이 쓰기가 유효 합니다.

Direct3D 9에서 Direct3D 10 이상으로 마이그레이션

Direct3D 9에서 Direct3D 10 이상으로 코드를 마이그레이션할 때는 다음 문제를 고려해 야 합니다.

Direct3D 9 의미 체계에 매핑

Direct3D 10 이상 의미 체계가 Direct3D 9 의미 체계에 직접 매핑됩니다.

Direct3D 10 의미 체계 Direct3D 9 동급 의미 체계
SV _ 깊이 DEPTH
SV _ 위치 POSITION
SV _ 대상 COLOR

[!] Direct3D 9 개발자를 위한 참고 사항: Direct3D 9 대상의 경우 셰이더 의미 체계가 유효한 Direct3D 9 의미 체계에 매핑되어야 합니다. 이전 버전과의 호환성 POSITION0 (및 해당 변형 이름)이 SV 위치로 처리 되는 경우 _ 색은 sv 대상으로 처리 됩니다 _ .

Direct3D 9 VPOS 및 Direct3D 10 SV _ 위치

D3D10 의미 체계 SV _ 위치는 Direct3D 9 셰이더 모델 3 VPOS 의미 체계와 유사한 기능을 제공 합니다. 예를 들어 Direct3D 9에서 다음 구문은 화면 공간 좌표를 사용 하는 픽셀 셰이더에 사용 됩니다.

float4 psMainD3D9( float4 screenSpace : VPOS ) : COLOR
{
    // code here 
}

위치 의미 체계가 개체 공간 좌표에 사용 되기 때문에, 화면 공간 좌표를 지정 하기 위해는 셰이더 모델 3 지원에 대해 VPOS가 추가 되었습니다.

Direct3D 10 이상에서 SV _ 위치 의미 체계 (픽셀 셰이더의 컨텍스트에서 사용 되는 경우)는 화면 공간 좌표 (0.5에 따라 오프셋)를 지정 합니다. 따라서 Direct3D 9 셰이더는 대략 동일 하며 (0.5 오프셋을 고려 하지 않음) 다음에 해당 합니다.

float4 psMainD3D10( float4 screenSpace : SV_Position ) : COLOR
{
    // code here
}

Direct3D 9에서 Direct3D 10 이상으로 마이그레이션하는 경우 셰이더를 변환할 때이에 대해 알고 있어야 합니다.

HLSL의 사용자 클립 평면

Windows 8부터 SV ClipDistance이 아닌 HLSL 함수 선언clipplanes function 특성을 사용 하 여 셰이더가 기능 _ 수준 9 _ x 및 기능 수준 10 이상에서 작동 하도록 할 수 있습니다. 자세한 내용은 기능 수준 9 하드웨어의 사용자 클립 평면을 참조 하세요.