高级着色器语言

-{zh-hans:高級;zh-tw:高階;}-着色器语言（即 HLSL，缩写自  或 ），是由微軟擁有及開發的一種着色器語言，最初的开发是为了辅助 Direct3D 9 的着色器-{zh-hans:汇编语言;zh-tw:組合語言;}-，后成为 Direct3D 10 以来所必须的语言。

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

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

 Shader model 比較 
 Pixel shader 比較 
 Pixel shader 版本1.0 to 1.3
      1.4      2.0      2.0a      2.0b      3.0Shader Model 3.0, Ashu Rege, NVIDIA Developer Technology Group, 2004.      4.0The Direct3D 10 System, David Blythe, Microsoft Corporation, 2006.      4.1      5.0Dependent texture limit4           6            8           Unlimited    8           Unlimited   Unlimited   Unlimited   UnlimitedTexture instruction limit4           6*2           32          Unlimited   Unlimited   Unlimited   Unlimited   Unlimited   UnlimitedPosition register No          No            No          No          No          Yes         Yes          Yes          YesInstruction slots8+4         8+4           32 + 64     512         512        ≥ 512    ≥ 65536    ≥ 65536    ≥ 65536Executed instructions8+4         6*2+8*2           32 + 64     512         512         65536   Unlimited   Unlimited   UnlimitedTexture indirections4           4           4           Unlimited    4           Unlimited     Unlimited     Unlimited     UnlimitedInterpolated registers2 + 8       2 + 8           2 + 8       2 + 8       2 + 8       10          32          32          32Instruction predicationNo          No           No          Yes         No          Yes         No         No         NoIndex input registersNo          No           No          No          No          Yes         Yes         Yes         YesTemp registers2           6           12 to 32          22          32          32          4096          4096          4096Constant registers8           8           32          32          32          224         16x4096         16x4096         16x4096Arbitrary swizzlingNo          No           No          Yes         No          Yes         Yes         Yes         YesGradient instructionsNo          No           No          Yes         No          Yes         Yes         Yes         YesLoop count registerNo          No           No          No          No          Yes         Yes         Yes         YesFace register (2-sided lighting)No          No           No          No          No          Yes         Yes         Yes         YesDynamic flow controlNo          No           No          No          No          24          Yes          Yes          YesBitwise OperatorsNo          No           No          No          No          No          Yes          Yes          YesNative IntegersNo          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
      VS 2.0      VS 2.0a      VS 3.0    VS 4.0 VS 4.1 VS 5.0# of instruction slots128         256         256         ≥ 512     4096     4096     4096Max # of instructions executedUnknown         65536         65536       65536     65536     65536     65536Instruction predication No          No          Yes         Yes      Yes      Yes      YesTemp registers12          12          13          32        4096        4096        4096# constant registers≥ 96       ≥ 256       ≥ 256       ≥ 256     16x4096     16x4096     16x4096Static flow control ???         Yes         Yes         Yes       Yes       Yes       YesDynamic flow control No          No          Yes         Yes       Yes       Yes       YesDynamic flow control depthNo          No          24          24         Yes         Yes         YesVertex texture fetchNo          No          No          Yes        Yes        Yes        Yes# of texture samplersN/A         N/A         N/A         4         128         128         128Geometry instancing supportNo          No          No          Yes       Yes       Yes       YesBitwise operatorsNo          No          No          No        Yes        Yes        YesNative integersNo          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.Radeon X1000 series lacks 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;
}

 注釋 

 外部連結 
 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 

Category:操作系统技术
Category:三维计算机图形学
Category:著色器語言