Ausgabetieferegister

Das Pixelshader-Ausgabetiefenregister (oDepth) ist ein schreibgeschütztes Skalarregister mit dem Bereich [0..1], das einen neuen Tiefenwert für einen Tiefentest für den Tiefenschablonenpuffer zurückgibt.

Syntax

oDepth

 

Hierbei gilt:

Name BESCHREIBUNG
oDepth Neuer Tiefenwert für einen Tiefentest mit dem Tiefenschablonenpuffer

 

Es ist wichtig zu wissen, dass das Schreiben in oDepth den Verlust von hardwarespezifischen Tiefenpufferoptimierungsalgorithmen (d. h. hierarchisches Z) verursacht, die die Leistung von Tiefentests beschleunigen.

Beim Schreiben in oDepth ist das Replizieren von Quell swizzle (.x | .y | .z | .w) erforderlich. Explizite Schreibmasken sind nicht zulässig.

Das Schreiben in das oDepth-Register ersetzt den interpolierten Tiefenwert (und ignoriert alle Renderstates für Tiefenverzerrung/Steigungsskala). Wenn kein Tiefenpuffer erstellt oder an das Gerät angefügt wurde, wird das Schreiben in oDepth ignoriert.

Wenn Sie Multisampling verwenden und in oDepth schreiben, wird ihr Tiefenwert für alle abgedeckten Unterstichprobenspeicherorte repliziert, da der Pixelshader nur einmal pro Pixel ausgeführt wird. Der Tiefentest wird weiterhin pro Stichprobe durchgeführt, aber Sie verfügen nicht über einen Tiefenwert pro Stichprobe, der in den Vergleich des Pixelshaders eingeht, wie sie es wäre, wenn Sie oDepth nicht geschrieben hätten.

Wenn für eine Anwendung ein w-puffer als Tiefenpuffer festgelegt ist, muss dies beim Schreiben in oDepth berücksichtigt werden. Es muss möglicherweise W-Bereichsinformationen an den Pixelshader senden und den w-Bereich berechnen, um die in oDepth geschriebenen w-Werte zu skalieren.

ps_2_0- und ps_2_x einschränkungen

  • oDepth kann nur mit der mov - ps-Anweisung geschrieben werden und kann nur einmal ausgeführt werden.
  • Beim Schreiben in oDepth ist kein Quellmodifizierer zulässig.
  • Beim Schreiben in oDepth ist kein Anweisungsmodifizierer zulässig.
  • Kein Schreiben in oDepth innerhalb eines Flusssteuerungskonstrukts oder bei Verwendung von Prädication.

ps_3_0 Einschränkungen

  • Für ps_3_0 können die Ausgaberegister oC# und oD# beliebig oft geschrieben werden. Die Ausgabe des Pixelshaders stammt aus dem Inhalt der Ausgaberegister am Ende der Shaderausführung. Wenn ein Schreibvorgang in ein Ausgaberegister nicht erfolgt, z. B. aufgrund der Flusssteuerung oder wenn der Shader ihn einfach nicht geschrieben hat, wird auch das entsprechende Renderziel nicht aktualisiert. Wenn eine Teilmenge der Kanäle in einem Ausgaberegister geschrieben wird, werden nicht definierte Werte in die verbleibenden Kanäle geschrieben.
  • Sie können in oDepth innerhalb der Ablaufsteuerung oder Prädication schreiben, solange alle möglichen Pfade schließlich in das Register schreiben.
  • Sie dürfen keine Farbverlaufsberechnungen (oder Vorgänge, die implizit Farbverlaufsberechnungen wie texld - ps_2_0 und höher, texldb - ps, texldp - ps) innerhalb von Flusssteuerungsanweisungen ausführen, deren Verzweigungsbedingungen pro Primitive variieren (d. h. Anweisungen zur dynamischen Flusssteuerung). Die Anweisungsvorbehandlung wird nicht als dynamische Flusssteuerung betrachtet.

Register