高级着色器语言
高级着色器语言(即 HLSL,缩写自 High Level Shader Language[1] 或 High-Level Shading Language[2]),是由微軟擁有及開發的一種着色器語言,最初的开发是为了辅助 Direct3D 9 的着色器汇编语言,后成为 Direct3D 10 以来统一着色器模型所必须的语言。
HLSL只能供微軟的Direct3D以及XNA使用。HLSL是GLSL的先辈,同時不能與OpenGL標準兼容。他跟Nvidia的Cg非常相似。
HLSL的主要作用為將一些複雜的圖像處理,快速而又有效率地在顯示卡上完成,與組合式或低階Shader Language相比,能降低在編寫複雜特殊效果時所發生編程錯誤的機會。
目录
1 Shader model 比較
1.1 Pixel shader 比較
1.2 Vertex shader 比較
2 範例
3 注釋
4 外部連結
Shader model 比較
Pixel shader 比較
| Pixel shader 版本 | 1.0 to 1.3[3] | 1.4[3] | 2.0[3][4] | 2.0a[3][4] | 2.0b[3][4] | 3.0[3][5] | 4.0[6] | 4.1[7] | 5.0[8] |
|---|---|---|---|---|---|---|---|---|---|
| Dependent texture limit | 4 | 6 | 8 | Unlimited | 8 | Unlimited | Unlimited | Unlimited | Unlimited |
| Texture instruction limit | 4 | 6*2 | 32 | Unlimited | Unlimited | Unlimited | Unlimited | Unlimited | Unlimited |
| Position register | No | No | No | No | No | Yes | Yes | Yes | Yes |
| Instruction slots | 8+4 | 8+4 | 32 + 64 | 512 | 512 | ≥ 512 | ≥ 65536 | ≥ 65536 | ≥ 65536 |
| Executed instructions | 8+4 | 6*2+8*2 | 32 + 64 | 512 | 512 | 65536 | Unlimited | Unlimited | Unlimited |
| Texture indirections | 4 | 4 | 4 | Unlimited | 4 | Unlimited | Unlimited | Unlimited | Unlimited |
| Interpolated registers | 2 + 8 | 2 + 8 | 2 + 8 | 2 + 8 | 2 + 8 | 10 | 32 | 32 | 32 |
| Instruction predication | No | No | No | Yes | No | Yes | No | No | No |
| Index input registers | No | No | No | No | No | Yes | Yes | Yes | Yes |
| Temp registers | 2 | 6 | 12 to 32 | 22 | 32 | 32 | 4096 | 4096 | 4096 |
| Constant registers | 8 | 8 | 32 | 32 | 32 | 224 | 16x4096 | 16x4096 | 16x4096 |
| Arbitrary swizzling | No | No | No | Yes | No | Yes | Yes | Yes | Yes |
| Gradient instructions | No | No | No | Yes | No | Yes | Yes | Yes | Yes |
| Loop count register | No | No | No | No | No | Yes | Yes | Yes | Yes |
| Face register (2-sided lighting) | No | No | No | No | No | Yes | Yes | Yes | Yes |
| Dynamic flow control | No | No | No | No | No | 24 | Yes | Yes | Yes |
| Bitwise Operators | No | No | No | No | No | No | Yes | Yes | Yes |
| Native Integers | No | No | No | No | No | No | Yes | Yes | Yes |
PS 2.0 = DirectX 9.0 original Shader Model 2 specification.
PS 2.0a = NVIDIA GeForce FX-optimized model.
PS 2.0b = ATI Radeon X700, X800, X850 shader model, DirectX 9.0b.
PS 3.0 = Shader Model 3.0.
PS 4.0 = Shader Model 4.0.
PS 4.1 = Shader Model 4.1.
PS 5.0 = Shader Model 5.0.
"32 + 64" for Executed Instructions means "32 texture instructions and 64 arithmetic instructions."
Vertex shader 比較
| Vertex shader 版本 | VS 1.1[9] | VS 2.0[4][9] | VS 2.0a[4][9] | VS 3.0[5][9] | VS 4.0[6] | VS 4.1[10] | VS 5.0[8] |
|---|---|---|---|---|---|---|---|
| # of instruction slots | 128 | 256 | 256 | ≥ 512 | 4096 | 4096 | 4096 |
| Max # of instructions executed | Unknown | 65536 | 65536 | 65536 | 65536 | 65536 | 65536 |
Instruction predication | No | No | Yes | Yes | Yes | Yes | Yes |
| Temp registers | 12 | 12 | 13 | 32 | 4096 | 4096 | 4096 |
| # constant registers | ≥ 96 | ≥ 256 | ≥ 256 | ≥ 256 | 16x4096 | 16x4096 | 16x4096 |
| Static flow control | ??? | Yes | Yes | Yes | Yes | Yes | Yes |
| Dynamic flow control | No | No | Yes | Yes | Yes | Yes | Yes |
| Dynamic flow control depth | No | No | 24 | 24 | Yes | Yes | Yes |
| Vertex texture fetch | No | No | No | Yes | Yes | Yes | Yes |
| # of texture samplers | N/A | N/A | N/A | 4 | 128 | 128 | 128 |
Geometry instancing support | No | No | No | Yes | Yes | Yes | Yes |
| Bitwise operators | No | No | No | No | Yes | Yes | Yes |
| Native integers | No | No | No | No | Yes | Yes | Yes |
VS 2.0 = DirectX 9.0 original Shader Model 2 specification.
VS 2.0a = NVIDIA GeForce FX-optimized model.
VS 3.0 = Shader Model 3.0.
- 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.[來源請求]
- 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.0.
VS 4.1 = Shader Model 4.1.
VS 5.0 = Shader Model 5.0.
範例
- 灰階貼圖用
- 灰階值 = 0.3 x 紅 + 0.59 x 綠 + 0.11 x 藍
sampler2D Texture0;
float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR
{
float4 _inColor = tex2D( Texture0, texCoord );
float gray = 0.3*_inColor.x + 0.59*_inColor.y + 0.11*_inColor.z;
float4 _outColor = float4(gray, gray, gray, 1.0);
return _outColor;
}
注釋
^ Writing HLSL Shaders in Direct3D 9 (Windows). msdn.microsoft.com.
^ HLSL. MSDN. Microsoft. [5 January 2015].
^ 3.03.13.23.33.43.5 Pixel Shader Differences. msdn.microsoft.com. 2011-02-08.
^ 4.04.14.24.34.4 Peeper, Craig. Microsoft DirectX High Level Shader Language (HLSL) (PPT). microsoft.com: 5–8, 24–25. 2004-03-15. [永久失效連結]
^ 5.05.1 Shader Model 3.0, Ashu Rege, NVIDIA Developer Technology Group, 2004.
^ 6.06.1 The Direct3D 10 System, David Blythe, Microsoft Corporation, 2006.
^ http://msdn.microsoft.com/en-us/library/windows/desktop/ff471379(v=vs.85).aspx
^ 8.08.1 http://msdn.microsoft.com/en-us/library/windows/desktop/hh447212(v=vs.85).aspx
^ 9.09.19.29.3 Vertex Shader Differences. msdn.microsoft.com. 2011-02-08.
^ http://msdn.microsoft.com/en-us/library/windows/desktop/ff471381(v=vs.85).aspx
外部連結
Introduction to the DirectX 9 High-Level Shader Language (MSDN Library)- HLSL Introduction
- Shader Model Comparison at Beyond3D
- Riemer's HLSL Introduction & Tutorial with lots of sample code
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

Comments
Post a Comment