High Level Shading Language
以下の表はハードウェアが対応しているDirectXバージョンと、そのハードウェアがサポートする各シェーダーステージの最上位バージョン(プロファイル)間の関係を示している。 後述するように、実行可能なシェーダープログラムの最大命令数やレジスタ数、リソーススロット数などは新しいバージョンのほうが大きくなり、より柔軟で長大なプログラムを記述することができるようになる。
なおコンピュートシェーダー(DirectCompute)はDirectX 11にて導入されたステージであり、DirectX 10 APIを経由して利用することはできないが、ドライバーが対応していればDirectX 10.x世代のハードウェア上でもDirectX 11 APIを経由してダウンレベル(機能制限付き)のコンピュートシェーダーを実行することが可能となる。
シェーダーモデル5.1はDirectX 12 APIをドライバーレベルでサポートするすべてのハードウェア(機能レベル11_0以上が必須)で使用可能だが、Root Signatureに関する機能はDirectX 11.3では使用できず、DirectX 12専用の機能となる。また、ROV (Rasterizer Order View) に関するオブジェクトは、ROV対応ハードウェアでしか使用できない。
シェーダーモデル6.0の組み込み関数は機能レベル12_0の要件として追加されている。
HLSLの基本的な文法はC/C++に準ずるが、グラフィックスプログラムを記述するのに適した専用のベクトル・行列型や関数を備えている。数学関数の中にはC/C++標準ライブラリと同様のものも含まれる。また、Direct3D 10ではAPIの大幅な設計変更が行なわれたこともあり、Direct3D 9用のHLSLと比較して、Direct3D 10以降用のHLSLではオブジェクト指向に基づいた言語仕様の再設計がなされ、多数の仕様変更が加えられている。
Direct3D 10以降ではHLSLにてクラスを定義し、C++のようにデータ(メンバー変数)と振る舞い(メンバー関数)を関連付けることが可能だが、アクセス指定子によるカプセル化や継承および仮想関数といった機能は備えていない。
Direct3D 11ではシェーダーの組み合わせ爆発問題を解消するべく、HLSLにてインターフェイスの定義と実装によるポリモーフィズムを疑似的に実現する「動的シェーダーリンク(Dynamic Shader Linkage)」と呼ばれる機能が追加された。