# High Level Shader Language

High Level Shader Language (HLSL) is een shading taal (niet te verwarren met een programmeertaal) die gebruikt wordt voor pixel shading van driedimensionale graphics in computerspellen en andere programma's in Windows.
HLSL werd geïntroduceerd in DirectX 9 (een verzameling van APIs die het programmeurs eenvoudiger maakt computerspellen te programmeren), als vervanging voor de Assembly-taal die daarvoor gebruikt werd (sinds DirectX 8), om meer complexe vertex- en pixel shaders te schrijven.
High Level Shader Language is een high level language zoals de programmeertaal C, waar het op gebaseerd is, maar het is meer gelimiteerd dan C omdat het toegespitst is op het programmeren van pixel shaders.
De taal werd nog verder ontwikkeld bij de release van DirectX 10.

## Pixel shader comparison

| | PS_2_0 | PS_2_a | PS_2_b | PS_3_0 | PS_4_0 |
| Dependent texture limiet | 4 | onbeperkt | 4 | onbeperkt | onbeperkt |
| Texture instructie limiet | 32 | onbeperkt | onbeperkt | onbeperkt | onbeperkt |
| Positie register | Nee | Nee | Nee | Ja | Ja |
| Instructie slots | 32 + 64 | 512 | 512 | ≥ 512 | ≥ 65536 |
| Uitgevoerde instructies | 32 + 64 | 512 | 512 | 65536 | onbeperkt |
| Texture indirecties | 4 | Onbeperkt | 4 | onbeperkt | onbeperkt |
| Interpolated registers | 2 + 8 | 2 + 8 | 2 + 8 | 10 | 32 |
| Instructie voorspelling | Nee | Ja | Nee | Ja | Nee |
| Inhoud invoer registers | Nee | Nee | Nee | Ja | Ja |
| Tijdelijke registers | 12 | 22 | 32 | 32 | 4096 |
| vaste registers | 32 | 32 | 32 | 224 | 16x4096 |
| Arbitrary swizzling | Nee | Ja | Nee | Ja | Ja |
| Gradient instructions | Nee | Ja | Nee | Ja | Ja |
| Loop teller register | Nee | Nee | Nee | Ja | Ja |
| gezicht register (2-sided lighting) | Nee | Nee | Nee | Ja | Ja |
| Dynamische volgcontrole | Nee | Nee | Nee | 24 | Ja |
| Bitwise Operators | Nee | Nee | Nee | Nee | Ja |
| Native Integers | Nee | Nee | Nee | Nee | Ja |
* PS_2_0 = DirectX 9.0 originele Shader Model 2 specificatie.
* PS_2_a = NVIDIA GeForce FX-geoptimaliseerd model.
* PS_2_b = ATI Radeon X700, X800, X850 shader model, DirectX 9.0b.
* PS_3_0 = Shader Model 3.
* PS_4_0 = Shader Model 4.
"32 + 64" voor Executed Instructions betekent "32 texture instructies en 64 arithmetic instructies."

## Vertex shader comparison

| | VS_2_0 | VS_2_a | VS_3_0 | VS_4_0 |
| # van instructies slots | 256 | 256 | ≥ 512 | 4096 |
| Max # van instructies uitvoering | 65536 | 65536 | 65536 | 65536 |
| Instructie Predicatie | Ja | Ja | Ja | Ja |
| Tijdelijke Registers | 12 | 13 | 32 | 4096 |
| # constant registers | ≥ 256 | ≥ 256 | ≥ 256 | 16x4096 |
| Static Flow Control | Ja | Ja | Ja | Ja |
| Dynamic Flow Control | Nee | Ja | Ja | Ja |
| Dynamische volgcontrole Diepte | Nee | 24 | 24 | Ja |
| Vertex Texture Fetch | Nee | Nee | Ja | KA |
| # of texture samplers | N/A | N/A | 4 | 128 |
| Geometry instancing ondersteuning | Nee | Nee | Ja | Ja |
| Bitwise Operators | Nee | Nee | Nee | Ja |
| Native Integers | Nee | Nee | Nee | Ja |
* VS_2_0 = DirectX 9.0 originele Shader Model 2 specificatie.
* VS_2_a = NVIDIA GeForce FX-geoptimaliseerd model.
* VS_3_0 = Shader Model 3.
* VS_4_0 = Shader Model 4.
* 1 2 Shader Model 3.0, Ashu Rege, NVIDIA Developer Technology Group, 2004.
* 1 2 The Direct3D 10 System, David Blythe, Microsoft Corporation, 2006.