의미 체계

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

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

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

Direct3D 9 및 Direct3D 10 이상에서 지원되는 의미 체계 유형은 다음과 같습니다.

꼭짓점 셰이더 의미 체계

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

입력 Description Type
BINORMAL[n] 이항(Binormal) float4
BLENDINDICES[n] Blend 인덱스 uint
BLENDWEIGHT[n] 혼합 가중치 float
COLOR[n] 확산 및 반사 색 float4
NORMAL[n] 일반 벡터 float4
POSITION[n] 개체 공간의 꼭짓점 위치입니다. float4
POSITIONT 변환된 꼭짓점 위치입니다. float4
PSIZE[n] 포인트 크기 float
TANGENT[n] 탄젠트 float4
TEXCOORD[n] 질감 좌표 float4
출력 Description Type
COLOR[n] 확산 또는 반사 색 float4
안개 꼭짓점 안개 float
POSITION[n] 동종 공간에서 꼭짓점의 위치입니다. (x,y,z)를 w로 나누어 화면 공간의 위치를 계산합니다. 모든 꼭짓점 셰이더는 이 의미 체계를 사용하여 매개 변수를 작성해야 합니다. float4
PSIZE 포인트 크기 float
TESSFACTOR[n] 테셀레이션 계수 float

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

픽셀 셰이더 의미 체계

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

입력 Description Type
COLOR[n] 확산 또는 반사 색입니다. float4
TEXCOORD[n] 질감 좌표 float4
VFACE 후면 기본 형식을 나타내는 부동 소수점 스칼라입니다. 음수 값은 뒤로, 양수 값은 카메라를 향합니다.
[! 참고]
이 의미 체계는 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 Type
COLOR[n] 출력 색 float4
DEPTH[n] 출력 깊이 float

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

COLOR 의미 체계는 셰이더 호환 모드(즉, D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY 사용하여 셰이더를 만들 때)에서만 유효합니다.

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

Direct3D 10에 대해 다음과 같은 유형의 의미 체계가 새로 도입되었으며 Direct3D 9에서는 사용할 수 없습니다.

System-Value 의미 체계

시스템 값 의미 체계는 Direct3D 10의 새로운 기능입니다. 모든 시스템 값은 SV_ 접두사로 시작하며, 일반적인 예는 래스터라이저 단계에서 해석되는 SV_POSITION. 시스템 값은 파이프라인의 다른 부분에서 유효합니다. 예를 들어 SV_Position 꼭짓점 셰이더 및 출력에 대한 입력으로 지정할 수 있습니다. 픽셀 셰이더는 SV_Depth SV_Target 시스템 값 의미 체계를 사용하여 매개 변수에만 쓸 수 있습니다.

다른 시스템 값(SV_VertexID, SV_InstanceID, SV_IsFrontFace)은 특정 값을 해석할 수 있는 파이프라인의 첫 번째 활성 셰이더에만 입력할 수 있습니다. 그 후 셰이더 함수는 값을 후속 단계로 전달해야 합니다.

SV_PrimitiveID 특정 값을 해석할 수 있는 파이프라인의 첫 번째 활성 셰이더에만 입력되는 이 규칙의 예외입니다. 하드웨어는 헐 셰이더 단계, 도메인 셰이더 스테이지에 대한 입력과 동일한 ID 값을 제공할 수 있으며, 그 이후에는 기하 도형 셰이더 단계 또는 픽셀 셰이더 단계 중 첫 번째 단계가 사용됩니다.

테셀레이션을 사용하도록 설정하면 헐 셰이더 단계와 도메인 셰이더 단계가 있습니다. 지정된 패치의 경우 동일한 PrimitiveID가 패치의 헐 셰이더 호출 및 모든 테셀레이션된 도메인 셰이더 호출에 적용됩니다. 동일한 PrimitiveID도 다음 활성 단계로 전파됩니다. 기하 도형 셰이더 단계 또는 픽셀 셰이더 단계(사용하도록 설정된 경우).

기하 도형 셰이더 입력이 SV_PrimitiveID 호출당 0개 이상의 기본 형식을 출력할 수 있기 때문에 후속 픽셀 셰이더 입력이 SV_PrimtiveID 경우 셰이더는 각 출력 기본 형식에 대한 SV_PrimitiveID 값을 자체적으로 프로그래밍해야 합니다.

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

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

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

System-Value 의미 체계 Description Type
SV_ClipDistance[n] 거리 데이터를 클리핑합니다. SV_ClipDistance 값은 각각 평면에 대한 float32 서명된 거리로 간주됩니다. 기본 설정은 보간된 평면 거리가 = 0인 픽셀에서만 래스터화를 호출합니다 >. 하나 이상의 꼭짓점 요소의 여러 구성 요소를 SV_ClipDistance 선언하여 여러 클립 평면을 동시에 구현할 수 있습니다. 결합된 클립 및 컬 거리 값은 최대 D3D#_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT 레지스터의 최대 D3D#_CLIP_OR_CULL_DISTANCE_COUNT 구성 요소입니다. 값을 작성할 수 있지만 입력으로 사용할 수 없는 꼭짓점 셰이더를 제외한 모든 셰이더에서 읽거나 쓸 수 있습니다.
클립플레인 특성은 SV_ClipDistance 것처럼 작동하지만 모든 하드웨어 기능 수준 9_x 이상에서 작동합니다. 자세한 내용은 기능 수준 9 하드웨어의 사용자 클립 평면을 참조하세요.
float
SV_CullDistance[n] 거리 데이터를 컬링합니다. 꼭짓점 요소의 구성 요소에 이 레이블이 지정되면 이러한 값은 각각 평면에 대한 float32 부호 있는 거리로 간주됩니다. 기본 형식의 모든 꼭짓점의 평면 거리가 0이면 기본 형식이 완전히 삭제됩니다 < . 하나 이상의 꼭짓점 요소 중 여러 구성 요소를 SV_CullDistance 선언하여 여러 컬 평면을 동시에 사용할 수 있습니다. 결합된 클립 및 컬 거리 값은 최대 D3D#_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT 레지스터의 최대 D3D#_CLIP_OR_CULL_DISTANCE_COUNT 구성 요소입니다. 값을 작성할 수 있지만 입력으로 사용할 수 없는 꼭짓점 셰이더를 제외한 모든 셰이더에서 읽거나 쓸 수 있습니다.
float
SV_Coverage 입력, 출력 또는 픽셀 셰이더 둘 다에 지정할 수 있는 마스크입니다.
픽셀 셰이더의 SV_Coverage 경우 ps_4_1 이상에서 OUTPUT이 지원됩니다.
픽셀 셰이더에서 SV_Coverage 경우 INPUT에는 ps_5_0 이상이 필요합니다.
uint
SV_Depth 깊이 버퍼 데이터입니다. 픽셀 셰이더로 작성할 수 있습니다. 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_Position 셰이더에 대한 입력을 위해 SV_Position 선언된 경우 두 가지 보간 모드 중 하나를 지정할 수 있습니다. linearNoPerspective 또는 linearNoPerspectiveCentroid는 다중 샘플 앤티앨리어싱 시 중심 맞춤 xyzw 값을 제공합니다. 셰이더에서 사용되는 경우 SV_Position 픽셀 위치를 설명합니다. 모든 셰이더에서 0.5 오프셋으로 픽셀 중심을 가져올 수 있습니다. float4
SV_PrimitiveID 런타임에 의해 자동으로 생성되는 기본별 식별자입니다(System-Generated 값 사용 참조(Direct3D 10) 기하 도형 또는 픽셀 셰이더로 작성하고 기하 도형, 픽셀, 헐 또는 도메인 셰이더에서 읽을 수 있습니다. uint
SV_RenderTargetArrayIndex 렌더링 대상 배열 인덱스입니다. 기하 도형 셰이더 출력에 적용되고 기본 형식이 픽셀 셰이더에 의해 그려지는 렌더링 대상 배열 조각을 나타냅니다. SV_RenderTargetArrayIndex 렌더링 대상이 배열 리소스인 경우에만 유효합니다. 이 의미 체계는 기본 형식에만 적용됩니다. 기본 형식에 둘 이상의 꼭짓점이 있으면 선행 꼭짓점의 값이 사용됩니다. 이 값은 읽기/쓰기 목적으로 사용되는 깊이/스텐실 뷰의 배열 조각도 나타냅니다.
기하 도형 셰이더에서 작성하고 픽셀 셰이더에서 읽을 수 있습니다.
D3D11_FEATURE_DATA_D3D11_OPTIONS3::VPAndRTArrayIndexFromAnyShaderFeedingRasterizertrue면 래스터라이저를 공급하는 셰이더에 SV_RenderTargetArrayIndex 적용됩니다.
uint
SV_SampleIndex 샘플 빈도 인덱스 데이터입니다. 픽셀 셰이더에서만 읽거나 쓸 수 있습니다. uint
SV_StencilRef 현재 픽셀 셰이더 스텐실 참조 값을 나타냅니다. 픽셀 셰이더에서만 쓸 수 있습니다. uint
SV_Target[n], 여기서 0 <= n <= 7 렌더링 대상에 저장할 출력 값입니다. 인덱스는 8개의 바인딩된 렌더링 대상 중 쓸 대상을 나타냅니다. 이 값은 모든 셰이더에서 사용할 수 있습니다. float[2|3|4]
SV_TessFactor 패치의 각 가장자리에서 테셀레이션 양을 정의합니다. 헐 셰이더에서 작성하고 도메인 셰이더에서 읽을 수 있습니다. float[2|3|4]
SV_VertexID 런타임에 의해 자동으로 생성된 꼭짓점별 식별자입니다(System-Generated 값 사용 참조(Direct3D 10) 꼭짓점 셰이더에 대한 입력으로만 사용할 수 있습니다. uint
SV_ViewportArrayIndex Viewport 배열 인덱스입니다. 기하 도형 셰이더 출력에 적용되며 현재 작성 중인 기본 형식에 사용할 뷰포트를 나타냅니다. 픽셀 셰이더에서 읽을 수 있습니다. 기본 형식은 래스터라이저에 전달되기 전에 인덱스가 지정한 뷰포트에 대해 변환되고 잘립니다. 이 의미 체계는 기본 형식에만 적용됩니다. 기본 형식에 둘 이상의 꼭짓점이 있으면 선행 꼭짓점의 값이 사용됩니다.
D3D11_FEATURE_DATA_D3D11_OPTIONS3::VPAndRTArrayIndexFromAnyShaderFeedingRasterizertrue면 래스터라이저를 공급하는 셰이더에 SV_ViewportArrayIndex 적용됩니다.
uint
SV_ShadingRate 음영 속도 값을 통해 가변 음영 속도 계층 2 이상 디바이스에 대해 1픽셀 셰이더 호출로 작성된 픽셀 수를 정의합니다. 픽셀 셰이더에서 읽을 수 있습니다. 꼭짓점 또는 기하 도형 셰이더에서 작성할 수 있습니다. uint

SV_Depth 작성할 때의 제한 사항:

  • 다중 샘플링(multisampleEnable은 D3D10_RASTERIZER_DESCTRUE임)과 깊이 값(픽셀 셰이더 사용)을 작성하는 경우 기록된 단일 값도 깊이 테스트에서 사용됩니다. 따라서 다중 샘플링 시 기본 가장자리를 더 높은 해상도로 렌더링하는 기능이 손실됩니다.
  • 동적 흐름 제어를 사용하는 경우 컴파일 시 일부 경로에 SV_Depth 쓰는 셰이더가 모든 실행에서 SV_Depth 쓸 수 있는지 여부를 확인할 수 없습니다. 선언된 경우 SV_Depth 작성하지 않으면 정의되지 않은 동작이 발생합니다(픽셀 삭제를 포함하거나 포함하지 않을 수 있음).
  • +/-INF 및 NaN을 포함한 모든 float32 값을 SV_Depth 쓸 수 있습니다.
  • 이중 소스 색 혼합을 수행하는 경우에도 SV_Depth 작성이 유효합니다.

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

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

Direct3D 9 의미 체계에 매핑

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

Direct3D 10 의미 체계 Direct3D 9 동급 의미 체계
SV_Depth DEPTH
SV_Position POSITION
SV_Target COLOR

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

Direct3D 9 VPOS 및 Direct3D 10 SV_Position

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

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

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

Direct3D 10 이상에서 SV_Position 의미 체계(픽셀 셰이더의 컨텍스트에서 사용되는 경우)는 화면 공간 좌표(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 함수 선언에서 클립플레인 함수 특성을 사용하여 기능 수준 9_x 기능 수준 10 이상에서 셰이더가 작동하도록 할 수 있습니다. 자세한 내용은 기능 수준 9 하드웨어의 사용자 클립 평면을 참조하세요.