ps_1_1__ps_1_2__ps_1_3__ps_1_4 Register

Pixel-Shader sind von Registern abhängig, um Vertexdaten abzurufen, Pixeldaten auszugeben, temporäre Ergebnisse während berechnungen zu speichern und Texturstichproben zu identifizieren. Es gibt mehrere Arten von Registern, die jeweils eine eindeutige Funktionalität aufweisen. Dieser Abschnitt enthält Referenzinformationen zu den Eingabe- und Ausgaberegistern, die von der Pixel-Shaderversion 1_X implementiert werden.

Register enthalten Daten zur Verwendung durch den Pixel-Shader. Register werden in den folgenden Abschnitten ausführlich beschrieben.

  • Registertypen beschreibt die vier verfügbaren Registertypen und deren Zwecke.
  • Lesen Sie port limit details zu den Einschränkungen für die Verwendung mehrerer Register in einer einzigen Anweisung.
  • Schreibgeschützter Schreibzugriff beschreibt, welche Register zum Lesen, Schreiben oder beides verwendet werden können.
  • Bereich beschreibt den Bereich der Komponentendaten.

Registrierungstypen

Name type Version 1_1 Version 1_2 Version 1_3 Version 1_4
C# Konstantenregister 8 8 8 8
R # Temporäre Registrierung 2 2 2 6
T # Texturregister 4 4 4 6
V # Farbregister 2 2 2 2 in Phase 2

 

  • Konstantenregister enthalten konstante Daten. Daten können mit SetPixelShaderConstantF in ein Konstantenregister geladen oder mit def - ps definiert werden. Konstantenregister können nicht durch Texturadressanweisungen verwendet werden. Die einzige Ausnahme ist die texm3x3spec - ps-Anweisung , die ein konstantes Register verwendet, um einen Augenstrahlvektor zu liefern.

  • Temporäre Register werden verwendet, um Zwischenergebnisse zu speichern. r0 dient zusätzlich als Pixel-Shaderausgabe. Der Wert in r0 am Ende des Shaders ist die Pixelfarbe für den Shader.

    Bei der Shaderüberprüfung schlägt CreatePixelShader bei jedem Shader fehl, der versucht, aus einem temporären Register zu lesen, das nicht von einer vorherigen Anweisung geschrieben wurde. D3DXAssembleShader schlägt ähnlich fehl, vorausgesetzt, die Überprüfung ist aktiviert (verwenden Sie nicht D3DXSHADER_SKIPVALIDATION).

  • Texturregister

    Für Pixel-Shader version 1_1 bis 1_3 enthalten Texturregister Texturdaten oder Texturkoordinaten. Texturdaten werden in ein Texturregister geladen, wenn eine Textur stichprobeniert wird. Texture Sampling verwendet Texturkoordinaten, um einen Farbwert an den angegebenen Koordinaten (u,v,w,q) unter Berücksichtigung der Zustandsattribute der Texturstufe nachzuschlagen oder zu samplen. Die Texturkoordinatendaten werden aus den Vertextexturkoordinatendaten interpoliert und einer bestimmten Texturstufe zugeordnet. Es gibt eine standardmäßige 1:1-Zuordnung zwischen der Texturstufennummer und der Reihenfolge der Texturkoordinatendeklaration. Standardmäßig ist der erste Satz von Texturkoordinaten, die im Scheitelpunktformat definiert sind, der Texturstufe 0 zugeordnet.

    Bei diesen Pixel-Shaderversionen verhalten sich Texturregister genauso wie temporäre Register, wenn sie von arithmetischen Anweisungen verwendet werden.

    Für Pixel-Shader version 1_4 enthalten Texturregister (t#) schreibgeschützte Texturkoordinatendaten. Dies bedeutet, dass der Texturkoordinatensatz und die Texturstufennummer unabhängig voneinander sind. Die Texturstufennummer (aus der eine Textur entnommen werden soll) wird durch die Zielregisternummer (r0 bis r5) bestimmt. Für die texld-Anweisung wird der Texturkoordinatensatz durch das Quellregister (t0 bis t5) bestimmt, sodass der Texturkoordinatensatz einer beliebigen Texturphase zugeordnet werden kann. Darüber hinaus kann das Quellregister (angeben von Texturkoordinaten) für texld auch ein temporäres Register (r#) sein. In diesem Fall werden die Inhalte des temporären Registers als Texturkoordinaten verwendet.

  • Farbregister enthalten Farbwerte pro Pixel. Die Werte werden durch pixelbasierte Iteration der diffusen und spiegelförmigen Farbwerte in den Vertexdaten abgerufen. Für Pixel-Shader der Version 1_4-Shader sind Farbregister nur in der zweiten Phase verfügbar.

    Wenn der Schattenmodus auf D3DSHADE_FLAT festgelegt ist, wird die Iteration beider Scheitelpunktfarben (diffus und spekulär) deaktiviert. Unabhängig vom Schattenmodus wird Nebel weiterhin von der Pipeline durchlaufen, wenn Pixelnebel aktiviert ist. Beachten Sie, dass Nebel später in der Pipeline als der Pixelshader angewendet wird.

    Es ist üblich, das v0-Register mit den vertex diffusen Farbdaten zu laden. Es ist auch üblich, das v1-Register mit den Scheitelpunkt-Farbdaten zu laden.

    Eingabefarbdatenwerte werden auf den Bereich 0 bis 1 geklemmt (gesättigt), da dies der gültige Eingabebereich für Farbregister im Pixel-Shader ist.

    Pixel-Shader haben schreibgeschützten Zugriff auf Farbregister. Die Inhalte dieser Register sind iterierte Werte, aber Iterationen können mit einer viel geringeren Genauigkeit als Texturkoordinaten durchgeführt werden.

Portlimit lesen

Das Leseportlimit gibt die Anzahl der verschiedenen Register jedes Registertyps an, die als Quellregister in einer einzelnen Anweisung verwendet werden können.

Name type Version 1_1 Version 1_2 Version 1_3 Version 1_4
C# Konstantenregister 2 2 2 2
R # Temporäre Registrierung 2 2 2 3
T # Texturregister 2 3 3 1
V # Farbregister 2 2 2 2 in Phase 2

 

Beispielsweise weisen die Farbregister für fast alle Versionen einen Leseportgrenzwert von zwei auf. Dies bedeutet, dass eine einzelne Anweisung maximal zwei verschiedene Farbregister (v0 und v1 für instance) als Quellregister verwenden kann. Dieses Beispiel zeigt zwei Farbregister, die in derselben Anweisung verwendet werden:

mad r0, v1, c2, v0

Schreibgeschützt, Lese-/Schreibzugriff

Die Registertypen werden in der folgenden Tabelle anhand der Schreibschutzfunktion (READ-ONLY, RO) oder der Lese-/Schreibfunktion (RW) identifiziert. Schreibgeschützte Register können nur als Quellregister in einer Anweisung verwendet werden. sie können niemals als Zielregister verwendet werden.

Name type Version 1_1 Version 1_2 Version 1_3 Version 1_4
Name type 1_1 1_2 1_3 1_4
C# Konstantenregister RO RO RO RO
R # Temporäres Register RW RW RW RW
T # Texturregister RW RW RW Weitere Informationen finden Sie im folgenden Hinweis.
V # Farbregister RO RO RO RO

 

Register, die RW-fähig sind, können zum Speichern von Zwischenergebnissen verwendet werden. Dies schließt die temporären Register und Texturregister für einige shader-Versionen ein.

Hinweis

  • Für Pixelshader version 1_4 sind Texturregister RO für Texturadressierungsanweisungen, und Texturregister können weder aus gelesen noch durch arithmetische Anweisungen geschrieben werden. Da Texturregister zu Texturkoordinatenregistern geworden sind, ist der RO-Zugriff keine Regression der vorherigen Funktionalität.

 

Bereich

Der Bereich ist der maximale und minimale Registerdatenwert. Die Bereiche variieren je nach Registertyp. Die Bereiche für einige der Register können mithilfe von GetDeviceCaps über die Gerätekappen abgefragt werden.

Name type Bereich Versionen
C# Konstantenregister -1 bis +1 Alle Versionen
R # Temporäres Register – PixelShader1xMaxValue zu + PixelShader1xMaxValue Alle Versionen
T # Texturregister - MaxTextureRepeat zu + MaxTextureRepeat Alle Versionen
V # Farbregister 0 bis 1 Alle Versionen

 

Frühe Pixelshaderhardware stellt Daten in Registern mithilfe einer Festpunktzahl dar. Dadurch wird die Genauigkeit für den Bruchteil einer Zahl auf maximal etwa acht Bits beschränkt. Beachten Sie dies beim Entwerfen eines Shaders.

Für pixelshader Version 1_1 bis 1_3 muss MaxTextureRepeat mindestens eins sein. Für 1_4 muss MaxTextureRepeat mindestens acht sein.

Weitere Informationen zu PixelShader1xMaxValue finden Sie unter D3DCAPS9 .

Register