texldl – vs
Probieren Sie eine Textur mit einem bestimmten Sampler aus. Die bestimmte mipmap-Detailebene, die abgetastet wird, muss als vierte Komponente der Texturkoordinate angegeben werden.
texldl dst, src0, src1 |
---|
Hierbei gilt:
- dst ist ein Zielregister.
- src0 ist ein Quellregister, das die Texturkoordinaten für das Texturbeispiel bereitstellt.
- src1 identifiziert das Quell-Samplerregister (s#), wobei # angibt, welche Textur-Samplernummer für das Beispiel verwendet werden soll. Der Sampler verfügt über eine Textur und einen Durch die D3DSAMPLERSTATETYPE-Enumeration definierten Steuerelementzustand (z. B. D3DSAMP_MINFILTER).
Vertex-Shaderversionen | 1_1 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|
texldl | x | x |
texldl sucht die Textur auf der Samplerphase, auf die von src1 verwiesen wird. Die Detailebene wird aus src0.w ausgewählt. Dieser Wert kann negativ sein. In diesem Fall ist die ausgewählte Detailebene die "nullte Karte" (größte Karte) mit dem MAGFILTER. Da src0.w ein Gleitkommawert ist, wird der Bruchwert verwendet, um (wenn MIPFILTER LINEAR ist) zwischen zwei Mip-Ebenen zu interpolieren. Samplerzustände MIPMAPLODBIAS und MAXMIPLEVEL werden berücksichtigt. Weitere Informationen zu Samplerzuständen finden Sie unter D3DSAMPLERSTATETYPE.
Wenn ein Shaderprogramm Beispiele aus einem Sampler ohne Textursatz aufweist, wird 0001 im Zielregister abgerufen.
Dies ist eine Annäherung an den Referenzgerätealgorithmus.
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 Maskierung der 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-vs) (s#) sein. src1 darf keinen Negate-Modifizierer verwenden. src1 kann Swizzle verwenden, das nach der Stichprobenentnahme angewendet wird, bevor die Schreibmaske berücksichtigt wird. Der Sampler muss (mit dcl_samplerType (sm3 - vs. 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 Cube deklariert wurde, ist eine Texturkoordinate mit drei Komponenten erforderlich (RGB). Die Überprüfung erzwingt, dass die für texldl 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 festgelegt hat, 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 ist zulässig, und es wird davon ausgegangen, dass die zusätzlichen Texturkoordinatenkomponenten ignoriert werden. Umgekehrt ist das Sampling einer Textur mit mehr Dimensionen als in der Texturkoordinate nicht zulässig.
- Wenn die src0 (Texturkoordinate) ein temporäres Register (r#) ist, müssen die für die Suche erforderlichen Komponenten (oben beschrieben) zuvor geschrieben worden sein.
- Das Sampling von RGB-Texturen ohne Vorzeichen führt zu Floatwerten zwischen 0,0 und 1,0.
- Das Sampling von Vorzeichentexturen 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 beider Bereiche ist nicht definiert.
- Es gibt kein abhängiges Leselimit.