高级着色器语言

高级着色器语言(即 HLSL,缩写自 High Level Shader Language[1]High-Level Shading Language[2]),是由微軟擁有及開發的一種着色器語言,最初的开发是为了辅助 Direct3D 9 的着色器汇编语言,后成为 Direct3D 10 以来统一着色器模型英语Unified Shader Model所必须的语言。

HLSL只能供微軟的Direct3D以及XNA使用。HLSL是GLSL的先辈,不能與OpenGL標準兼容。它跟NvidiaCg非常相似,是因为两个开发者曾经紧密合作。[3]

HLSL的主要作用為將一些複雜的圖像處理,快速而又有效率地在顯示卡上完成,與組合式或低階Shader Language相比,能降低在編寫複雜特殊效果時所發生編程錯誤的機會。

Shader model 比較编辑

Pixel shader 比較编辑

Pixel shader 版本1.0 to 1.3[4]1.4[4]2.0[4][5]2.0a[4][5]2.0b[4][5]3.0[4][6]4.0[7]4.1[8]5.0[9]
Dependent texture limit468Unlimited8UnlimitedUnlimitedUnlimitedUnlimited
Texture instruction limit46*232UnlimitedUnlimitedUnlimitedUnlimitedUnlimitedUnlimited
Position registerNoNoNoNoNoYesYesYesYes
Instruction slots8+48+432 + 64512512≥ 512≥ 65536≥ 65536≥ 65536
Executed instructions8+46*2+8*232 + 6451251265536UnlimitedUnlimitedUnlimited
Texture indirections444Unlimited4UnlimitedUnlimitedUnlimitedUnlimited
Interpolated registers2 + 82 + 82 + 82 + 82 + 810323232
Instruction predicationNoNoNoYesNoYesNoNoNo
Index input registersNoNoNoNoNoYesYesYesYes
Temp registers2612 to 32223232409640964096
Constant registers8832323222416x409616x409616x4096
Arbitrary swizzlingNoNoNoYesNoYesYesYesYes
Gradient instructionsNoNoNoYesNoYesYesYesYes
Loop count registerNoNoNoNoNoYesYesYesYes
Face register (2-sided lighting)NoNoNoNoNoYesYesYesYes
Dynamic flow controlNoNoNoNoNo24YesYesYes
Bitwise OperatorsNoNoNoNoNoNoYesYesYes
Native IntegersNoNoNoNoNoNoYesYesYes
  • 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[10]VS 2.0[5][10]VS 2.0a[5][10]VS 3.0[6][10]VS 4.0[7]VS 4.1[11]VS 5.0[9]
# of instruction slots128256256≥ 512409640964096
Max # of instructions executedUnknown655366553665536655366553665536
Instruction predicationNoNoYesYesYesYesYes
Temp registers12121332409640964096
# constant registers≥ 96≥ 256≥ 256≥ 25616x409616x409616x4096
Static flow control???YesYesYesYesYesYes
Dynamic flow controlNoNoYesYesYesYesYes
Dynamic flow control depthNoNo2424YesYesYes
Vertex texture fetchNoNoNoYesYesYesYes
# of texture samplersN/AN/AN/A4128128128
Geometry instancing supportNoNoNoYesYesYesYes
Bitwise operatorsNoNoNoNoYesYesYes
Native integersNoNoNoNoYesYesYes
  • 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.[12]
  • 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;}

注釋编辑

  1. ^ Writing HLSL Shaders in Direct3D 9 (Windows). msdn.microsoft.com. [2018-06-25]. (原始内容存档于2018-06-25). 
  2. ^ HLSL. MSDN. Microsoft. [5 January 2015]. (原始内容存档于2018-06-25). 
  3. ^ Fusion Industries :: Cg and HLSL FAQ ::. 24 August 2012. (原始内容存档于24 August 2012). 
  4. ^ 4.0 4.1 4.2 4.3 4.4 4.5 Pixel Shader Differences. msdn.microsoft.com. 2011-02-08 [2014-08-28]. (原始内容存档于2013-03-16). 
  5. ^ 5.0 5.1 5.2 5.3 5.4 Peeper, Craig. Microsoft DirectX High Level Shader Language (HLSL) (PPT). microsoft.com: 5–8, 24–25. 2004-03-15. [永久失效連結]
  6. ^ 6.0 6.1 Shader Model 3.0, Ashu Rege, NVIDIA Developer Technology Group, 2004.
  7. ^ 7.0 7.1 The Direct3D 10 System, David Blythe, Microsoft Corporation, 2006.
  8. ^ 存档副本. [2014-08-28]. (原始内容存档于2015-12-01). 
  9. ^ 9.0 9.1 存档副本. [2014-08-28]. (原始内容存档于2013-09-09). 
  10. ^ 10.0 10.1 10.2 10.3 Vertex Shader Differences. msdn.microsoft.com. 2011-02-08 [2014-08-28]. (原始内容存档于2013-03-14). 
  11. ^ 存档副本. [2014-08-28]. (原始内容存档于2014-05-16). 
  12. ^ Radeon X1000 series lacks vertex texture fetch[1]页面存档备份,存于互联网档案馆

外部連結编辑