Condividi tramite


texldl - ps

Campiona una trama con un particolare campionatore. Il particolare livello di dettaglio mipmap sottoposto a campionamento deve essere specificato come quarto componente della coordinata della trama.

Sintassi

texldl dst, src0, src1

 

Dove:

  • dst è un registro di destinazione.
  • src0 è un registro di origine che fornisce le coordinate della trama per il campione di trama. Vedi Registro coordinate trama.
  • src1 identifica il registro del campionatore di origine (s#), dove # specifica il numero di campionatore di trama da campionare. L'campionatore ha associato una trama e uno stato di controllo definito dall'enumerazione D3DSAMPLERSTATETYPE (ad esempio, D3DSAMP_MINFILTER).

Commenti

Versioni del pixel shader 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texldl x x

 

texldl cerca la trama impostata nella fase del campionatore a cui fa riferimento src1. Il livello di dettaglio viene selezionato da src0.w. Questo valore può essere negativo, nel qual caso il livello di dettaglio selezionato è quello zero (mappa più grande) con MAGFILTER. Poiché src0.w è un valore a virgola mobile, il valore frazionaria viene usato per interpolare (se MIPFILTER è LINEAR) tra due livelli mip. Gli stati del campionatore MIPMAPLODBIAS e MAXMIPLEVEL sono onorati. Per altre informazioni sugli stati del campionatore, vedere D3DSAMPLERSTATETYPE.

Se un programma shader esegue esempi da un campionatore che non dispone di un set di trame, 0001 viene ottenuto nel registro di destinazione.

Di seguito è riportato un algoritmo approssimativo che il dispositivo di riferimento segue:

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;
   }
}

Restrizioni:

  • Le coordinate della trama non devono essere ridimensionate in base alle dimensioni della trama.
  • dst deve essere un registro temporaneo (r#).
  • dst può accettare una maschera di scrittura. Vedere Maschera di scrittura del registro di destinazione.
  • Le impostazioni predefinite per i componenti mancanti sono 0 o 1 e dipendono dal formato della trama.
  • src1 deve essere un sampler (Direct3D 9 asm-ps) (s#). src1 non può usare un modificatore di negazione (vedere Maschera di scrittura del registro di destinazione). src1 può usare swizzle (vedere Source Register Swizzling), che viene applicato dopo il campionamento, ma prima che venga rispettata la maschera di scrittura (vedere Destination Register Write Mask). Il campionatore deve essere stato dichiarato (usando dcl_samplerType (sm2, sm3 - ps asm)) all'inizio dello shader.
  • Il numero di coordinate necessarie per eseguire il campione di trama dipende dalla modalità di dichiarazione del campionatore. Se è stato dichiarato come cubo, è necessaria una coordinata di trama a tre componenti (con estensione rgb). La convalida impone che le coordinate fornite a tex_ldl Siano sufficienti per la dimensione della trama dichiarata per il campionatore. Tuttavia, non è garantito che l'applicazione imposti effettivamente una trama (tramite l'API) con dimensioni uguali alla dimensione dichiarata per il campionatore. In tal caso, il runtime tenterà di rilevare mancate corrispondenze (possibilmente solo nel debug). Il campionamento di una trama con un numero inferiore di dimensioni rispetto a quelle presenti nella coordinata della trama sarà consentito e si presuppone che ignori i componenti aggiuntivi delle coordinate della trama. Viceversa, il campionamento di una trama con più dimensioni di quelle presenti nella coordinata della trama non è valida.
  • Se src0 (coordinata trama) è Registro temporaneo, i componenti necessari per la ricerca (descritto in precedenza) devono essere stati scritti in precedenza.
  • Il campionamento di trame RGB senza segno comporterà valori float compresi tra 0,0 e 1,0.
  • Le trame con segno di campionamento genereranno valori float compresi tra -1,0 e 1,0.
  • Quando si esegue il campionamento delle trame a virgola mobile, Float16 indica che i dati verranno inclusi in MAX_FLOAT16. Float32 indica che verrà usato l'intervallo massimo della pipeline. Il campionamento all'esterno di uno degli intervalli non è definito.
  • Non esiste alcun limite di lettura dipendente.

Istruzioni per pixel shader