dcl_semantics (sm3 - ps asm)

声明顶点着色器输出与像素着色器输入之间的关联。

语法

dcl_semantics [_centroid] dst[.write_mask]

 

其中:

  • _semantics:标识预期数据使用情况,可以是 D3DDECLUSAGE 中的任何值(不带 D3DDECLUSAGE_ 前缀)。 此外,可以将整数索引追加到语义中,以区分使用类似语义的参数。
  • [_Centroid] 是可选的指令修饰符。 它在声明输入寄存器的 dcl_usage 指令以及纹理查找指令上受支持。 质心不会追加任何空格。
  • dst:目标寄存器。 请参阅 ps_3_0 寄存器
  • write_mask:可以多次声明同一输出寄存器,每次使用唯一的写入掩码(因此可以将不同的语义应用于各个组件)。 但在声明中不能多次使用同一语义。 这意味着向量必须是四个分量或更少,并且不能跨越四分量的寄存器边界(单个输出寄存器)。 使用 _psize 语义时,由于它被视为标量,因此应具有完整的写入掩码。 使用 _position 语义时,由于必须写入所有四个分量,因此它应具有完整的写入掩码。

注解

像素着色器版本 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
dcl_usage x x

 

所有 dcl_usage 指令必须显示在第一个可执行指令之前。

声明示例

ps_3_0

; Declaring inputs
dcl_normal      v0.xyz
dcl_blendweight v0.w ; Must be same reg# as normal, matching vshader packing
dcl_texcoord1   v1.y ; Mask can be any subset of mask from vshader semantic
dcl_texcoord0   v1.zw; Has to be same reg# as texcoord1, to match vshader

; Declaring samplers
dcl_2d s0
dcl_2d s1

def c0, 0, 0, 0, 0

mov r0.x, v1.y ; texcoord1
mov r0.y, c0
texld r0, r0, s0

texld r1, v1.zw, s1
...
(output regs in ps_3_0 are same as ps_2_0: oC0-oC3, oDepth)

像素着色器指令

抗锯齿示例