Die High-Level Shading Language (HLSL) ist die Shader-Sprache von Microsoft für Direct3D. Sie entstand ab 2002 mit DirectX 9, als die feste Render-Pipeline durch programmierbare Shader ersetzt wurde, und wurde gemeinsam mit Nvidias Cg entwickelt — beide Sprachen sind C-ähnlich und teilen viele Konzepte. Seit Direct3D 10 ist HLSL die Pflicht-Sprache der einheitlichen Shader-Pipeline und wird bis heute in Direct3D 12 eingesetzt.

Shader-Modelle

HLSL-Features werden über Shader-Modelle (SM) gestuft, die an die DirectX-Version gekoppelt sind:

  • SM 2.0/3.0: DirectX 9, erste voll programmierbare Pixel-/Vertex-Shader
  • SM 5.0: DirectX 11, Tessellation und Compute-Shader
  • SM 6.x: DirectX 12, u. a. SM 6.5 mit Raytracing (DXR) und Mesh-Shadern

Grundgerüst

HLSL arbeitet mit Semantics (z. B. POSITION, SV_Position, SV_Target), die Datenströme zwischen Pipeline-Stufen verbinden. Konstante Daten liegen in Constant Buffers.

cbuffer ConstantBuffer : register(b0) {
    float4x4 WorldViewProjection;
};
struct VS_INPUT {
    float3 pos : POSITION;
};
float4 main(VS_INPUT input) : SV_Position {
    return mul(float4(input.pos, 1.0), WorldViewProjection);
}

Wichtige Bausteine

  • Typen: float2/float3/float4, float4x4, Texture2D, SamplerState
  • System-Values: SV_VertexID, SV_InstanceID, SV_IsFrontFace, SV_Depth — erzeugt die Hardware selbst
  • Intrinsics: mul, lerp, saturate, dot, normalize, Texturabtastung mit Sample
  • Kontrollstrukturen wie in C: if, for, while, switch, discard

Compiler

Der klassische Compiler fxc.exe erzeugt DXBC und unterstützt bis Shader Model 5.1. Der moderne Open-Source-Compiler DXC (DirectXShaderCompiler, LLVM-basiert) übersetzt HLSL nach DXIL und kann zusätzlich SPIR-V für Vulkan ausgeben.

HLSL ist das DirectX-Pendant zu GLSL (OpenGL) und teilt sich mit Cg (Nvidia) die C-ähnliche Basis. Was eine GPU dabei leistet und wie der Grafikspeicher VRAM genutzt wird, erklären die verlinkten Artikel.