Partager via


Étape Domain Shader (DS)

L’étape DS (Domain Shader) calcule la position de vertex d’un point subdivisé dans le correctif de sortie ; il calcule la position de vertex qui correspond à chaque exemple de domaine. Un nuanceur de domaine est exécuté une fois par point de sortie de l’étape tessellator et dispose d’un accès en lecture seule aux constantes de patch de sortie et de patch de sortie du nuanceur de coque, ainsi qu’aux coordonnées UV de sortie de l’étape tessellateur.

Objectif et utilisations

L’étape DS (Domain Shader) génère la position de vertex d’un point subdivisé dans le correctif de sortie, en fonction de l’entrée de l’étape Hull Shader (HS) et de l’étape Tessellator (TS).

diagramme de la phase de nuanceur de domaine

Entrée

  • Un nuanceur de domaine consomme des points de contrôle de sortie de la phase Hull Shader (HS). Les sorties du nuanceur de coque sont les suivantes :
    • Points de contrôle.
    • Corriger les données constantes.
    • Facteurs de pavage. Les facteurs de pavage peuvent inclure les valeurs utilisées par le tessellateur à fonction fixe, ainsi que les valeurs brutes (avant l’arrondi par la mise en forme d’entiers, par exemple), ce qui facilite la géomorphisation, par exemple.
  • Un nuanceur de domaine est appelé une fois par coordonnée de sortie à partir de la phase Tessellator (TS).

Sortie

  • L’étape DS (Domain Shader) génère la position de vertex d’un point subdivisé dans le correctif de sortie.

Une fois le nuanceur de domaine terminé, la mise en forme est terminée et les données de pipeline passent à l’étape de pipeline suivante, comme l’étape du nuanceur de géométrie (GS) et l’étape de nuanceur de pixels (PS). Un nuanceur de géométrie qui attend des primitives avec adjacence (par exemple, 6 sommets par triangle) n’est pas valide lorsque la mise en forme est active (il en résulte un comportement non défini, dont la couche de débogage se plaindra).

Exemple

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

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

Pipeline graphique