Remove ads
来自维基百科,自由的百科全书
高级着色器语言(即 HLSL,缩写自 High Level Shader Language[1] 或 High-Level Shading Language[2]),是由微软拥有及开发的一种着色器语言,最初的开发是为了辅助 Direct3D 9 的着色器汇编语言,后成为 Direct3D 10 以来统一着色器模型所必须的语言。
HLSL只能供微软的Direct3D以及XNA使用。HLSL是GLSL的先辈,不能与OpenGL标准兼容。它跟Nvidia的Cg非常相似,是因为两个开发者曾经紧密合作。[3]
HLSL的主要作用为将一些复杂的图像处理,快速而又有效率地在显卡上完成,与组合式或低阶Shader Language相比,能降低在编写复杂特殊效果时所发生编程错误的机会。
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 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 |
"32 + 64" for Executed Instructions means "32 texture instructions and 64 arithmetic instructions."
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 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 |
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;
}
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.