例如,VS 阶段可能查找实例 ID 以便为着色器获取更多每顶点数据,或者执行其他操作;GS 和 PS 阶段可能使用基元 ID 以相同的方式获取每基元数据。
VertexID
顶点 ID 由每个着色器阶段用于标识每个顶点。 它是默认值为 0 的 32 位无符号整数。 它在基元由输入装配器 (IA) 阶段处理时分配给顶点。 将顶点 ID 语义附加到着色器输入声明以通知 IA 阶段生成每顶点 ID。
IA 会将顶点 ID 添加到每个顶点以供着色器阶段使用。 每调用一次绘制,顶点 ID 就增加 1。 对于所有已建立索引的绘制调用,计数将重置回起始值。 如果顶点 ID 溢出(超过 2³²– 1),它将回到 0。
对于所有基元类型,顶点都有与之关联的顶点 ID(无论邻近度如何)。
PrimitiveID
基元 ID 由每个着色器阶段用于标识每个基元。 它是默认值为 0 的 32 位无符号整数。 它在基元由输入装配器 (IA) 阶段处理时分配给基元。 要通知 IA 阶段生成基元 ID,请将基元 ID 语义附加到着色器输入声明。
IA 阶段会将基元 ID 添加到每个基元以供几何着色器 (GS) 阶段或顶点着色器 (VS) 阶段使用(取在 IA 阶段后先进入活动状态的阶段)。 每调用一次已建立索引的绘制,基元 ID 就增加 1,但是,每当新实例开始时,基元 ID 就会重置为 0。 所有其他绘制调用都不会更改实例 ID 的值。 如果实例 ID 溢出(超过 2³²– 1),它将回到 0。
像素着色器 (PS) 阶段对于基元 ID 没有单独的输入;但是,指定基元 ID 的任何像素着色器输入都使用恒定的内插模式。
不支持为相邻的基元自动生成基元 ID。 对于带邻近度的基元类型(如带邻近度的三角形),基元 ID 仅为内部基元(非相邻基元)保留,就像不带邻近度的三角形带中的基元集一样。
InstanceID
实例 ID 由每个着色器阶段用于标识当前正在处理的几何图形的实例。 它是默认值为 0 的 32 位无符号整数。
如果顶点着色器输入声明包含实例 ID 语义,输入装配器 (IA) 阶段会将实例 ID 添加到每个顶点。 每调用一次已建立索引的绘制,实例 ID 就增加 1。 所有其他绘制调用都不会更改实例 ID 的值。 如果实例 ID 溢出(超过 2³²– 1),它将回到 0。