Этап шейдера доменов (DS)

На этапе шейдера доменов вычисляется положение вершины составной точки в выходном участке. Вычисляется положение вершины, соответствующее каждой выборке домена. Шейдер доменов запускается единожды на каждую выходную точку этапа тесселяции и имеет доступ только для чтения к выходному участку шейдера поверхности и константам выходного участка, а также к координатам UV выходных данных этапа тесселяции.

Назначение и использование

Этап шейдера домена выводит положение вершины составной точки в выходном участке на основе входных данных этапа шейдера поверхности (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);
}

Графический конвейер