Étape Domain Shader (DS)
L’étape Du nuanceur de domaine (DS) calcule la position de vertex d’un point subdividé 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 au correctif de sortie du nuanceur de coque et aux constantes des correctifs de sortie des correctifs de sortie, ainsi que les coordonnées UV de sortie de l’étape tessellator.
Objectif et utilisations
L’étape De nuanceur de domaine (DS) génère la position de vertex d’un point subdividé dans le correctif de sortie, en fonction de l’entrée de l’étape du nuanceur de coque (HS) et de l’étape Tessellator (TS).
Entrée
- Un nuanceur de domaine consomme des points de contrôle de sortie à partir de l’étape du nuanceur de coque (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 tessellator à fonction fixe ainsi que les valeurs brutes (avant l’arrondi par la pavage d’entiers, par exemple), ce qui facilite la géomorphose, par exemple.
- Un nuanceur de domaine est appelé une fois par coordonnée de sortie de l’étape Tessellator (TS).
Sortie
- L’étape De nuanceur de domaine (DS) génère la position de vertex d’un point subdividé dans le correctif de sortie.
Une fois le nuanceur de domaine terminé, la pavage est terminée et les données de pipeline passent à l’étape de pipeline suivante, comme l’étape du nuanceur geometry (GS) et l’étape du nuanceur de pixels (PS). Un nuanceur géométrique qui s’attend à des primitives avec addjacency (par exemple, 6 sommets par triangle) n’est pas valide lorsque le pavage est actif (cela entraîne 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);
}
Rubriques connexes