域着色器 (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);
}

图形管道