texldp - ps

Istruzione di caricamento trama proiettata. Questa istruzione divide la coordinata della trama di input in base al quarto elemento (.a o .w) appena prima del campionamento.

Sintassi

texldp dst, src0, src1

 

dove

  • dst è il registro di destinazione.
  • src0 è un registro di origine che fornisce le coordinate della trama per l'esempio di trama. Vedere Registro coordinate trama.
  • src1 identifica sampler (Direct3D 9 asm-ps) ( s#), dove # specifica il numero di sampler trama da eseguire per l'esempio. L'sampler ha associato una trama e uno stato di esempio definito da D3DSAMPLERSTATETYPE.

Per il set di restrizioni quando si usa texldp, vedere texld.

Commenti

texldp esegue la proiezione sulle coordinate letti da src0 prima di eseguire l'esempio. Ogni coordinata della trama è divisa da src0.w, quindi la trama viene campionata. Al termine del texldp, il contenuto di src0 non è interessato (a meno che dst non sia lo stesso registro). Un'alternativa all'uso di texldp consiste nell'eseguire manualmente la divisione di proiezione nello shader. Tuttavia, l'esecuzione della divisione nel codice shader è in genere più lenta rispetto a quando eseguita dall'istruzione texldp, quindi evitare tale matematica aggiuntiva quando possibile.

Il numero di coordinate necessarie per src0 per eseguire l'esempio di trama dipende dal modo in cui è stato dichiarato src1, oltre al componente .w. I tipi di sampler vengono dichiarati con dcl_samplerType (sm2, sm3 - ps asm). Se src1 viene dichiarato come sampler 2D, src0 deve contenere coordinate con estensione xyw; se src1 viene dichiarato come sampler del cubo o un sampler del volume, src0 deve contenere coordinate con estensione xyzw. Il campionamento di una trama 2D con coordinate xyzw è consentito (la coordinata z viene ignorata).

Se la trama di origine contiene meno di quattro componenti, le impostazioni predefinite vengono inserite nei componenti mancanti. Le impostazioni predefinite dipendono dal formato della trama, come illustrato nella tabella seguente.

Formato trama Valori predefiniti per i componenti mancanti
D3DFMT_R5G6B5, D3DFMT_R8G8B8, D3DFMT_L8, D3DFMT_L16, D3DFMT_R3G3B2, D3DFMT_CxV8U8, D3DFMT_L6V5U5 A = 1,0
D3DFMT_V8U8, D3DFMT_V16U16, D3DFMT_G16R16, D3DFMT_G16R16F, D3DFMT_G32R32F B = A = 1,0
D3DFMT_A8 R = G = B = 0,0
D3DFMT_R16F, D3DFMT_R32F G = B = A = 1,0
Tutti i formati di profondità/stencil R = B = 0,0, A = 1,0

 

Questa istruzione è supportata nelle versioni seguenti:

Versioni di Pixel shader 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texldp x x x x x

 

ps_2_0 e ps_2_x

dst deve essere un registro temporaneo (r#) e è consentita solo la maschera con estensione xyzw (maschera predefinita).

src0 deve essere un registro coordinate trama (t#) o un registro temporaneo (r#), senza modificatore o swizzle.

src1 deve essere un sampler (Direct3D 9 asm-ps) ( s#), senza modificatore o swizzle.

Se il bit di D3DD3DPSHADERCAPS2_0_NODEPENDENTREADLIMIT non è impostato (in D3DPSHADERCAPS2_0), un'istruzione di trama specificata (texld, texldp, texldb - ps, texldd ) può essere dipendente, al massimo, terzo ordine. Un'istruzione di trama dipendente dal primo ordine è un'istruzione di trama in cui:

  • src0 è un registro temporaneo (r#)
  • dst è stato scritto in precedenza, ora in fase di scrittura.

Un'istruzione di trama dipendente da secondo ordine è definita come istruzione trama che legge o scrive in un registro temporaneo (r#) il cui contenuto, prima di eseguire l'istruzione trama, dipende (forse indirettamente) dal risultato di un'istruzione di trama dipendente dal primo ordine. Un'istruzione di trama dipendente dall'ordine (n)th deriva da un'istruzione di trama (n - 1)th-order.

ps_3_0

Per ps_3_0, src1 deve essere un sampler (Direct3D 9 asm-ps) ( s#), senza modificatore. Swizzle è consentito su src1 e, quando applicato, i risultati della ricerca della trama sono pre-swizzled prima di scrivere in dst.

Istruzioni sul pixel shader