Muokkaa

Share via


Domain Shader (DS) stage

The Domain Shader (DS) stage calculates the vertex position of a subdivided point in the output patch; it calculates the vertex position that corresponds to each domain sample. A domain shader is run once per tessellator stage output point and has read-only access to the hull shader output patch and output patch constants, and the tessellator stage output UV coordinates.

Purpose and uses

The Domain Shader (DS) stage outputs the vertex position of a subdivided point in the output patch, based on input from the Hull Shader (HS) stage and the Tessellator (TS) stage.

diagram of the domain-shader stage

Input

  • A domain shader consumes output control points from the Hull Shader (HS) stage. The hull shader outputs include:
    • Control points.
    • Patch constant data.
    • Tessellation factors. The tessellation factors can include the values used by the fixed-function tessellator as well as the raw values (before rounding by integer tessellation, for example), which facilitates geomorphing, for example.
  • A domain shader is invoked once per output coordinate from the Tessellator (TS) stage.

Output

  • The Domain Shader (DS) stage outputs the vertex position of a subdivided point in the output patch.

After the domain shader completes, tessellation is finished and pipeline data continues to the next pipeline stage, such as the Geometry Shader (GS) stage and the Pixel Shader (PS) stage. A geometry shader that expects primitives with adjacency (for example, 6 vertices per triangle) is not valid when tessellation is active (this results in undefined behavior, which the debug layer will complain about).

Example

void main( out    MyDSOutput result, 
           float2 myInputUV : SV_DomainPoint, 
           MyDSInput DSInputs,
           OutputPatch<MyOutPoint, 12> ControlPts, 
           MyTessFactors tessFactors)
{
     ...

     result.Position = EvaluateSurfaceUV(ControlPoints, myInputUV);
}

Graphics pipeline