Skalare Datentypen

HLSL unterstützt mehrere skalare Datentypen:

  • bool : true oder false.
  • int : 32-Bit-Ganzzahl mit Vorzeichen.
  • uint : 32-Bit-Ganzzahl ohne Vorzeichen.
  • dword : 32-Bit-Ganzzahl ohne Vorzeichen.
  • halb : 16-Bit-Gleitkommawert. Dieser Datentyp wird nur zur Sprachkompatibilität bereitgestellt. Direct3D 10-Shaderziele ordnen alle halbierten Datentypen float-Datentypen zu. Ein halber Datentyp kann nicht für eine einheitliche globale Variable verwendet werden (wenn diese Funktionalität gewünscht ist, verwenden Sie das Flag /Gec).
  • float : 32-Bit-Gleitkommawert.
  • double : 64-Bit-Gleitkommawert. Sie können keine Werte mit doppelter Genauigkeit als Eingaben und Ausgaben für einen Stream verwenden. Um Werte mit doppelter Genauigkeit zwischen Shadern zu übergeben, deklarieren Sie jeden Double als Paar von uint-Datentypen . Verwenden Sie dann die asuint-Funktion, um jedes Double in das Paar von uints und die asdouble-Funktion zu packen, um das Paar von uints wieder in das Double zu entpacken.

Ab Windows 8 unterstützt HLSL auch Skalardatentypen mit minimaler Genauigkeit. Grafiktreiber können Skalardatentypen mit minimaler Genauigkeit implementieren, indem eine beliebige Genauigkeit verwendet wird, die größer oder gleich der angegebenen Bitgenauigkeit ist. Es wird empfohlen, sich nicht auf ein Spann- oder Umschließungsverhalten zu verlassen, das von einer bestimmten zugrunde liegenden Genauigkeit abhängt. Der Grafiktreiber kann beispielsweise Arithmetik für einen min16float-Wert mit voller 32-Bit-Genauigkeit ausführen.

  • min16float : mindestens 16-Bit-Gleitkommawert.
  • min10float : mindestens 10-Bit-Gleitkommawert.
  • min16int : mindestens 16-Bit-Ganzzahl mit Vorzeichen.
  • min12int : mindestens 12-Bit-Ganzzahl mit Vorzeichen.
  • min16uint : mindestens 16-Bit-Ganzzahl ohne Vorzeichen.

Weitere Informationen zu skalaren Literalen finden Sie unter Grammatik.

Die folgenden Skalar wurden im HLSL-Shadermodell 6.0 (in Windows 10 Version 1607) eingeführt:

  • uint64_t : Eine 64-Bit-Ganzzahl ohne Vorzeichen.
  • int64_t : Eine 64-Bit-Ganzzahl mit Vorzeichen.

Die folgenden Skalar wurden im HLSL-Shadermodell 6.2 (in Windows 10 Version 1803) eingeführt und können verwendet werden, wenn -enable-16bit-types verwendet wird:

  • float16_t : Immer ein 16-Bit-Gleitkommawert (im Gegensatz zu anderen 16-Bit-Floats, die 16-Bit sein können oder nicht).
  • uint16_t : Eine 16-Bit-Ganzzahl ohne Vorzeichen.
  • int16_t : Eine 16-Bit-Ganzzahl mit Vorzeichen.

Weitere Informationen zu 16-Bit-Typen finden Sie unter 16-Bit-Skalartypen. Diese erfordern 16-Bit-Unterstützung in Hardware, die von Turing oder höher unterstützt wird.

Unterschiede zwischen Direct3D 9 und Direct3D 10:

In Direct3D 10 sind die folgenden Typen Modifizierer für den float-Typ:

  • snorm float – IEEE 32-Bit-float-signiert-normalisierter Float im Bereich -1 bis einschließlich 1.
  • unorm float : IEEE 32-Bit-nicht-normalisierter Float im Bereich 0 bis einschließlich 1.

Hier sehen Sie beispielsweise eine 4-Komponenten-Deklaration mit signierter normalisierter Floatvariable.

snorm float4 fourComponentIEEEFloat;

Zeichenfolgentyp

HLSL unterstützt auch einen Zeichenfolgentyp , bei dem es sich um eine ASCII-Zeichenfolge handelt. Es gibt keine Vorgänge oder Zustände, die Zeichenfolgen akzeptieren. Effekte können jedoch Zeichenfolgenparameter und Anmerkungen abfragen.

Beispiel

// Top-level variable.
float globalShaderVariable; 

// Top-level function.
void function(
in float4 position: POSITION0 // Top-level argument.
              )
{
  float localShaderVariable; // Local variable.
  function2(...)
}

void function2()
{
  ...
}

Weitere Informationen