Скалярные типы данных

HLSL поддерживает несколько скалярных типов данных:

  • bool — true или false.
  • int — 32-разрядное целое число со знаком.
  • uint — 32-разрядное целое число без знака.
  • dword — 32-разрядное целое число без знака.
  • half — 16-битовое значение с плавающей запятой. Этот тип данных предоставляется только для обеспечения совместимости с языком. Целевые объекты шейдеров Direct3D 10 сопоставляют все половины типов данных с типами данных float. Тип данных half нельзя использовать для универсальной глобальной переменной (если эта функциональность является необходимой, используйте флаг /Gec).
  • float — 32-разрядное значение с плавающей запятой.
  • double — 64-разрядное значение с плавающей запятой. Значения двойной точности нельзя использовать в качестве входных и выходных данных для потока. Чтобы передать значения двойной точности между шейдерами, объявите каждый из них как пару типов данных uint . Затем используйте функцию asuint , чтобы упаковать каждый двойник в пару uints, и функцию asdouble , чтобы распаковывать пару uintобратно в double.

Начиная с Windows 8, HLSL также поддерживает скалярные типы данных с минимальной точностью. Графические драйверы могут реализовывать скалярные типы данных с минимальной точностью, используя любую точность, превышающую указанную битовую точность или равную ей. Мы не рекомендуем полагаться на поведение закрепления или упаковки, которое зависит от конкретной базовой точности. Например, графический драйвер может выполнять арифметическое значение min16float с полной 32-разрядной точностью.

  • min16float — минимальное 16-битовое значение с плавающей запятой.
  • min10float — минимальное 10-битовое значение с плавающей запятой.
  • min16int — минимальное 16-битовое целое число со знаком.
  • min12int — минимальное 12-битовое целое число со знаком.
  • min16uint — минимальное 16-битовое целое число без знака.

Дополнительные сведения о скалярных литералах см. в разделе Грамматика.

В HLSL Shader Model 6.0 (в Windows 10 версии 1607) появились следующие скаляры:

  • uint64_t — 64-разрядное целое число без знака.
  • int64_t — 64-разрядное целое число со знаком.

Следующие скаляры появились в модели HLSL шейдера 6.2 (в Windows 10 версии 1803) и могут использоваться, если -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 - ieee 32-bit signed-normalized float in range -1 to 1 inclusive.
  • unorm float — 32-битовое значение ieee без знака с плавающей точкой в диапазоне от 0 до 1 включительно.

Например, вот 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()
{
  ...
}

См. также раздел