Share via


Vertexshader-Stufe

Die Vs-Phase (Vertex-Shader) verarbeitet Scheitelpunkte aus dem Eingabeassessper und führt Vertexvorgänge wie Transformationen, Skinning, Morphing und Beleuchtung pro Vertex aus. Vertexshader arbeiten immer auf einem einzelnen Eingabepunkt und erzeugen einen einzelnen Ausgabevertex. Die Vertex-Shader-Phase muss immer aktiv sein, damit die Pipeline ausgeführt werden kann. Wenn keine Vertexänderung oder Transformation erforderlich ist, muss ein Passthrough-Vertexshader erstellt und auf die Pipeline festgelegt werden.

Der Vertex-Shader

Jeder Vertexshader kann aus bis zu 16 32-Bit-Vektoren (jeweils bis zu 4 Komponenten) bestehen, und jeder Ausgabevertex kann aus bis zu 16 32-Bit-4-Komponenten-Vektoren bestehen. Alle Vertex-Shader müssen mindestens eine Eingabe und eine Ausgabe aufweisen, was nur einen Skalarwert aufweisen kann.

Die Vertex-Shader-Phase kann zwei vom System generierte Werte aus dem Eingabe-Assembler verwenden: VertexID und InstanceID (siehe Systemwertsemantik). Da VertexID und InstanceID beide auf Vertex-Ebene aussagekräftig sind und von Hardware generierte IDs nur in die erste Phase eingespeist werden können, die sie versteht, können diese ID-Werte nur in die Vertex-Shader-Phase eingespeist werden.

Vertexshader werden immer auf allen Scheitelpunkten ausgeführt, einschließlich benachbarter Scheitelpunkte in eingabeprimitalen Topologien mit Adjacency. Die Häufigkeit der Ausführung des Vertex-Shaders kann mithilfe der VSInvocations-Pipelinestatistik von der CPU abgefragt werden.

Ein Vertex-Shader kann Lade- und Texturstichproben durchführen, bei denen keine Bildschirmraumableitungen erforderlich sind (mit systeminternen HLSL-Funktionen: Sample (DirectX HLSL Texture Object),SampleCmpLevelZero (DirectX HLSL Texture Object) und SampleGrad (DirectX HLSL Texture Object)).