High-Level Shader Language
| Cg/HLSL | |
|---|---|
A scene containing several different 2D HLSL shaders. Distortion of the statue is achieved purely physically, while the texture of the rectangular frame beside it is based on color intensity. The square in the background has been transformed and rotated. The partial transparency and reflection of the water in the foreground are added by a shader applied finally to the entire scene. | |
| Family | shading language |
| Developer | nVIDIA, Microsoft |
| Dialects | |
| Cg, HLSL, Playstation Shading Language, ReShadeFX, Slang | |
| Influenced by | |
| C, RenderMan Shading Language | |
| Influenced | |
| GLSL | |
The High-Level Shader Language or High-Level Shading Language (HLSL) is a proprietary shading language developed by Microsoft for the Direct3D 9 API to augment the shader assembly language, and went on to become the required shading language for the unified shader model of Direct3D 10 and higher. It was developed alongside the Cg (short for C for Graphics) shading language from Nvidia. Early versions of the two languages were considered identical, only marketed differently.
Although Cg and HLSL share the same core syntax, some features of C were modified and new data types were added to make Cg/HLSL more suitable for programming graphics processing units.
Two main branches of the Cg/HLSL language exist: the Nvidia Cg compiler (cgc) which outputs DirectX or OpenGL and the Microsoft HLSL which outputs DirectX shaders in bytecode format. Nvidia's cgc was deprecated in 2012, with no additional development or support available.
HLSL shaders can enable many special effects in both 2D and 3D computer graphics.
- The Cg/HLSL language originally only included support for vertex shaders and pixel shaders ("fragment" in GLSL). A vertex shader is executed for each vertex that is submitted by the application, and is primarily responsible for transforming the vertex from object space to view space, generating texture coordinates, and calculating lighting coefficients such as the vertex's normal, tangent, and bitangent vectors. When a group of vertices (normally 3, to form a triangle) come through the vertex shader, their output position is interpolated to form pixels within its area; this process is known as rasterization.
- DirectX 10 (Shader Model 4) and Cg 2.0 introduced geometry shaders. This shader takes as its input some vertices of a primitive (triangle/line/point) and uses this data to generate/degenerate (or tessellate) additional primitives or to change the type of primitives, which are each then sent to the rasterizer.
- DirectX 11 (Shader Model 5) introduced compute shaders (GPGPU) and tessellation shaders (hull and domain). The latter is present in Cg 3.1.
- DirectX 12 (Shader Model 6.3) introduced ray tracing shaders (ray generation, intersection, any hit / closest hit / miss).
D3D11.3 and D3D12 introduced Shader Model 5.1 and later 6.0.