Tipos de datos escalares
HLSL admite varios tipos de datos escalares:
- bool : true o false.
- int : entero de 32 bits con signo.
- uint : entero de 32 bits sin signo.
- dword : entero sin signo de 32 bits.
- half : valor de punto flotante de 16 bits. Este tipo de datos solo se proporciona para la compatibilidad del idioma. Los destinos de sombreador de Direct3D 10 asignan todos los tipos de datos de mitad a tipos de datos flotantes. No se puede usar un tipo de datos medio en una variable global uniforme (si se desea esa funcionalidad, use la marca /Gec).
- float : valor de punto flotante de 32 bits.
- double : valor de punto flotante de 64 bits. No se pueden usar valores de precisión doble como entradas y salidas para una secuencia. Para pasar valores de precisión doble entre sombreadores, declare cada double como un par de tipos de datos uint . A continuación, use la función asuint para empaquetar cada doble en el par de uints y la función asdouble para desempaquetar el par de uints de nuevo en el doble.
A partir de Windows 8, HLSL también admite tipos de datos escalares de precisión mínima. Los controladores gráficos pueden implementar tipos de datos escalares de precisión mínima mediante cualquier precisión mayor o igual que su precisión de bits especificada. Se recomienda no depender del comportamiento de fijación o ajuste que dependa de una precisión subyacente específica. Por ejemplo, el controlador de gráficos podría ejecutar aritmética en un valor min16float con una precisión completa de 32 bits.
- min16float : valor mínimo de punto flotante de 16 bits.
- min10float : valor mínimo de punto flotante de 10 bits.
- min16int : entero de 16 bits con signo mínimo.
- min12int : entero de 12 bits con signo mínimo.
- min16uint : entero de 16 bits sin signo mínimo.
Para obtener más información sobre los literales escalares, vea Grammar.
Los siguientes escalares se introdujeron en HLSL Shader Model 6.0 (en Windows 10, versión 1607):
- uint64_t : entero de 64 bits sin signo.
- int64_t : entero de 64 bits con signo.
Los siguientes escalares se introdujeron en HLSL Shader Model 6.2 (en Windows 10, versión 1803) y se pueden usar si -enable-16bit-types
se usa:
- float16_t: siempre un valor de punto flotante de 16 bits (en lugar de otros floats de 16 bits, que puede o no ser de 16 bits).
- uint16_t : entero de 16 bits sin signo.
- int16_t : entero de 16 bits con signo.
Para obtener más información sobre los tipos de 16 bits, consulta Tipos escalares de 16 bits. Estos requieren compatibilidad de 16 bits en hardware, que es compatible con Turing o superior.
Diferencias entre Direct3D 9 y Direct3D 10:
En Direct3D 10, los siguientes tipos son modificadores para el tipo float:
- snorm float : float normalizado con signo IEEE de 32 bits en el intervalo -1 a 1 inclusive.
- unorm float : float de IEEE de 32 bits sin signo normalizado en el intervalo de 0 a 1 inclusive.
Por ejemplo, esta es una declaración float-variable normalizada de 4 componentes.
snorm float4 fourComponentIEEEFloat;
Tipo de cadena
HLSL también admite un tipo de cadena , que es una cadena ASCII. No hay operaciones o estados que acepten cadenas; pero los efectos pueden consultar parámetros y anotaciones de cadena.
Ejemplo
// Top-level variable.
float globalShaderVariable;
// Top-level function.
void function(
in float4 position: POSITION0 // Top-level argument.
)
{
float localShaderVariable; // Local variable.
function2(...)
}
void function2()
{
...
}