Un importante aspetto caratteristico del linguaggio HLSL è l'utilizzo della semantica che aiuta il compilatore a capire come collegare le variabili in uscita ed i parametri in ingresso di un Vertex/Pixel Shader ai registri della GPU. Di seguito sono riportate le semantiche utilizzate nei Vertex Shaders e nei Pixel Shaders raggruppate secondo il loro ruolo.
Semantiche per i parametri in ingresso al Vertex Shader:
|
Semantica |
Descrizione |
Tipo |
|
BINORMAL[n] |
Vettore binormale |
float4 |
|
BLENDINDICES[n] |
Indici degli altri bones coinvolti nello skinning |
uint |
|
BLENDWEIGHT[n] |
Pesi dei bones utilizzati nello skinning |
float |
|
COLOR[n] |
Colore del vertice |
float4 |
|
NORMAL[n] |
Vettore normale |
float4 |
|
POSITION[n] |
Posizione del vertice in object-space |
float4 |
|
POSITIONT |
Posizione del vertice trasformata |
float4 |
|
PSIZE[n] |
Dimensione del punto |
float |
|
TANGENT[n] |
Vettore tangente |
float4 |
|
TEXCOORD[n] |
Coordinate di texture |
float4 |
Semantiche per variabili in uscita dal Vertex Shader:
|
Semantica |
Descrizione |
Tipo |
|
COLOR[n] |
Colore del vertice |
float4 |
|
FOG |
Intensità della nebbia |
float |
|
POSITION[n] |
Posizione del vertice in coordinate omogenee. Obbligatoria. |
float4 |
|
PSIZE[n] |
Dimensione del punto |
float |
|
TESSFACTOR[n] |
Fattore di tassellazione |
float |
|
TEXCOORD[n] |
Coordinate di texture |
float4 |
Semantiche per i parametri in ingresso al Pixel Shader:
|
Semantica |
Descrizione |
Tipo |
|
COLOR[n] |
Colore interpolato del pixel |
float4 |
|
TEXCOORD[n] |
Coordinate di texture |
float4 |
|
VFACE |
Valore che indica l'orientamento del triangolo di cui fa parte il pixel |
float |
|
VPOS |
Posizione del pixel in screen-space |
float2 |
Semantiche per le variabili in uscita (valore di ritorno) dal Pixel Shader:
|
Semantica |
Descrizione |
Tipo |
|
COLOR[n] |
Colore calcolato del pixel |
float4 |
|
DEPTH[n] |
Profondità/distanza calcolata del pixel |
float |
La dicitura [n] indica la possibilità di specificare il numero della risorsa con un valore compreso tra zero ed il numero di risorse disponibili, nel caso sia omesso il compilatore utilizzerà il valore zero. Ad esempio TEXCOORD0, COLOR1, POSITION3 ecc...
Attenzione: il tipo di dato che deve essere utilizzato specifica la capienza massima disponibile; è possibile specificare delle coordinate di texture utilizzando float2 o float3, così come per le semantiche NORMAL, BINORMAL, TANGENT che possono essere specificate utilizzando float3.
L'unica restrizione presente è quella per le variabili in uscita dal Pixel Shader che devono avere i tipi specificati anche nel caso in cui venga utilizzato un solo canale, ad esempio nei render-targets di tipo R32F (in XNA di tipo SurfaceFormat.Single).