HLSL Semantic
- Semantic은 매개 변수의 의도된 사용에 대한 정보를 전달하는 Shader Input, Output에 연결된 문자열이다.
- Semantic은 Shader 단계 간에 전달되는 모든 변수에 필요하다.
정리하게된 이유
- Shader에서 Output으로 보낸 Struct의 Semantic과 해당 Struct를 Input으로 받아 사용하는 Shader의 Semantic을 일치시켜줘야 하는 부분을 동작 원리를 모르고 사용하고 있다는 느낌을 받아서 다시 한번 개념을 잡는 목적으로 정리를 하기로 생각하였다.
- 찾다보니 생각보다 많은 Semantic들이 있다는 것을 알고 해당 Semantic에 대한 정리를 해보려 한다.
HLSL Semantic 종류
Vertex Shader Input Semantics
Input | Description | Type |
BINORMAL[n] | 바이노말 (Binormal) | float4 |
BLENDINDICES[n] | 혼합 인덱스 (Blend Indices) | uint |
BLENDWEIGHT[n] | 혼합 가중치 (Blend Weight) | float |
COLOR[n] | 확산 및 반사 색상 (Diffuse, Specular Color) | float4 |
NORMAL[n] | 법선 벡터 (Normal Vector) | float4 |
POSITION[n] | 객체 공간의 정점 위치 (Object Space Vertex Position) | float4 |
POSITIONT | 변환된 정점 위치 (Transformed Vertex Position) | float4 |
PSIZE[n] | 포인트 크기 (Point Size) | float |
TANGENT[n] | 접선 (Tangent) | float4 |
TEXCOORD[n] | 텍스처 좌표 (Texture Coordinates) | float4 |
Vertex Shader Output Semantics
Input | Description | Type |
COLOR[n] | 확산 및 반사 색상 (Diffuse, Specular Color) | float4 |
FOG | 정점 안개 (Vertex Fog) | float |
POSITION[n] | 동차 공간에서 정점의 위치 (Homegenous Space Vertex Position) | float4 |
PSIZE[n] | 포인트 크기 (Point Size) | float |
TESSFACTOR[n] | 테셀레이션 요소 (Tessellation Factor) | float |
TEXCOORD[n] | 텍스처 좌표 (Texture Coordinates) | float4 |
Pixel Shader Input Semantics
Input | Description | Type |
COLOR[n] | 확산 및 반사 색상 (Diffuse, Specular Color) | float4 |
TEXCOORD[n] | 텍스처 좌표 (Texture Coordinates) | float4 |
VFACE | 후면을 향한 부동 소수점 스칼라 값 (Floating-point scalar that indicates a back-facing primitive) | float |
VPOS | 화면 공간의 픽셀 위치 (The pixel location [x, y] in screen space) | float2 |
Pixel Shader Output Semantics
Input | Description | Type |
COLOR[n] | 출력 색상 (Output color) | float4 |
DEPTH[n] | 출력 깊이 (Output depth) | float |
Rasterizer Stage System Value Semantics
System-Value Semantic | Description | Type |
SV_ClipDistance[n] | - Clip Distance Data - SV_ClipDistance 값은 각각 평면까지의 float32 부호 있는 거리로 가정 - Vertex Shader를 제외하고 모든 Shader 읽기, 쓰기 가능 |
float |
SV_CullDistance[n] | - Cull Distance Data - SV_CullDistance 값은 각각 평면까지의 float32 부호 있는 거리로 간주 - Vertex Shader를 제외하고 모든 Shader 읽기, 쓰기 가능 |
float |
SV_Coverage | - Pixel Shader의 Input, Output 지정 가능한 마스크 | uint |
SV_Depth | - Depth Buffer Data - Pixel Shader로 작성 가능 |
float |
SV_DepthGreaterEqual | - Rasterizer에 의해 결정된 값보다 크거나 같은 경우 깊이 출력 - Early Z를 비활성화하지 않고 깊이 조정을 활성화 |
float |
SV_DepthLessEqual | - Rasterizer에 의해 결정된 값보다 작거나 같은 경우 깊이 출력 - Early Z를 비활성화하지 않고 깊이 조정을 활성화 |
float |
SV_DispatchThreadID | - 그룹별 Dispatch 호출 내 Global Thread Offset 설정 - Compute Shader Input - 읽기 전용 |
uint3 |
SV_DomainLocation | - 작업중인 현재 Domain Point의 Hull 위치 정의 - Domain Shader Input - 읽기 전용 |
float2, float3 |
SV_GroupID | - Dispatch 호출의 크기당 Dispatch 호출 내에서의 Group Offset 정의 - Compute Shader Input - 읽기 전용 |
uint3 |
SV_GroupIndex | - 주어진 그룹 내에서 주어진 Thread에 대한 병합된 인덱스 제공 - Compute Shader Input - 읽기 전용 |
uint |
SV_GroupThreadID | - 그룹 크기별로 그룹 내 Thread Offset 정의 - Compute Shader Input - 읽기 전용 |
uint3 |
SV_GroupInstanceID | - Geometry Shader의 Instance 정의 - 동일한 Geometry Primitive에서 Geometry Shader 최대 32번 호출 가능 - Geometry Shader Input |
uint |
SV_InnerCoverage | - Pixel이 완전이 덮여 있는지 여부에 따른 Rasterization 정보 나타냄 - Pixel Shader 읽기, 쓰기 가능 |
void |
SV_InsideTessFactor | - Patch Surface 내의 Tessellation 양을 정의 - Hull Shader 쓰기 가능 - Domain Shader 읽기 가능 |
float, float2 |
SV_InstanceID | - Runtime에 자동으로 생성된 Instance 별 식별자 - 모든 Shader에서 사용 가능 |
void |
SV_IsFrontFace | - 삼각형이 정면을 향하는지 여부를 지정 - Geometry Shader 쓰기 가능 - Pixel Shader 읽기 가능 |
bool |
SV_OutputControlPointID | - Hull Shader의 기본 진입점 호출에 의해 작동되는 제어점 ID의 인덱스 정의 - Hull Shader 읽기 가능 |
uint |
SV_Position | - Pixel Position Data - 모든 Shader 사용 가능 |
float4 |
SV_PrimitiveID | - Runtime에 자동으로 생성된 기본 단위 식별자 - Geometry, Pixel Shader 쓰기 가능 - Pixel, Hull, Domain Shader 읽기 가능 |
uint |
SV_RenderTargetArrayIndex | - Geometry Shader Output - Pixel Shader 해당 RenderTarget Array Index - RenderTarget이 Array Resource일 경우에만 유효 - Geometry Shader 쓰기 가능 - Pixel Shaer 읽기 가능 |
uint |
SV_SampleIndex | - Sample Frequency Index Data - Pixel Shader 읽기, 쓰기 가능 |
uint |
SV_StencilRef | - 현재 Pixel Shader Stencil 참조 값 - Pixel Shader 쓰기 가능 |
uint |
SV_Target[n] | - RenderTarget에 저장될 출력 값 - Index는 8개의 Binding된 RenderTarget 중 사용할 대상을 나타냄 - 모든 Shader에서 사용 가능 |
float2, float3, float4 |
SV_TessFactor | - Patch의 각 가장자리에서 Tessellation 양을 정의 - Hull Shader 쓰기 가능 - Domain Shader 읽기 가능 |
float2, float3, float4 |
SV_VertexID | - Runtime에 생성되는 Vertex별 식별자 - Vertex Shader Input |
uint |
SV_ViewportArrayIndex | - 현재 작성 중인 Primitive에 사용할 ViewPort 나타냄. - Geometry Shader Output - Pixel Shader 읽기 가능 |
uint |
SV_ShadingRate | - Shading Rate Values을 통해 Variable Shading Rate Tier 2 이상 장치에 대한 하나의 Pixel Shader 호출로 작성된 Pixel 수를 정의 - Pixel Shader 읽기 가능 - Vertex, Geometry Shader 쓰기 가능 |
uint |
MSDL Semantic 관련 자료
Semantics - Win32 apps
A semantic is a string attached to a shader input or output that conveys information about the intended use of a parameter.
docs.microsoft.com