Tipi di dati scalari
HLSL supporta diversi tipi di dati scalari:
- bool - true o false.
- int - Intero con segno a 32 bit.
- uint - Intero senza segno a 32 bit.
- dword - Intero senza segno a 32 bit.
- metà - valore a virgola mobile a 16 bit. Questo tipo di dati viene fornito solo per la compatibilità della lingua. Le destinazioni direct3D 10 shader mappano tutti i tipi di dati di metà ai tipi di dati float. Non è possibile usare un tipo di dati a metà su una variabile globale uniforme (se è desiderata tale funzionalità, usare il flag /Gec).
- float : valore a virgola mobile a 32 bit.
- double - valore a virgola mobile a 64 bit. Non è possibile usare valori di precisione doppia come input e output per un flusso. Per passare valori di precisione doppia tra shader, dichiarare ogni doppio come coppia di tipi di dati uint . Usare quindi la funzione asuint per raggruppare ogni doppio nella coppia di uints e la funzione asduble per decomprimere la coppia di uintnel doppio.
A partire da Windows 8, HLSL supporta anche tipi di dati scalari di precisione minimi. I driver grafici possono implementare tipi di dati scalari di precisione minimi usando qualsiasi precisione maggiore o uguale alla precisione di bit specificata. È consigliabile non basarsi sul comportamento di blocco o wrapping che dipende da precisione sottostante specifica. Ad esempio, il driver grafico potrebbe eseguire aritmetica su un valore min16float con precisione a 32 bit completa.
- min16float - valore minimo a virgola mobile a 16 bit.
- min10float - valore minimo a virgola mobile a 10 bit.
- min16int - intero con segno a 16 bit minimo.
- min12int : intero con segno a 12 bit minimo.
- min16uint - intero senza segno a 16 bit minimo.
Per altre informazioni sui valori letterali scalari, vedere Grammatica.
I scalari seguenti sono stati introdotti in HLSL Shader Model 6.0 (in Windows 10, versione 1607):
- uint64_t - Intero senza segno a 64 bit.
- int64_t - Intero con segno a 64 bit.
I scalari seguenti sono stati introdotti in HLSL Shader Model 6.2 (in Windows 10, versione 1803) e possono essere usati se -enable-16bit-types
vengono usati:
- float16_t - Valore a virgola mobile a 16 bit (anziché altri float a 16 bit, che potrebbero o meno essere a 16 bit).
- uint16_t - Intero senza segno a 16 bit.
- int16_t - Intero con segno a 16 bit.
Per altre informazioni sui tipi a 16 bit, vedere Tipi scalari a 16 bit. Questi richiedono supporto a 16 bit nell'hardware, supportato da Turing o versione successiva.
Differenze tra Direct3D 9 e Direct3D 10:
In Direct3D 10 i tipi seguenti sono modificatori al tipo float:
- snorm float : float con segno IEEE 32 bit con segno normalizzato nell'intervallo -1-1 inclusivo.
- unorm float : float IEEE 32 bit non con segno normalizzato in intervallo compreso tra 0 e 1 incluso.
Ad esempio, ecco una dichiarazione float-variable con segno a 4 componenti.
snorm float4 fourComponentIEEEFloat;
Tipo string
HLSL supporta anche un tipo di stringa , ovvero una stringa ASCII. Non sono presenti operazioni o stati che accettano stringhe; ma gli effetti possono eseguire query su parametri stringa e annotazioni.
Esempio
// Top-level variable.
float globalShaderVariable;
// Top-level function.
void function(
in float4 position: POSITION0 // Top-level argument.
)
{
float localShaderVariable; // Local variable.
function2(...)
}
void function2()
{
...
}