Tipos de dados escalares
O HLSL dá suporte a vários tipos de dados escalares:
- bool – true ou false.
- int – inteiro com sinal de 32 bits.
- uint - inteiro sem sinal de 32 bits.
- dword – inteiro sem sinal de 32 bits.
- half - valor de ponto flutuante de 16 bits. Esse tipo de dados é fornecido apenas para compatibilidade de idioma. Os destinos do sombreador Direct3D 10 mapeiam todos os tipos de metade dos dados para tipos de dados float. Um tipo de meio de dados não pode ser usado em uma variável global uniforme (se essa funcionalidade for desejada, use o sinalizador /Gec).
- float – valor de ponto flutuante de 32 bits.
- double - valor de ponto flutuante de 64 bits. Você não pode usar valores de precisão dupla como entradas e saídas para um fluxo. Para passar valores de precisão dupla entre sombreadores, declare cada um como um par de tipos de dados uint . Em seguida, use a função asuint para empacotar cada duplo no par de uints e a função asdouble para desempacotar o par de uints de volta para o duplo.
A partir do Windows 8, o HLSL também dá suporte a tipos de dados escalares de precisão mínima. Os drivers gráficos podem implementar tipos de dados escalares de precisão mínima usando qualquer precisão maior ou igual à precisão de bit especificada. É recomendável não depender do comportamento de fixação ou encapsulamento que depende da precisão subjacente específica. Por exemplo, o driver gráfico pode executar aritmética em um valor min16float com precisão total de 32 bits.
- min16float - valor mínimo de ponto flutuante de 16 bits.
- min10float - valor mínimo de ponto flutuante de 10 bits.
- min16int - inteiro com sinal mínimo de 16 bits.
- min12int - inteiro com sinal mínimo de 12 bits.
- min16uint - inteiro sem sinal mínimo de 16 bits.
Para obter mais informações sobre literais escalares, consulte Gramática.
Os seguintes escalares foram introduzidos no HLSL Shader Model 6.0 (no Windows 10, versão 1607):
- uint64_t - um inteiro sem sinal de 64 bits.
- int64_t - um inteiro com sinal de 64 bits.
Os seguintes escalares foram introduzidos no HLSL Shader Model 6.2 (no Windows 10, versão 1803) e podem ser usados se -enable-16bit-types
for usado:
- float16_t - Sempre um valor de ponto flutuante de 16 bits (em vez de outros floats de 16 bits, que podem ou não ser de 16 bits).
- uint16_t - um inteiro sem sinal de 16 bits.
- int16_t - um inteiro com sinal de 16 bits.
Para obter mais informações sobre tipos de 16 bits, consulte Tipos escalares de 16 bits. Eles exigem suporte de 16 bits em hardware, que é compatível com Turing ou superior.
Diferenças entre o Direct3D 9 e o Direct3D 10:
No Direct3D 10, os seguintes tipos são modificadores para o tipo float:
- snorm float - IEEE de 32 bits com sinal normalizado float no intervalo -1 a 1 inclusive.
- unorm float - IEEE 32 bits unsigned-normalized float in range 0 a 1 inclusive.
Por exemplo, aqui está uma declaração float-variable de 4 componentes com sinal normalizado.
snorm float4 fourComponentIEEEFloat;
Tipo de cadeia de caracteres
O HLSL também dá suporte a um tipo de cadeia de caracteres, que é uma cadeia de caracteres ASCII. Não há operações ou estados que aceitem cadeias de caracteres; mas os efeitos podem consultar parâmetros e anotações de cadeia de caracteres.
Exemplo
// Top-level variable.
float globalShaderVariable;
// Top-level function.
void function(
in float4 position: POSITION0 // Top-level argument.
)
{
float localShaderVariable; // Local variable.
function2(...)
}
void function2()
{
...
}