texldl - vs

Beispiel für eine Textur mit einem bestimmten Sampler. Die bestimmte mipmap-Detailebene 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.
  • src1 identifiziert das Quell-Samplerregister (s#), wobei # angibt, welche Textur-Samplernummer zum Beispiel verwendet werden soll. Der Sampler hat ihr eine Textur und einen Steuerelementzustand zugeordnet, der durch die D3DSAMPLERSTATETYPE-Enumeration (z. B. D3DSAMP_MINFILTER) definiert ist.

Bemerkungen

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 von 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 verwendet, um zwischen zwei MIP-Ebenen zu interpolieren (wenn MIPFILTER LINEAR ist). Sampler-Zustände MIPMAPLODBIAS und MAXMIPLEVEL werden berücksichtigt. Weitere Informationen zu Samplerzuständen finden Sie unter D3DSAMPLERSTATETYPE.

Wenn ein Shaderprogrammbeispiel aus einem Sampler, der keinen Textursatz aufweist, wird 0001 im Zielregister abgerufen.

Dies ist eine Annäherung an den Referenzgerätalgorithmus.

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. Siehe Zielregisterformatierung.
  • 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 kann keinen Negate-Modifizierer verwenden. src1 kann Schwarm verwenden, der nach dem Sampling 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 sie als Würfel deklariert wurde, ist eine dreiteilige Texturkoordinate (RGB) erforderlich. Die Überprüfung erzwingt, dass Koordinaten, die texldl bereitgestellt werden, für die Texturdimension ausreichen, die für den Sampler deklariert ist. Es ist jedoch nicht garantiert, dass die Anwendung tatsächlich eine Textur (über die API) mit Dimensionen festgelegt hat, die der Dimension entsprechen, die für den Sampler deklariert ist. In diesem Fall versucht die Laufzeit, falsche Übereinstimmungen (möglicherweise nur im Debug) zu erkennen. 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 komponenten, die für die Nachschlagevorgänge (oben beschrieben) zuvor geschrieben wurden.
  • Das Sampling nicht signierter RGB-Texturen führt zu Gleitkommawerten zwischen 0,0 und 1,0.
  • Das Sampling signierter 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. Das Sampling außerhalb eines bereichs ist nicht definiert.
  • Es gibt kein abhängiges Leselimit.

Vertex-Shaderanweisungen