?/TD> |
Microsoft DirectX 9.0 |
The various types of output registers have been collapsed into 12 o (output) registers (2 for color, 8 for texture, 1 for position, and 1 for fog and point size). These can be used for anything the user wants to interpolate for the pixel shader: texture coordinates, colors, fog, etc.
Output declarations are introduced, whereby semantics are assigned to each register. Old oPos and oPts are replaced by declaring an o register with a position or pointsize semantic, further described here.
There are 12 "out" registers. Ten have 4-components (xyzw) (any 10, not necessarily o0 to o9), another one must be declared as position (all 4-components), and optionally one more can be a scalar point size.
The syntax for declaring outputs (o registers) is similar to the declarations for the inputs:
dcl_semantics o[.write_mask] |
Where:
Vertex shader versions | 3_0 | 3_sw |
---|---|---|
dcl_usage | x | x |
All dcl_usage instructions must appear before the first executable instruction.
vs_3_0 dcl_color4 o3.x // color4 is a semantic name. dcl_texcoord3 o3.yz // Different semantics can be packed into one register. dcl_fog o3.w dcl_tangent o4.xyz dcl_positiont o7.xyzw // positiont must be declared to some unique register // in a vertex shader, with all 4 components. dcl_psize o6 // Pointsize cannot have a mask // (that is, mask is full .xyzw) -> // This is an implied scalar register. // No other semantics can be assigned to any components // of this register. // If pointsize declaration is not used (typical), // only 11 "out" registers are available, not 12. // Pixel shaders cannot see this value.
Minimum operating system | Windows 98 |
---|