Teilen über


Vertex-Shader-Stufe

Die Vertex-Shaderphase (VS) verarbeitet Scheitelpunkte aus dem Eingabeassembler, führt pro Vertexoperationen wie Transformationen, Skinning, Morphing und Beleuchtung pro Vertex durch. Vertex-Shader arbeiten immer mit einem einzelnen Eingabevertex 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 Pass-Through-Vertex-Shader erstellt und auf die Pipeline festgelegt werden.

Der Vertex-Shader

Jeder Vertex-Shadereingabevertex 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-Komponentenvektoren bestehen. Alle Vertex-Shader müssen mindestens eine Eingabe und eine Ausgabe aufweisen, die so wenig wie ein Skalarwert sein kann.

Die Vertex-Shader-Phase kann zwei vom System generierte Werte aus dem Eingabeassembler verwenden: VertexID und InstanceID (siehe Systemwertsemantik). Da VertexID und InstanceID sowohl auf Vertexebene als auch 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.

Vertex-Shader werden immer auf allen Scheitelpunkten ausgeführt, einschließlich angrenzender Scheitelpunkte in Eingabegrundtypentopologien mit Adjacency. Die Häufigkeit, mit der der Vertex-Shader ausgeführt wurde, kann mithilfe der VSInvocations-Pipelinestatistik von der CPU abgefragt werden.

Ein Vertex-Shader kann Lade- und Textursamplingvorgänge ausführen, bei denen Bildschirmraumderivate nicht erforderlich sind (mit systeminternen HLSL-Funktionen: Sample (DirectX HLSL Texture Object), SampleCmpLevelZero (DirectX HLSL Texture Object)und SampleGrad (DirectX HLSL Texture Object)).