Condividi tramite


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()
{
  ...
}

Vedere anche