Freigeben über


Ausgabefarbregister

Die Farbausgaberegister des Pixel-Shaders (oC#) sind schreibgeschützte Register, die Ergebnisse an mehrere Renderziele ausgeben.

Syntax

Oc #

 

Hierbei gilt:

Name Beschreibung
oC0 Renderziel #0
oC1 Renderziel #1
oC2 Renderziel #2
oC3 Renderziel #3

 

Bemerkungen

  • Wenn oCn geschrieben wird, aber kein entsprechendes Renderziel vorhanden ist, wird dieser Schreibvorgang in oCn ignoriert.
  • Die Renderzustände D3DRS_COLORWRITEENABLE, D3DRS_COLORWRITEENABLE1, D3DRS_COLORWRITEENABLE2 und D3DRS_COLORWRITEENABLE3 bestimmen, welche Komponenten von oCn letztendlich in das Renderziel geschrieben werden (ggf. nach dem Blenden). Wenn der Shader einige, aber nicht alle von den D3DRS_COLORWRITEENABLE*-Renderzuständen definierten Komponenten für ein bestimmtes oCn-Register schreibt, erzeugen die nicht geschriebenen Kanäle nicht definierte Werte im entsprechenden Renderziel. Wenn keine der Komponenten eines oCn geschrieben wird, darf das entsprechende Renderziel überhaupt nicht aktualisiert werden (wie oben angegeben), sodass die D3DRS_COLORWRITEENABLE*-Renderzustände nicht gelten.

Shadermodell 2-Einschränkungen

  • oCn kann nur mit der Anweisung mov - ps geschrieben werden.
  • oC0 muss immer im Shader geschrieben werden.
  • Beim Schreiben in einen oCn ist kein Quell-Swizzle (mit Ausnahme von .xyzw = default swizzle) oder Quellmodifizierer zulässig.
  • Beim Schreiben in einen oCn ist keine Zielschreibmaske (außer .xyzw = Standardmaske) oder Befehlsmodifizierer zulässig.
  • Wenn oCn geschrieben wird, muss auch oC0 - oCn-1 geschrieben werden. Wenn Sie beispielsweise in oC2 schreiben möchten, müssen Sie auch in oC0 und oC1 schreiben.
  • Maximal ein Schreibvorgang in einen beliebigen oC# pro Shader ist zulässig.
  • Für ps_2_x und ps_3_0 können Sie keine oC#- und oD#-Register innerhalb der dynamischen Flusssteuerung oder Prädication schreiben (Schreibvorgänge in oC# innerhalb der statischen Flusssteuerung sind in Ordnung).

Einschränkungen des Shadermodells 3

  • Für ps_3_0 können die Ausgaberegister oC# und oD# beliebig oft geschrieben werden. Die Ausgabe des Pixel-Shaders stammt aus dem Inhalt der Ausgaberegister am Ende der Shaderausführung. Wenn ein Schreibvorgang in ein Ausgaberegister nicht erfolgt, möglicherweise aufgrund der Flusssteuerung oder wenn der Shader ihn einfach nicht geschrieben hat, wird auch der entsprechende Rendertarget nicht aktualisiert. Wenn eine Teilmenge der Kanäle in einem Ausgaberegister geschrieben wird, werden nicht definierte Werte in die übrigen Kanäle geschrieben.
  • Für ps_3_0 können die oC#-Register mit beliebigen Schreibmasken geschrieben werden.
  • Für ps_2_x und ps_3_0 können Sie keine oC#- und oD#-Register innerhalb der dynamischen Flusssteuerung oder Prädication schreiben (Schreibvorgänge in oC# innerhalb der statischen Flusssteuerung sind in Ordnung).
  • Sie dürfen keine Farbverlaufsberechnungen (oder Vorgänge, die implizit Farbverlaufsberechnungen wie texld - ps_2_0 und up, texldb - ps, texldp - ps ) innerhalb von Flusssteuerungsanweisungen ausführen, deren Verzweigungsbedingungen pro primitiver Basis variieren (d. h.: Anweisungen zur dynamischen Flusssteuerung). Die Anweisungsvorbehandlung wird nicht als dynamische Flusssteuerung betrachtet.

Register

Mehrere Renderziele (Direct3D 9)