texldl - ps
Probieren Sie eine Textur mit einem bestimmten Sampler aus. Die jeweilige Mipmap-Detailebene, die abgetastet wird, muss als vierte Komponente der Texturkoordinate angegeben werden.
Syntax
texldl dst, src0, src1 |
---|
Hierbei gilt:
- dst ist ein Zielregister.
- src0 ist ein Quellregister, das die Texturkoordinaten für das Texturbeispiel bereitstellt. Siehe Texturkoordinatenregister.
- src1 identifiziert das Quell-Samplerregister (s#), wobei # angibt, welche Textur-Samplernummer als Beispiel verwendet werden soll. Der Sampler verfügt über eine Textur und einen Durch die D3DSAMPLERSTATETYPE-Enumeration definierten Steuerelementzustand (z. B. D3DSAMP_MINFILTER).
Bemerkungen
Pixelshaderversionen | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texldl | x | x |
texldl sucht die Textur, die auf der Samplerphase festgelegt ist, auf die von src1 verwiesen wird. Die Detailebene wird in src0.w ausgewählt. Dieser Wert kann negativ sein. In diesem Fall ist die ausgewählte Detailebene die nullte (größte Karte) mit dem MAGFILTER. Da src0.w ein Gleitkommawert ist, wird der Bruchwert zum Interpolieren (wenn MIPFILTER LINEAR ist) zwischen zwei Mip-Ebenen verwendet. Samplerzustände MIPMAPLODBIAS und MAXMIPLEVEL werden berücksichtigt. Weitere Informationen zu Samplerzuständen finden Sie unter D3DSAMPLERSTATETYPE.
Wenn ein Shaderprogramm Stichproben aus einem Sampler ohne Textursatz aufweist, wird 0001 im Zielregister abgerufen.
Im Folgenden finden Sie einen groben Algorithmus, dem das Referenzgerät folgt:
LOD = src0.w + LODBIAS;
if (LOD <= 0 )
{
LOD = 0;
Filter = MagFilter;
tex = Lookup( MAX(MAXMIPLEVEL, LOD), Filter );
}
else
{
Filter = MinFilter;
LOD = MAX( MAXMIPLEVEL, LOD );
tex = Lookup( Floor(LOD), Filter );
if( MipFilter == LINEAR )
{
tex1 = Lookup( Ceil(LOD), Filter );
tex = (1 - frac(src0.w))*tex + frac(src0.w)*tex1;
}
}
Beschränkungen:
- Die Texturkoordinaten sollten nicht nach Texturgröße skaliert werden.
- dst muss ein temporäres Register (r#) sein.
- dst kann eine Schreibmaske akzeptieren. Weitere Informationen finden Sie unter Schreibmaske für Zielregister.
- Die Standardwerte für fehlende Komponenten sind entweder 0 oder 1 und hängen vom Texturformat ab.
- src1 muss ein Sampler (Direct3D 9 asm-ps) (s#) sein. src1 darf keinen Negationsmodifizierer verwenden (siehe Schreibmaske für Zielregister). src1 kann swizzle (siehe Source Register Swizzling) verwenden, das nach dem Sampling angewendet wird, aber bevor die Schreibmaske (siehe Zielregister-Schreibmaske) berücksichtigt wird. Der Sampler muss (mit dcl_samplerType (sm2, sm3 – ps asm)) am Anfang des Shaders deklariert worden sein.
- Die Anzahl der Koordinaten, die zum Ausführen des Texturbeispiels erforderlich sind, hängt davon ab, wie der Sampler deklariert wurde. Wenn er als Würfel deklariert wurde, ist eine Texturkoordinate mit drei Komponenten (.rgb) erforderlich. Die Überprüfung erzwingt, dass die für tex_ldl bereitgestellten Koordinaten für die für den Sampler deklarierte Texturdimension ausreichen. Es ist jedoch nicht garantiert, dass die Anwendung tatsächlich eine Textur (über die API) mit Dimensionen festlegt, die der für den Sampler deklarierten Dimension entsprechen. In einem solchen Fall versucht die Runtime, Nichtübereinstimmungen zu erkennen (möglicherweise nur beim Debuggen). Das Sampling einer Textur mit weniger Dimensionen als in der Texturkoordinate vorhanden ist, wird zugelassen und angenommen, dass sie die zusätzlichen Texturkoordinatenkomponenten ignoriert. Umgekehrt ist das Sampling einer Textur mit mehr Dimensionen, als in der Texturkoordinate vorhanden sind, unzulässig.
- Wenn src0 (Texturkoordinate) temporäres Register ist, müssen die komponenten, die für die Suche (oben beschrieben) erforderlich sind, zuvor geschrieben worden sein.
- Das Sampling nicht signierter RGB-Texturen führt zu Gleitkommawerten zwischen 0,0 und 1,0.
- Das Sampling von signierten Texturen führt zu Gleitkommawerten zwischen -1,0 und 1,0.
- Beim Sampling von Gleitkommatexturen bedeutet Float16, dass die Daten innerhalb MAX_FLOAT16 liegen. Float32 bedeutet, dass der maximale Bereich der Pipeline verwendet wird. Die Stichprobenentnahme außerhalb eines Bereichs ist nicht definiert.
- Es gibt keine Abhängige Lesebeschränkung.
Zugehörige Themen