使用System-Generated值
系统生成的值由 IA 阶段生成, (基于用户提供的输入 语义) ,以实现着色器操作的一定效率。
通过附加数据(例如 VS) 可见 (实例 ID、VS) 可见的顶点 ID (,或者 GS/PS) 可见 (基元 ID),后续着色器阶段可能会查找这些系统值来优化该阶段的处理。 例如,VS 阶段可能会查找实例 ID 来获取着色器的其他每个顶点数据或执行其他操作;GS 和 PS 阶段可能以相同的方式使用基元 ID 来抓取每个基元数据。
- VertexID
- PrimitiveID
- InstanceID
- 示例
- 相关主题
VertexID
每个着色器阶段使用顶点 ID 来标识每个顶点。 它是默认值为 0 的 32 位无符号整数。 当基元由 IA 阶段处理时,它将分配给顶点。 将顶点 ID 语义附加到着色器输入声明,以通知 IA 阶段生成每个顶点 ID。
IA 将向每个顶点添加一个顶点 ID,供着色器阶段使用。 对于每个绘图调用,顶点 ID 将递增 1。 对于所有已建立索引的绘制调用,计数将重置回起始值。 对于 ID3D11DeviceContext::D rawIndexed 和 ID3D11DeviceContext::D rawIndexedInstanced,顶点 ID 表示索引值。 如果顶点 ID 溢出 (超过 2² – 1) ,则它包装为 0。
对于所有基元类型,顶点都有一个与其关联的顶点 ID (,而不考虑相邻) 。
PrimitiveID
每个着色器阶段使用基元 ID 来标识每个基元。 它是默认值为 0 的 32 位无符号整数。 当基元由 IA 阶段处理时,它将分配给基元。 若要通知 IA 阶段生成基元 ID,请将基元 ID 语义附加到着色器输入声明。
IA 阶段将向每个基元添加一个基元 ID,供几何着色器或像素着色器阶段使用, (以 IA 阶段) 后的第一个活动阶段为准。 对于每个索引绘制调用,基元 ID 将递增 1,但是,每当新实例开始时,基元 ID 将重置为 0。 所有其他绘制调用不会更改实例 ID 的值。如果实例 ID 溢出 (超过 2² – 1) ,则它换行为 0。
像素着色器阶段没有针对基元 ID 的单独输入;但是,任何指定基元 ID 的像素着色器输入都使用常量内插模式。
不支持为相邻基元自动生成基元 ID。 对于具有相邻性的基元类型(例如带相邻的三角形带),仅为内部基元维护基元 ID (非相邻基元) ,就像没有相邻的三角形带中的基元集一样。
InstanceID
每个着色器阶段使用实例 ID 来标识当前正在处理的几何图形的实例。 它是默认值为 0 的 32 位无符号整数。
如果顶点着色器输入声明包含实例 ID 语义,则 IA 阶段将向每个顶点添加实例 ID。 对于每个已编制索引的绘图调用,实例 ID 将递增 1。 所有其他绘制调用不会更改实例 ID 的值。如果实例 ID 溢出 (超过 2² – 1) ,则它包装为 0。
示例
下图显示了如何在 IA 阶段中将系统值附加到实例化三角形带。
以下表显示了为同一三角形带的两个实例生成的系统值。 第一个实例(实例 U)显示为蓝色,第二个实例(实例 V)显示为绿色。 实线连接基元中的顶点,虚线连接相邻的顶点。
下表显示了实例 U 的系统生成的值。
顶点数据 | C,U | D,U | E,U | F,U | G,U | H,U | I,U | J,U | K,U | L,U |
---|---|---|---|---|---|---|---|---|---|---|
VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
InstanceID | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
值 | 值 | 值 | |
---|---|---|---|
PrimitiveID | 0 | 1 | 2 |
InstanceID | 0 | 0 | 0 |
下表显示了实例 V 的系统生成的值。
顶点数据 | C,V | D,V | E,V | F,V | G,V | H,V | I,V | J,V | K,V | L,V |
---|---|---|---|---|---|---|---|---|---|---|
VertexID | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
InstanceID | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
值 | 值 | 值 | |
---|---|---|---|
PrimitiveID | 0 | 1 | 2 |
InstanceID | 1 | 1 | 1 |
输入汇编程序 (顶点、基元和实例) 生成 ID;另请注意,每个实例都有一个唯一的实例 ID。数据以条带切割结束,该剪切区分隔三角形带的每个实例。
相关主题