純量資料類型

HLSL 支援數個純量資料類型:

  • bool - true 或 false。
  • int - 32 位帶正負號的整數。
  • uint - 32 位不帶正負號的整數。
  • dword - 32 位不帶正負號的整數。
  • half - 16 位浮點值。 此資料類型僅供語言相容性使用。 Direct3D 10 著色器的目標是將所有半資料類型對應至 float 資料類型。 如果需要,一半資料類型不能用於統一全域變數 (,則請使用 /Gec 旗標) 。
  • float - 32 位浮點值。
  • double - 64 位浮點值。 您無法使用雙精確度值作為資料流程的輸入和輸出。 若要在著色器之間傳遞雙精確度值,請將每個 double 宣告為一對 uint 資料類型。 然後,使用 asuint 函式將每 雙精度浮 點數封裝到 uint的配對和 asdouble 函式 中,將 uint的配對解壓縮回 雙精度浮點數。

從 Windows 8 開始,HLSL 也支援最小精確度純量資料類型。 圖形驅動程式可以使用大於或等於其指定位精確度的任何精確度,實作最小精確度純量資料類型。 建議您不要依賴相依于特定基礎精確度的固定或包裝行為。 例如,圖形驅動程式可能會以完整 32 位精確度在 min16float 值上執行算術。

  • min16float - 最小 16 位浮點值。
  • min10float - 最小 10 位浮點值。
  • min16int - 最小 16 位帶正負號的整數。
  • min12int - 最小 12 位帶正負號的整數。
  • min16uint - 最小 16 位不帶正負號的整數。

如需純量常值的詳細資訊,請參閱 文法

下列純量是在HLSL 著色器模型 6.0 (Windows 10 1607 版中引進) :

  • uint64_t - 64 位不帶正負號的整數。
  • int64_t - 64 位帶正負號的整數。

下列純量是在 Windows 10 1803 版) 中引進的 HLSL 著色器模型 6.2 (,而且可在使用時 -enable-16bit-types 使用:

  • float16_t - 一律是 16 位浮點值 (,而不是其他 16 位浮點數,這可能不是 16 位) 。
  • uint16_t - 16 位不帶正負號的整數。
  • int16_t - 16 位帶正負號的整數。

如需 16 位類型的詳細資訊,請參閱 16 位純量類型。 這些要求在硬體中需要 16 位支援,這由 Turing 或更新版本支援。

Direct3D 9 與 Direct3D 10 之間的差異:

在 Direct3D 10 中,下列類型是 float 類型的修飾詞:

  • snorm float - 包含範圍 -1 到 1 的 IEEE 32 位帶正負號標準化浮點數。
  • unorm float - 包含範圍 0 到 1 的 IEEE 32 位不帶正負號標準化浮點數。

例如,以下是 4 個元件帶正負號的浮變數宣告。

snorm float4 fourComponentIEEEFloat;

字串類型

HLSL 也支援 字串 類型,這是 ASCII 字串。 沒有接受字串的作業或狀態;但效果可以查詢字串參數和注釋。

範例

// Top-level variable.
float globalShaderVariable; 

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

void function2()
{
  ...
}

另請參閱