Скалярные типы
HLSL поддерживает несколько скалярных типов данных:
- bool - true или false.
- int — 32-разрядное целое число со знаком.
- uint — 32-разрядное целое число без знака.
- dword — 32-разрядное целое число без знака.
- половина — 16-разрядное значение с плавающей запятой. Этот тип данных предоставляется только для совместимости языка. Целевые объекты шейдера Direct3D 10 сопоставляют все типы данных с плавающей запятой. Половинный тип данных нельзя использовать для универсальной глобальной переменной (используйте флаг /Gec, если эта функция требуется).
- float — 32-разрядное значение с плавающей запятой.
- double — 64-разрядное значение с плавающей запятой. Значения двойной точности нельзя использовать в качестве входных и выходных данных для потока. Чтобы передать значения двойной точности между шейдерами, объявите каждый двойной как пару типов данных uint . Затем используйте функцию asuint , чтобы упаковать каждый двойной в пару uints и функцию asdouble , чтобы распаковывать пару uints обратно в двойной.
Начиная с Windows 8 HLSL также поддерживает скалярные типы данных с минимальной точностью. Графические драйверы могут реализовать минимальные скалярные типы данных с помощью любой точности, большей или равной заданной точности битов. Мы рекомендуем не полагаться на поведение закрепления или упаковки, которое зависит от конкретной базовой точности. Например, графический драйвер может выполнять арифметическое значение min16float с полной 32-разрядной точностью.
- min16float — минимальное 16-разрядное значение с плавающей запятой.
- min10float — минимальное 10-битовое значение с плавающей запятой.
- min16int — минимальное 16-разрядное целое число со знаком.
- min12int — минимальное 12-разрядное целое число со знаком.
- min16uint — минимальное 16-разрядное целое число без знака.
Дополнительные сведения о скалярных литералах см. в разделе "Грамматика".
Различия между Direct3D 9 и Direct3D 10: В Direct3D 10 следующие типы являются модификаторами типа float.
|
Тип строки
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()
{
...
}