ps_3_0 Register

Pixelshader sind von Registern abhängig, um Vertexdaten abzurufen, Pixeldaten auszugeben, temporäre Ergebnisse während Berechnungen zu speichern und Textursamplingphasen zu identifizieren. Es gibt mehrere Arten von Registern mit jeweils eindeutigen Funktionen. Dieser Abschnitt enthält Referenzinformationen für die Eingabe- und Ausgaberegister, die von Pixelshader Version 3_0 implementiert werden.

Neue Register

Eingaberegister

Die Eingaberegister (v#) sind jetzt vollständig gleitkomma, und die Texturkoordinatenregister(t#) wurden darin konsolidiert. Der dcl_semantics (sm3 – ps asm) oben im Shader wird verwendet, um zu beschreiben, was in einem bestimmten Input_Register enthalten ist. Für dieses Modell wird eine Semantik für die Pixeltypen eingeführt (analog zur Scheitelpunktseite). Es wird keine Klemmung durchgeführt, wenn die Eingaberegister als Farben (z. B. Texturkoordinaten) definiert sind. Die Auswertung der als Farbe definierten Register unterscheidet sich von den Texturkoordinaten beim Multisampling.

Gesichtserkennungsregister

Das Gesichtserkennungsregister (vFace) ist für dieses Modell neu. Dies ist ein Gleitkomma-Skalarregister, das schließlich den primitiven Bereich enthält. In ps_3_0 ist jedoch nur das Zeichen dieses Registers gültig. Wenn der Wert also kleiner als null ist (das Vorzeichenbit ist negativ festgelegt), ist der Grundtyp die Rückseite (der Bereich ist negativ, gegen den Uhrzeigersinn). Daher ist es in ps_3_0 nur sinnvoll, dieses Register mit 0 (> 0 oder < 0) zu vergleichen. Innerhalb des Pixelshaders kann die Anwendung entscheiden, welche Beleuchtungstechnik verwendet werden soll. Auf diese Weise lässt sich eine beidseitige Beleuchtung erreichen. Dieses Register erfordert eine Deklaration, sodass die nicht deklarierte Verwendung als Fehler gekennzeichnet wird. Für Linien und Punktgrundtypen ist dieses Register nicht definiert. Das Gesichtserkennungsregister kann nur mit den folgenden Anweisungen als Bedingung verwendet werden: setp_comp - ps, if_comp - ps oder break_comp - ps.

Schleifenzählerregister

Das Schleifenzählerregister (AL ) ist für dieses Modell neu. Es wird automatisch bei jeder Ausführung der Schleife – ps/endloop – ps block inkrementiert. Sie kann bei Bedarf im -Block für die relative Adressierung verwendet werden. Die Verwendung des Schleifenzählerregisters außerhalb der Schleife ist ungültig.

Positionsregister

Das Positionsregister (vPos) ist für dieses Modell neu. Sie enthält die aktuellen Pixel (x, y) in den entsprechenden Kanälen. Die Kanäle (z, w) sind nicht definiert. Dieses Register erfordert eine Deklaration, sodass die nicht deklarierte Verwendung als Fehler gekennzeichnet wird. Wenn dieses Register deklariert wird, muss genau eine der folgenden Masken vorhanden sein: .x, .y, .xy.

Eingaberegistertypen

Registrieren Name Anzahl R/W # Lesen von Ports # Reads/inst Dimension RelAddr Standardeinstellungen Erfordert DCL
V # Eingaberegister 10 R 1 Unbegrenzt 4 Al Keine Ja
R # Temporäres Register 32 R/W 3 Unbegrenzt 4 Nein Keine Nein
C# Konstanter Float-Register 224 R 1 Unbegrenzt 4 Nein 0000 Nein
Ich # Konstanter ganzzahliger Register 16 R 1 1 4 Nein 0000 Nein
B # Boolesches Konstantenregister 16 R 1 1 1 Nein FALSE Nein
p0 Prädikatregister 1 R 1 1 1 Nein Keine Nein
s # Sampler (Direct3D 9 asm-ps) 16 R 1 1 4 Nein Siehe Hinweis 1 Ja
vFace Face_Register 1 R 1 Unbegrenzt 1 Nein Keine Ja
vPos Position_Register 1 R 1 Unbegrenzt 4 Nein Keine Ja
Al Loop_Counter_Register 1 R 1 Unbegrenzt 1 Keine Nein

 

Hinweise:

  • Standardwerte für Samplersuche sind vorhanden, werte hängen jedoch vom Texturformat ab.

Die Anzahl der Leseports ist die Anzahl der verschiedenen Register (für jeden Registertyp), die in einer einzigen Anweisung gelesen werden können.

Ausgaberegistertypen

Registrieren Name Anzahl R/W Dimension RelAddr Standardeinstellungen Erfordert DCL
Oc # Ausgabefarbregister Siehe Texturen mit mehreren Elementen (Direct3D 9) W 4 Nein Keine Nein
oDepth Ausgabetieferegister 1 W 1 Nein Keine Nein

 

Register