High Level Shader Language
Encyclopedia
The High Level Shader Language or High Level Shading Language (HLSL) is a proprietary shading language
developed by Microsoft
for use with the Microsoft Direct3D
API. It is analogous to the GLSL
shading language used with the OpenGL
standard. It is the same as the Nvidia
Cg shading language, as it was developed alongside it.
HLSL programs come in three forms, vertex shaders, geometry shaders, and pixel (or fragment) shaders. 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 tangent, binormal and normal 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 rasterisation
. Each of these pixels comes through the pixel shader, whereby the resultant screen colour is calculated.
Optionally, an application using a Direct3D 10 interface and Direct3D 10 hardware may also specify a geometry shader. This shader takes as its input the three vertices of a triangle and uses this data to generate (or tessellate) additional triangles, which are each then sent to the rasterizer.
"32 + 64" for Executed Instructions means "32 texture instructions and 64 arithmetic instructions."
Shading language
A shading language is a special programming language adapted to map on shader programming. Those kind of languages usually have special data types like color and normal...
developed by Microsoft
Microsoft
Microsoft Corporation is an American public multinational corporation headquartered in Redmond, Washington, USA that develops, manufactures, licenses, and supports a wide range of products and services predominantly related to computing through its various product divisions...
for use with the Microsoft Direct3D
Direct3D
Direct3D is part of Microsoft's DirectX application programming interface . Direct3D is available for Microsoft Windows operating systems , and for other platforms through the open source software Wine. It is the base for the graphics API on the Xbox and Xbox 360 console systems...
API. It is analogous to the GLSL
GLSL
OpenGL Shading Language , is a high-level shading language based on the syntax of the C programming language...
shading language used with the OpenGL
OpenGL
OpenGL is a standard specification defining a cross-language, cross-platform API for writing applications that produce 2D and 3D computer graphics. The interface consists of over 250 different function calls which can be used to draw complex three-dimensional scenes from simple primitives. OpenGL...
standard. It is the same as the Nvidia
NVIDIA
Nvidia is an American global technology company based in Santa Clara, California. Nvidia is best known for its graphics processors . Nvidia and chief rival AMD Graphics Techonologies have dominated the high performance GPU market, pushing other manufacturers to smaller, niche roles...
Cg shading language, as it was developed alongside it.
HLSL programs come in three forms, vertex shaders, geometry shaders, and pixel (or fragment) shaders. 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 tangent, binormal and normal 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 rasterisation
Rasterisation
Rasterisation is the task of taking an image described in a vector graphics format and converting it into a raster image for output on a video display or printer, or for storage in a bitmap file format....
. Each of these pixels comes through the pixel shader, whereby the resultant screen colour is calculated.
Optionally, an application using a Direct3D 10 interface and Direct3D 10 hardware may also specify a geometry shader. This shader takes as its input the three vertices of a triangle and uses this data to generate (or tessellate) additional triangles, which are each then sent to the rasterizer.
Pixel shader comparison
Pixel shader version | 1.0 to 1.3 1.4 | 2.0 | 2.0a | 2.0b | 3.0 | 4.0 | |
---|---|---|---|---|---|---|---|
Dependent texture limit | 4 | 6 | 8 | Unlimited | 8 | Unlimited | Unlimited |
Texture instruction limit | 4 | 6*2 | 32 | Unlimited | Unlimited | Unlimited | Unlimited |
Position register | No | No | No | No | No | Yes | Yes |
Instruction slots | 8+4 | 8+4 | 32 + 64 | 512 | 512 | ≥ 512 | ≥ 65536 |
Executed instructions | 8+4 | 6*2+8*2 | 32 + 64 | 512 | 512 | 65536 | Unlimited |
Texture indirections | 4 | 4 | 4 | Unlimited | 4 | Unlimited | Unlimited |
Interpolated registers | 2 + 8 | 2 + 8 | 2 + 8 | 2 + 8 | 2 + 8 | 10 | 32 |
Instruction predication | No | No | No | Yes | No | Yes | No |
Index input registers | No | No | No | No | No | Yes | Yes |
Temp registers | 2 | 6 | 12 to 32 | 22 | 32 | 32 | 4096 |
Constant registers | 8 | 8 | 32 | 32 | 32 | 224 | 16x4096 |
Arbitrary swizzling | No | No | No | Yes | No | Yes | Yes |
Gradient instructions | No | No | No | Yes | No | Yes | Yes |
Loop count register | No | No | No | No | No | Yes | Yes |
Face register (2-sided lighting) | No | No | No | No | No | Yes | Yes |
Dynamic flow control | No | No | No | No | No | 24 | Yes |
Bitwise Operators | No | No | No | No | No | No | Yes |
Native Integers | No | No | No | No | No | No | Yes |
- PS 2.0 = DirectX 9.0 original Shader Model 2 specification.
- PS 2.0a = NVIDIA GeForce FXGeForce FXThe GeForce FX or "GeForce 5" series is a line of graphics processing units from the manufacturer NVIDIA.-Overview:...
-optimized model. - PS 2.0b = ATI Radeon X700, X800, X850Radeon R420The Radeon R420 core from ATI Technologies was the company's basis for its 3rd-generation DirectX 9.0/OpenGL 2.0-capable graphics cards. Used first on the Radeon X800, R420 was produced on a 0.13 micrometer low-K process and used GDDR-3 memory...
shader model, DirectX 9.0b. - PS 3.0 = Shader Model 3.
- PS 4.0 = Shader Model 4.
"32 + 64" for Executed Instructions means "32 texture instructions and 64 arithmetic instructions."
Vertex shader comparison
Vertex shader version | VS 1.1 VS 2.0 | VS 2.0a | VS 3.0 | VS 4.0 | |
---|---|---|---|---|---|
# of instruction slots | 128 | 256 | 256 | ≥ 512 | 4096 |
Max # of instructions executed | Unknown | 65536 | 65536 | 65536 | 65536 |
Instruction predication Branch predication Branch predication is a strategy in computer architecture design for mitigating the costs usually associated with conditional branches, particularly branches to short sections of code... |
No | No | Yes | Yes | Yes |
Temp registers | 12 | 12 | 13 | 32 | 4096 |
# constant registers | ≥ 96 | ≥ 256 | ≥ 256 | ≥ 256 | 16x4096 |
Static Flow Control | ??? | Yes | Yes | Yes | Yes |
Dynamic Flow Control | No | No | Yes | Yes | Yes |
Dynamic Flow Control Depth | No | No | 24 | 24 | Yes |
Vertex Texture Fetch | No | No | No | Yes | Yes |
# of texture samplers | N/A | N/A | N/A | 4 | 128 |
Geometry instancing Geometry instancing In real-time computer graphics, geometry instancing is the practice of rendering multiple copies of the same mesh in a scene at once. This technique is primarily used for objects such as trees, grass, or buildings which can be represented as repeated geometry without appearing unduly repetitive,... support |
No | No | No | Yes | Yes |
Bitwise Operators | No | No | No | No | Yes |
Native Integers | No | No | No | No | Yes |
- VS 2.0 = DirectX 9.0 original Shader Model specification.
- VS 2.0a = NVIDIA GeForce FXGeForce FXThe GeForce FX or "GeForce 5" series is a line of graphics processing units from the manufacturer NVIDIA.-Overview:...
-optimized model. - VS 3.0 = Shader Model 3.
- Note that ATI X1000 series cards (e.g. X1900) does not support Vertex Texture Fetch, hence it does not fully comply with the VS 3.0 model. Instead, they offer a feature called "Render to Vertex Buffer (R2VB)" that provides functionality that is a superset of Vertex Texture Fetch.
- VS 4.0 = Shader Model 4.
External links
- Programming Guide for HLSL, from Microsoft
- Introduction to the DirectX 9 High Level Shading Language, (ATI) AMD developer central
- Riemer's HLSL Introduction & Tutorial (includes sample code)
- Simple HLSL Shader Tutorial
- HLSL Introduction