域着色器 (DS) 阶段
域着色器 (DS) 阶段计算输出修补程序中细分点的顶点位置;它计算与每个域样本对应的顶点位置。 对每个细化器阶段输出点运行一次域着色器,并且该着色器具有对外壳着色器输出修补程序、输出修补程序常量以及细化器阶段输出 UV 坐标的只读权限。
用途和用法
域着色器 (DS) 阶段基于外壳着色器 (HS) 阶段和细化器 (TS) 阶段中的输入,输出修补程序中细分点的顶点位置。
输入
- 域着色器使用外壳着色器 (HS) 阶段的输出控制点。 外壳着色器输出包括:
- 控制点。
- 修补程序常量数据。
- 细化因素。 例如,细化因素可以包括固定函数细化器使用的值以及原始值(例如在被整数细化舍入前),这有助于加快几何过渡。
- 对细化器 (TS) 阶段的每个输出坐标调用一次域着色器。
输出
- 域着色器 (DS) 阶段输出输出修补程序中细分点的顶点位置。
域着色器完成后,细分完成,且管道数据继续到下一个管道阶段,比如几何着色器 (GS) 阶段和像素着色器 (PS) 阶段。 细化活动(导致未定义行为,调试层将抱怨这种情况)时,几何着色器预计邻接基元(例如每个三角形 6 个顶点)无效。
示例
void main( out MyDSOutput result,
float2 myInputUV : SV_DomainPoint,
MyDSInput DSInputs,
OutputPatch<MyOutPoint, 12> ControlPts,
MyTessFactors tessFactors)
{
...
result.Position = EvaluateSurfaceUV(ControlPoints, myInputUV);
}
相关主题