Język cieniowania wysokiego poziomu — High-Level Shading Language
Wysokiego szczebla Shader Język lub wysoka Level Shading Language ( HLSL ) jest zastrzeżonym język cieniowania opracowany przez Microsoft dla Direct3D 9 API wspomagając w ten sposób montażu modułu cieniującego język, i udał się na wymaganą cieniowania język jednolitego modelu shader Direct3D 10 i nowsze.
HLSL jest analogiczny do języka cieniowania GLSL używanego w standardzie OpenGL . Jest bardzo podobny do języka cieniowania Nvidia Cg, ponieważ został opracowany razem z nim. Wczesne wersje tych dwóch języków były uważane za identyczne, tylko sprzedawane w inny sposób. Moduły cieniujące HLSL umożliwiają znaczne zwiększenie szybkości i szczegółowości, a także wiele efektów specjalnych w grafice komputerowej 2D i 3D .
Programy HLSL występują w sześciu formach: shadery pikseli (fragment w GLSL), Vertex Shader , Geometry Shader , Compute Shader , Tesselation Shader (Hull and Domain shader ) i ray tracing shadery (Ray Generation Shader, Intersection Shader, Any Hit/Closest Hit) /Panna Shadery). Vertex Shader jest wykonywany dla każdego wierzchołka przesłanego przez aplikację i jest głównie odpowiedzialny za przekształcanie wierzchołka z przestrzeni obiektu do przestrzeni widoku, generowanie współrzędnych tekstury i obliczanie współczynników oświetlenia, takich jak wektory normalny, styczny i bitangent. Kiedy grupa wierzchołków (zwykle 3, tworząc trójkąt) przechodzi przez Vertex Shader, ich pozycja wyjściowa jest interpolowana, aby utworzyć piksele w jej obszarze; proces ten jest znany jako rasteryzacja .
Opcjonalnie aplikacja korzystająca z interfejsu Direct3D 10/11/12 i sprzętu Direct3D 10/11/12 może również określać shader geometrii. Ten moduł cieniujący przyjmuje jako dane wejściowe pewne wierzchołki prymitywu (trójkąt/linia/punkt) i używa tych danych do generowania/degenerowania (lub tesselacji ) dodatkowych prymitywów lub do zmiany typu prymitywów, z których każdy jest następnie wysyłany do rasteryzatora.
D3D11.3 i D3D12 wprowadziły Shader Model 5.1 i późniejsze wersje 6.0.
Porównanie modeli shaderów
Wymienione procesory graficzne to sprzęt, który jako pierwszy obsługiwał dane specyfikacje. Producenci zazwyczaj obsługują wszystkie niższe modele cieniowania za pośrednictwem sterowników. Zwróć uwagę, że gry mogą twierdzić, że wymagają określonej wersji DirectX, ale niekoniecznie wymagają procesora graficznego zgodnego z pełną specyfikacją tej wersji, ponieważ programiści mogą używać wyższej wersji interfejsu API DirectX, aby kierować sprzęt o niższej specyfikacji Direct3D; na przykład DirectX 9 ujawnia funkcje sprzętu na poziomie DirectX7, których nie posiadał DirectX7, kierując się ich stałymi funkcjami potoku T&L.
Porównanie shaderów pikseli
Wersja Pixel Shader | 1,0 do 1,3 | 1,4 | 2,0 | 2.0a | 2.0b | 3,0 | 4,0 4,1 5,0 |
---|---|---|---|---|---|---|---|
Zależny limit tekstury | 4 | 6 | 8 | bez limitu | 8 | bez limitu | bez limitu |
Limit instrukcji tekstury | 4 | 6*2 | 32 | bez limitu | bez limitu | bez limitu | bez limitu |
Rejestr pozycji | Nie | Nie | Nie | Nie | Nie | tak | tak |
Gniazda instrukcji | 8+4 | 8+4 | 32 + 64 | 512 | 512 | ≥ 512 | ≥ 65536 |
Wykonane instrukcje | 8+4 | 6*2+8*2 | 32 + 64 | 512 | 512 | 65536 | bez limitu |
Pośrednie tekstury | 4 | 4 | 4 | bez limitu | 4 | bez limitu | bez limitu |
Rejestry interpolowane | 2 + 4 | 2 + 6 | 2 + 8 | 2 + 8 | 2 + 8 | 10 | 32 |
Przewidywanie instrukcji | Nie | Nie | Nie | tak | Nie | tak | Nie |
Indeksowe rejestry wejściowe | Nie | Nie | Nie | Nie | Nie | tak | tak |
Rejestry temp | 2 | 6 | 12 do 32 | 22 | 32 | 32 | 4096 |
Rejestry stałe | 8 | 8 | 32 | 32 | 32 | 224 | 16×4096 |
Dowolne swizzling | Nie | Nie | Nie | tak | Nie | tak | tak |
Gradient instrukcje | Nie | Nie | Nie | tak | Nie | tak | tak |
Rejestr liczników pętli | Nie | Nie | Nie | Nie | Nie | tak | tak |
Rejestr twarzy (oświetlenie dwustronne) | Nie | Nie | Nie | Nie | tak | tak | tak |
Dynamiczna kontrola przepływu | Nie | Nie | Nie | Nie | Nie | Tak (24) | Tak (64) |
Operatory bitowe | Nie | Nie | Nie | Nie | Nie | Nie | tak |
Natywne liczby całkowite | Nie | Nie | Nie | Nie | Nie | Nie | tak |
- PS 1.0 — Nieopublikowany Rampage 3dfx , DirectX 8.
- PS 1.1 — GeForce 3 , DirectX 8.
- PS 1.2 — 3Dlabs Wildcat wiceprezes, 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 — model zoptymalizowany pod kątem GeForce FX/PCX , DirectX 9.0a.
- Model cieniowania 2.0b — model cieniowania Radeon X700-X850 , DirectX 9.0b.
- Shader Model 3.0 — Radeon X1000 i GeForce 6 , DirectX 9.0c.
- Shader Model 4.0 — Radeon HD 2000 i GeForce 8 , DirectX 10.
- Shader Model 4.1 — Radeon HD 3000 i GeForce 200 , DirectX 10.1.
- Shader Model 5.0 — Radeon HD 5000 i GeForce 400 , DirectX 11.
- Shader Model 5.1 — GCN 1+ , Fermi+, DirectX 12 (11_0+) z WDDM 2.0.
- Shader Model 6.0 — GCN 1+, Kepler+, DirectX 12 (11_0+) z WDDM 2.1.
- Shader Model 6.1 — GCN 1+, Kepler+, DirectX 12 (11_0+) z WDDM 2.3.
- Shader Model 6.2 — GCN 1+, Kepler+, DirectX 12 (11_0+) z WDDM 2.4.
- Shader Model 6.3 — GCN 1+, Kepler+, DirectX 12 (11_0+) z WDDM 2.5.
- Shader Model 6.4 — GCN 1+, Kepler+, Skylake+, DirectX 12 (11_0+) z WDDM 2.6.
- Shader Model 6.5 — GCN 1+, Kepler+, Skylake+, DirectX 12 (11_0+) z WDDM 2.7.
- Shader Model 6.6 — GCN 1+, Kepler+, Skylake+, DirectX 12 (11_0+) z WDDM 2.9.
„32 + 64” dla instrukcji wykonywanych oznacza „32 instrukcje tekstur i 64 instrukcje arytmetyczne”.
Porównanie Vertex Shader
Wersja Vertex Shader | W porównaniu z 1.1 | VS 2.0 | VS 2.0a | VS 3.0 | VS 4.0 VS 4.1 VS 5.0 |
---|---|---|---|---|---|
Liczba miejsc na instrukcje | 128 | 256 | 256 | ≥ 512 | ≥ 65536 |
Maksymalna liczba wykonanych instrukcji | 128 | 1024 | 65536 | 65536 | bez limitu |
Przewidywanie instrukcji | Nie | Nie | tak | tak | tak |
Rejestry temp | 12 | 12 | 16 | 32 | 4096 |
# rejestry stałe | ≥ 96 | ≥ 256 | 256 | ≥ 256 | 16×4096 |
Statyczna kontrola przepływu | Nie | tak | tak | tak | tak |
Dynamiczna kontrola przepływu | Nie | Nie | tak | tak | tak |
Głębokość dynamicznej kontroli przepływu | Nie dotyczy | Nie dotyczy | 24 | 24 | 64 |
Pobieranie tekstury wierzchołków | Nie | Nie | Nie | tak | tak |
# próbników tekstur | Nie dotyczy | Nie dotyczy | Nie dotyczy | 4 | 128 |
Geometria Instancing wsparcie | Nie | Nie | Nie | tak | tak |
Operatory bitowe | Nie | Nie | Nie | Nie | tak |
Natywne liczby całkowite | Nie | Nie | Nie | Nie | tak |
Zobacz też
Przypisy
Linki zewnętrzne
- Przewodnik programowania dla HLSL w Microsoft Docs
- Wprowadzenie do języka DirectX 9 High Level Shading Language (ATI) Centrum programistów AMD
- Wprowadzenie i samouczek HLSL firmy Riemer (zawiera przykładowy kod)
- Wprowadzenie do HLSL
- Specyfikacja języka pośredniego DirectX (DXIL)