Direct3D 着色器代码像素着色器代码遵循命令流中的D3DHAL_DP2CREATEPIXELSHADER结构。 对于 DirectX 8.1 及更早版本顶点着色器代码遵循D3DHAL_DP2CREATEVERTEXSHADER结构。 对于 DirectX 9.0 及更高版本顶点着色器代码遵循D3DHAL_DP2CREATEVERTEXSHADERFUNC结构。 运行时在调用驱动程序的 D3dDrawPrimitives2 函数时创建像素或顶点着色器。 若要创建像素着色器运行时使用D3DDP2OP_CREATEPIXELSHADER作代码调用 D3dDrawPrimitives2。 若要在 DirectX 8.1 及更早版本中创建顶点着色器运行时使用D3DDP2OP_CREATEVERTEXSHADER作代码调用 D3dDrawPrimitives2。 若要在 DirectX 9.0 及更高版本中创建顶点着色器运行时使用 D3DDP2OP_CREATEVERTEXSHADERFUNC作代码调用 D3dDrawPrimitives2。着色器相对寻址支持相对寻址的像素和顶点着色器版本可以指定在目标和源参数令牌的第13位中使用相对寻址。 指定相对寻址时会有一个附加的 DWORD 令牌紧随目标或源参数令牌之后。请注意此相对寻址令牌仅适用于顶点着色器版本 2_0 及更高版本以及像素着色器版本 3_0 及更高版本。 相对寻址不适用于低于 3_0 的像素着色器版本。此相对寻址令牌的格式与目标或源参数令牌的格式相同并适用以下规则只能将D3DSPR_ADDR或D3DSPR_LOOP用作 注册类型。源参数令牌中的Swizzle位用于确定寄存器组件。位 31 为0x1。使用寄存器偏移量。所有其他位均未使用。地址寄存器和 aL 寄存器用于常量寄存器的相对寻址。着色器代码格式用于创建像素或顶点着色器的命令由一组着色器代码组成。 这些代码指示驱动程序如何创建着色器。 每个着色器代码中的标记格式决定了其唯一性。 着色器代码令牌是具有特定格式的 DWORD。DirectX3D 运行时在将代码传递给驱动程序之前验证着色器代码。 当着色器代码到达驱动程序时驱动程序可以解释代码因为代码的格式有效。 驱动程序读取着色器代码的令牌来解释代码。每个单独的着色器代码采用常规标记布局的格式。 第一个令牌必须是 版本令牌。 版本令牌提供代码的版本号还确定代码是用于像素还是顶点着色器。 着色器内容遵循版本令牌由各种 指令令牌组成可能与 注释令牌 和空格交织在一起。 根据指令令牌指定的精确操作标签、目标参数以及源参数令牌也可以是着色器内容的一部分并跟随在指令令牌之后。 例如如果指令令牌指定了ADD 指令驱动程序将确定该指令令牌后面有一个目标参数令牌和两个源参数令牌。 结束令牌用于完成着色器代码。设置说明例如D3DSIO_DCL和D3DSIO_DEF包含唯一格式的令牌。每个着色器指令都包含特定的标记格式。 着色器作代码部分描述了每个着色器指令的标记格式。着色器指令以主要指令开头以D3DSIO_RET或D3DSIO_END指令结尾。 子例程遵循D3DSIO_RET说明。