Linguagem de sombreamento de alto nível - High-Level Shading Language
A High-Level Shader Language ou High-Level Shading Language ( HLSL ) é uma linguagem de sombreamento proprietária desenvolvida pela Microsoft para a API Direct3D 9 para aumentar a linguagem de montagem de sombreador e passou a se tornar a linguagem de sombreamento necessária para o modelo de sombreador unificado de Direct3D 10 e superior.
HLSL é análogo à linguagem de sombreamento GLSL usada com o padrão OpenGL . É muito semelhante à linguagem de sombreamento Nvidia Cg, pois foi desenvolvida junto com ela. As primeiras versões das duas línguas foram consideradas idênticas, apenas comercializadas de forma diferente. Os shaders HLSL podem permitir aumentos profundos de velocidade e detalhes, bem como muitos efeitos especiais em computação gráfica 2D e 3D .
Os programas HLSL vêm em seis formas: pixel shaders (fragmento em GLSL), vertex shaders , geometry shaders , compute shaders , tessellation shaders (Hull e Domain shaders) e ray tracing shaders (Ray Generation Shaders, Intersection Shaders, Any Hit / Closest Hit / Miss Shaders). Um sombreador de vértice é executado para cada vértice enviado pelo aplicativo e é o principal responsável por transformar o vértice do espaço do objeto para o espaço de visualização, gerando coordenadas de textura e calculando os coeficientes de iluminação, como os vetores normal, tangente e bitangente do vértice. Quando um grupo de vértices (normalmente 3, para formar um triângulo) passa pelo sombreador de vértice, sua posição de saída é interpolada para formar pixels dentro de sua área; este processo é conhecido como rasterização .
Opcionalmente, um aplicativo que usa uma interface Direct3D 10/11/12 e hardware Direct3D 10/11/12 também pode especificar um sombreador de geometria. Este sombreador recebe como entrada alguns vértices de uma primitiva (triângulo / linha / ponto) e usa esses dados para gerar / degenerar (ou tesselar ) primitivas adicionais ou para alterar o tipo de primitivas, que são então enviadas para o rasterizador.
D3D11.3 e D3D12 introduziram Shader Model 5.1 e 6.0 posterior.
Comparação do modelo de shader
As GPUs listadas são o hardware que primeiro ofereceu suporte às especificações fornecidas. Os fabricantes geralmente oferecem suporte a todos os modelos de shader inferiores por meio de drivers. Observe que os jogos podem exigir uma determinada versão do DirectX, mas não necessariamente exigem uma GPU em conformidade com as especificações completas dessa versão, já que os desenvolvedores podem usar uma versão superior da API do DirectX para atingir hardware com especificações Direct3D mais baixas; por exemplo, o DirectX 9 expõe recursos de hardware de nível DirectX7 que o DirectX7 não expôs, visando seu pipeline de T&L de função fixa.
Comparação de pixel shader
| Versão do pixel shader | 1,0 a 1,3 | 1,4 | 2.0 | 2.0a | 2.0b | 3,0 | 4,0 4,1 5,0 |
|---|---|---|---|---|---|---|---|
| Limite de textura dependente | 4 | 6 | 8 | Ilimitado | 8 | Ilimitado | Ilimitado |
| Limite de instrução de textura | 4 | 6 * 2 | 32 | Ilimitado | Ilimitado | Ilimitado | Ilimitado |
| Registro de posição | Não | Não | Não | Não | Não | sim | sim |
| Slots de instrução | 8 + 4 | 8 + 4 | 32 + 64 | 512 | 512 | ≥ 512 | ≥ 65536 |
| Instruções executadas | 8 + 4 | 6 * 2 + 8 * 2 | 32 + 64 | 512 | 512 | 65536 | Ilimitado |
| Indireções de textura | 4 | 4 | 4 | Ilimitado | 4 | Ilimitado | Ilimitado |
| Registros interpolados | 2 + 4 | 2 + 6 | 2 + 8 | 2 + 8 | 2 + 8 | 10 | 32 |
| Predicação de instrução | Não | Não | Não | sim | Não | sim | Não |
| Registros de entrada de índice | Não | Não | Não | Não | Não | sim | sim |
| Registros temporários | 2 | 6 | 12 a 32 | 22 | 32 | 32 | 4096 |
| Registros constantes | 8 | 8 | 32 | 32 | 32 | 224 | 16 × 4096 |
| Arbitrary swizzling | Não | Não | Não | sim | Não | sim | sim |
| Instruções de gradiente | Não | Não | Não | sim | Não | sim | sim |
| Registro de contagem de loop | Não | Não | Não | Não | Não | sim | sim |
| Registro de rosto (iluminação dos dois lados) | Não | Não | Não | Não | sim | sim | sim |
| Controle de fluxo dinâmico | Não | Não | Não | Não | Não | Sim (24) | Sim (64) |
| Operadores bit a bit | Não | Não | Não | Não | Não | Não | sim |
| Nativos Inteiros | Não | Não | Não | Não | Não | Não | sim |
- PS 1.0 - 3dfx Rampage não lançado , DirectX 8.
- PS 1.1 - GeForce 3 , DirectX 8.
- PS 1.2 - 3Dlabs Wildcat VP, DirectX 8.0a.
- PS 1.3 - GeForce 4 Ti , DirectX 8.0a.
- PS 1.4 - Radeon 8500-9250 , Matrox Parhelia , DirectX 8.1.
- Shader Model 2.0 - Radeon 9500-9800 / X300-X600 , DirectX 9.
- Shader Model 2.0a - modelo otimizado para GeForce FX / PCX , DirectX 9.0a.
- Shader Model 2.0b - modelo de shader Radeon X700-X850 , DirectX 9.0b.
- Shader Model 3.0 - Radeon X1000 e GeForce 6 , DirectX 9.0c.
- Shader Model 4.0 - Radeon HD 2000 e GeForce 8 , DirectX 10.
- Shader Model 4.1 - Radeon HD 3000 e GeForce 200 , DirectX 10.1.
- Shader Model 5.0 - Radeon HD 5000 e GeForce 400 , DirectX 11.
- Shader Model 5.1 - GCN 1+ , Fermi +, DirectX 12 (11_0 +) com WDDM 2.0.
- Shader Model 6.0 - GCN 1+, Kepler +, DirectX 12 (11_0 +) com WDDM 2.1.
- Shader Model 6.1 - GCN 1+, Kepler +, DirectX 12 (11_0 +) com WDDM 2.3.
- Shader Model 6.2 - GCN 1+, Kepler +, DirectX 12 (11_0 +) com WDDM 2.4.
- Shader Model 6.3 - GCN 1+, Kepler +, DirectX 12 (11_0 +) com WDDM 2.5.
- Shader Model 6.4 - GCN 1+, Kepler +, Skylake +, DirectX 12 (11_0 +) com WDDM 2.6.
- Shader Model 6.5 - GCN 1+, Kepler +, Skylake +, DirectX 12 (11_0 +) com WDDM 2.7.
- Shader Model 6.6 - GCN 1+, Kepler +, Skylake +, DirectX 12 (11_0 +) com WDDM 2.9.
"32 + 64" para instruções executadas significa "32 instruções de textura e 64 instruções aritméticas."
Comparação do Vertex Shader
| Versão do Vertex Shader | VS 1.1 | VS 2.0 | VS 2.0a | VS 3.0 | VS 4.0 VS 4.1 VS 5.0 |
|---|---|---|---|---|---|
| # de slots de instrução | 128 | 256 | 256 | ≥ 512 | ≥ 65536 |
| Nº máximo de instruções executadas | 128 | 1024 | 65536 | 65536 | Ilimitado |
| Predicação de instrução | Não | Não | sim | sim | sim |
| Registros temporários | 12 | 12 | 16 | 32 | 4096 |
| # registros constantes | ≥ 96 | ≥ 256 | 256 | ≥ 256 | 16 × 4096 |
| Controle de fluxo estático | Não | sim | sim | sim | sim |
| Controle de fluxo dinâmico | Não | Não | sim | sim | sim |
| Profundidade de controle de fluxo dinâmico | N / D | N / D | 24 | 24 | 64 |
| Busca de textura de vértice | Não | Não | Não | sim | sim |
| # de amostradores de textura | N / D | N / D | N / D | 4 | 128 |
| Suporte para instanciação de geometria | Não | Não | Não | sim | sim |
| Operadores bit a bit | Não | Não | Não | Não | sim |
| Inteiros nativos | Não | Não | Não | Não | sim |
Veja também
Notas de rodapé
links externos
- Guia de programação para HLSL no Microsoft Docs
- Introdução ao DirectX 9 High Level Shading Language , (ATI) AMD developer central
- Introdução e tutorial de HLSL de Riemer (inclui código de amostra)
- Introdução HLSL
- Especificação DirectX Intermediate Language (DXIL)