Freigeben über


vs_3_0

Ein programmierbarer Vertex-Shader besteht aus einer Reihe von Anweisungen, die mit Vertexdaten arbeiten. Register übertragen Daten in und aus der ALU. Ein zusätzliches Steuerelement kann angewendet werden, um die Anweisung, die Ergebnisse oder die ausgeschriebenen Daten zu ändern.

Vertex-Shaderversion vs_3_0 erweitert den von vs_2_x unterstützten Featuresatz. Jedes Der Features in vs_2_X, für die eine Obergrenze festgelegt werden muss, ist in vs_3_0 verfügbar, ohne dass die Obergrenze erforderlich ist.

Neue Funktionen

Die neuen Features der Vertex-Shaderversion vs_3_0 sind in den folgenden Abschnitten aufgeführt.

Indizierungsregister

In den früheren Shadermodellen konnte nur die Konstantenregisterbank indiziert werden. In diesem Modell können die folgenden Registerbanken mithilfe des Schleifenzählerregisters (aL) indiziert werden:

  • Eingaberegister (v#)
  • Ausgaberegister (o#)

Scheitelpunkttexturen

Dieses Shadermodell unterstützt die Textursuche im Vertex-Shader mithilfe von texldl. Die Vertex-Engine verfügt über vier Textur-Samplerstufen (die sich vom Displacement Map-Sampler und den Textur-Samplern in der Pixel-Engine unterscheiden), die zum Beispiel für Texturen verwendet werden können, die in diesen Phasen festgelegt sind. Siehe Vertextexturen in vs_3_0 (DirectX HLSL).

Scheitelstromhäufigkeit

Mit diesem Feature kann eine Teilmenge der Eingaberegister mit einer anderen Rate als einmal pro Scheitelpunkt initialisiert werden. Weitere Informationen finden Sie unter Zeichnen von nicht indizierten Geometrien.

Shaderausgabe

Ähnlich wie vs_2_0 kann die Ausgabe des Shaders mit der statischen Flusssteuerung variieren. Seien Sie beim dynamischen Verzweigen vorsichtig, da dies dazu führen kann, dass Shaderausgaben pro Scheitelpunkt variieren. Dies führt zu unvorhersehbaren Ergebnissen auf unterschiedlicher Hardware.

Dynamische Flusssteuerung

Alle Anweisungen zur dynamischen Flusssteuerung werden unterstützt. Der maximal zulässige Wert der Schachtelungstiefe ist 24. (Weitere Informationen finden Sie unter Schachtelungsgrenzwerte für Flusssteuerung .)

Temporäre Register

Insgesamt werden 32 temporäre Register (r#) unterstützt.

Statische Flusssteuerung

Die maximale Schachtelungstiefe für Schleife ( vs/. rep ) ist 4. Die maximale Schachtelungstiefe für Aufrufe ( vs/callnz bool - vs/callnz pred - vs callnz pred ) ist 4. Wenn bool – vs, ist der maximal zulässige Wert für die Schachtelungstiefe 24. (Weitere Informationen finden Sie unter Schachtelungsgrenzwerte für Flusssteuerung .)

Prädikation

Die Anweisungsvorbehandlung wird unterstützt. Verwenden Sie setp_comp – vs , um das Prädikatregister festzulegen.

Anweisungsanzahl

Jeder Vertex-Shader ist von 512 bis zur Anzahl der Slots in MaxVertexShader30InstructionSlots in D3DCAPS9 zulässig. Die Anzahl der ausgeführten Anweisungen kann aufgrund der Unterstützung von Schleifen/Wiederholungen viel höher sein. Dies wird jedoch von MaxVShaderInstructionsExecuted in D3DCAPS9 begrenzt, die mindestens 0xFFFF sein sollte.

Gerätekappen

Wenn Vertex Shader 3_0 unterstützt wird, werden die folgenden Obergrenzen (mindestens) in der Hardware unterstützt:

Cap Funktion
Shader-Obergrenzen
  • DynamicFlowControlDepth ist 24
  • NumTemps ist 32
  • StaticFlowControlDepth ist 4
  • Die Prädication wird unterstützt.
GuardBandLeft, GuardBandTop, GuardBandRight, GuardBandBottom 8 KB
VertexShaderVersion 3_0
MaxVertexShaderConst 256
MaxVertexShader30InstructionSlots 512
Nebelunterstützung D3DPRASTERCAPS_FOGVERTEX
VertexTextureFilterCaps
D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET Vertexelemente in einer Vertexdeklaration können denselben Streamoffset verwenden.
Vertexformate
  • D3DDECLTYPE_UBYTE4
  • D3DDECLTYPE_UBYTE4N
  • D3DDECLTYPE_SHORT2N
  • D3DDECLTYPE_SHORT4N
  • D3DDECLTYPE_FLOAT16_2
  • D3DDECLTYPE_FLOAT16_4

 

Vertex-Shader