Linguagem de sombreamento de alto nível - High-Level Shading Language

Image
Uma cena contendo vários shaders HLSL 2D diferentes. A distorção da estátua é obtida puramente fisicamente, enquanto a textura da moldura retangular ao lado é baseada na intensidade da cor. O quadrado ao fundo foi transformado e girado . A transparência parcial e o reflexo da água no primeiro plano são adicionados por um sombreador aplicado finalmente a toda a cena.

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