dcl_usage Ausgabe (sm1, sm2, sm3 – vs asm)
Die verschiedenen Arten von Ausgaberegistern wurden in zwölf Ausgaberegister reduziert (zwei für Farbe, acht für Textur, eines für position und eines für Nebel und Punktgröße). Diese können für alles verwendet werden, was der Benutzer für den Pixelshader interpolieren möchte: Texturkoordinaten, Farben, Nebel usw.
Ausgaberegister erfordern Deklarationen, die Semantik enthalten. Bei instance werden die alten Positions- und Punktgrößenregister ersetzt, indem ein Ausgaberegister mit einer Positions- oder Punktgrößensemantik deklariert wird.
Von den zwölf Ausgaberegistern haben alle zehn (nicht notwendigerweise o0 bis o9) vier Komponenten (xyzw), eine andere muss als Position deklariert werden (und muss auch alle vier Komponenten enthalten), und optional kann eine weitere eine Skalarpunktgröße sein.
Syntax
Die Syntax zum Deklarieren von Ausgaberegistern ähnelt den Deklarationen für das Eingaberegister:
- dcl_semantics o[.write_mask]
Wo:
- dcl_semantics können den gleichen Satz von Semantik wie für die Eingabedeklaration verwenden. Semantische Namen stammen von D3DDECLUSAGE (und werden mit einem Index wie position3 gekoppelt). Es muss immer ein Ausgaberegister mit der Positiont0-Semantik vorhanden sein, wenn es nicht für die Verarbeitung von Scheitelpunkten verwendet wird. Die Positiont0-Semantik und die pointsize0-Semantik sind die einzigen, die über die einfache Verknüpfung von Vertex zu Pixelshadern hinausgehen. Bei Shadern mit Flusssteuerung wird davon ausgegangen, dass die Ausgabe im ungünstigsten Fall deklariert wird. Es gibt keine Standardwerte, wenn ein Shader nicht tatsächlich ausgibt, was er deklariert (aufgrund der Flusssteuerung).
- o ist ein Ausgaberegister. Siehe Output_Registers.
- write_mask gibt das gleiche Ausgaberegister an, das mehrmals deklariert werden kann (sodass eine andere Semantik auf einzelne Komponenten angewendet werden kann), jedes Mal mit einer eindeutigen Schreibmaske. Dieselbe Semantik kann jedoch nicht mehrmals in einer Deklaration verwendet werden. Dies bedeutet, dass Vektoren vier Komponenten oder weniger sein müssen und keine Registergrenzen mit vier Komponenten (einzelne Register) überschreiten dürfen. Wenn die Punktgrößensemantik verwendet wird, sollte sie über eine vollständige Schreibmaske verfügen, da sie als Skalar betrachtet wird. Wenn die Positionssemantik verwendet wird, sollte sie über eine vollständige Schreibmaske verfügen, da alle vier Komponenten geschrieben werden müssen.
Bemerkungen
Vertexshaderversionen | 3_0 | 3_sw |
---|---|---|
dcl_usage | x | x |
Alle dcl_usage Anweisungen müssen vor der ersten ausführbaren Anweisung angezeigt werden.
Deklarationsbeispiele
vs_3_0
dcl_color4 o3.x // color4 is a semantic name.
dcl_texcoord3 o3.yz // Different semantics can be packed into one register.
dcl_fog o3.w
dcl_tangent o4.xyz
dcl_position o7.xyzw // position must be declared to some unique register
// in a vertex shader, with all 4 components.
dcl_psize o6 // Pointsize cannot have a mask
// (that is, mask is full .xyzw)
// This is an implied scalar register.
// No other semantics can be assigned to any components
// of this register.
// If pointsize declaration is not used (typical),
// only 11 "out" registers are available, not 12.
// Pixel shaders cannot see this value.
Zugehörige Themen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für