Freigeben über


Domainshaderphase (DS)

Die Domain Shader -Stufe (DS) berechnet die Vertexposition eines unterteilten Punkts im Ausgabepatch; sie berechnet die Vertexposition, die den einzelnen Domänenbeispielen entspricht. Ein Domänen-Shader wird einmal pro Ausgabepunkt der Tessellatorphase ausgeführt und verfügt über schreibgeschützten Zugriff auf den Hull-Shader-Ausgabepatch und die Ausgabepatchkonstanten und die Tessellator-Ausgabe-UV-Koordinaten.

Zweck und Verwendung

Die Domain Shader -Stufe (DS) gibt die Vertexposition eines unterteilten Punkts im Ausgabepatch aus, basierend auf Eingaben aus der Hull-Shader-Stufe (HS) und der Tessellator-Stufe (TS).

Diagramm der Domänen-Shader-Stufe

Eingabe

  • Ein Domänen-Shader verwendet Ausgabesteuerungspunkte aus der Hull-Shaderphase (HS). Zu den Hull-Shader-Ausgaben gehören:
    • Kontrollpunkte.
    • Patchkonstantendaten.
    • Tessellationsfaktoren. Die Tessellationsfaktoren können die werte enthalten, die vom Tessellator mit fester Funktion verwendet werden, sowie die Rohwerte (z. B. vor rundung durch ganzzahlige Tessellation), die z. B. geomorphen.
  • Ein Domänen-Shader wird einmal pro Ausgabekoordinate aus der Tessellatorphase (TS) aufgerufen.

Ausgabe

  • Die Ds-Stufe (Domain Shader) gibt die Vertexposition eines unterteilten Punkts im Ausgabepatch aus.

Nach Abschluss des Domänen-Shaders wird die Tessellation abgeschlossen, und Pipelinedaten werden mit der nächsten Pipelinestufe fortgesetzt, z. B. die Geometry-Shaderphase (GS) und die Pixelshaderphase (PS). Ein Geometrie-Shader, der Grundtypen mit Adjacency erwartet (z. B. 6 Scheitelpunkte pro Dreieck), ist ungültig, wenn die Tessellation aktiv ist (dies führt zu einem nicht definierten Verhalten, über das sich die Debugebene beschwert).

Beispiel

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

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

Grafikpipeline