2.3. Semantica dei parametri in ingresso ed uscita

2
Il tuo voto: Nessuno Media: 2 (1 vote)

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).