Condividi tramite


Fase domain shader (DS)

La fase Domain Shader (DS) calcola la posizione del vertice di un punto suddiviso nella patch di output. Calcola la posizione del vertice corrispondente a ogni campione di dominio. Un domain shader viene eseguito una volta per ogni punto di output della fase tessellator e ha accesso in sola lettura alle costanti patch di output e patch di output dello hull shader nonché alle coordinate UV di uscita della fase tessellator.

Scopo e usi

La fase Domain Shader (DS) restituisce la posizione del vertice di un punto suddiviso nella patch di output, in base all'input della fase Hull Shader (HS) e alla fase TS (Tessellator).

diagramma della fase domain-shader

Immissione

  • Uno shader di dominio utilizza i punti di controllo di output dalla fase hull shader (HS). Gli output dello hull shader includono:
    • Punti di controllo
    • Dati costanti di patch
    • Fattori di tassellatura. I fattori di tassellatura possono includere i valori utilizzati dal mosaico a funzione fissa, nonché i valori non elaborati (prima dell'arrotondamento per tassellatura intera, ad esempio), che facilita la geomorfia, ad esempio.
  • Uno shader di dominio viene richiamato una volta per ogni coordinata di output dalla fase TS (Tessellator).

Output

  • La fase Domain Shader (DS) restituisce la posizione del vertice di un punto suddiviso nella patch di output.

Al termine dello shader del dominio, la tassellatura viene completata e i dati della pipeline continuano alla fase successiva della pipeline, ad esempio la fase Geometry Shader (GS) e la fase Pixel Shader (PS). Un geometry shader che prevede primitive con adiacenza (ad esempio, 6 vertici per triangolo) non è valido quando la tassellatura è attiva (questo comporta un comportamento non definito, che comporterà il livello di debug).

Esempio

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

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

Pipeline grafica