Condividi tramite


Modificatori per ps_1_X

I modificatori di istruzioni influiscono sul risultato dell'istruzione prima che venga scritto nel registro di destinazione. Ad esempio, usarli per moltiplicare o dividere il risultato per un fattore di due o per bloccare il risultato tra zero e uno. I modificatori di istruzioni vengono applicati dopo l'esecuzione dell'istruzione, ma prima di scrivere il risultato nel registro di destinazione.

Di seguito è riportato un elenco dei modificatori.

Modificatore Descrizione Sintassi Versione 1_1 Versione 1_2 Versione 1_3 Versione 1_4
_x2 Moltiplicare per 2 instruction_x2 X X X X
_x4 Moltiplicare per 4 instruction_x4 X X X X
_x8 Moltiplicare per 8 instruction_x8 X
_d2 Dividere per 2 instruction_d2 X X X X
_d4 Dividere per 4 instruction_d4 X
_d8 Dividere per 8 instruction_d8 X
_Sab Saturazione (bloccante da 0 e 1) instruction_sat X X X X

 

  • Il modificatore di moltiplicazione moltiplica i dati del registro per una potenza di due dopo la lettura. Equivale a uno spostamento a sinistra.
  • Il modificatore di divisione divide i dati del registro in base a una potenza di due dopo la lettura. Questo è lo stesso di uno spostamento a destra.
  • Il modificatore saturazione blocca l'intervallo di valori del registro da zero a uno.

I modificatori di istruzioni possono essere usati nelle istruzioni aritmetiche. Non possono essere usate nelle istruzioni relative all'indirizzo della trama.

Modificatore di moltiplicazione

Questo esempio carica il registro di destinazione (dest) con la somma dei due colori negli operandi di origine (src0 e src1) e moltiplica il risultato per due.

add_x2 dest, src0, src1

In questo esempio vengono combinati due modificatori di istruzione. Vengono innanzitutto aggiunti due colori negli operandi di origine (src0 e src1). Il risultato viene quindi moltiplicato per due e bloccato tra 0,0 e 1,0 per ogni componente. Il risultato viene salvato nel registro di destinazione.

add_x2_sat dest, src0, src1

Modificatore di divisione

Questo esempio carica il registro di destinazione (dest) con la somma dei due colori negli operandi di origine (src0 e src1) e divide il risultato per due.

add_d2 dest, src0, src1

Modificatore saturazione

Per istruzioni aritmetiche, il modificatore di saturazione blocca il risultato di questa istruzione nell'intervallo da 0,0 a 1,0 per ogni componente. Nell'esempio seguente viene illustrato come usare questo modificatore di istruzioni.

dp3_sat r0, t0_bx2, v0_bx2    ; t0 is bump, v0 is light direction

Questa operazione si verifica dopo qualsiasi modificatore di istruzioni di moltiplicazione o divisione. _sat viene spesso usato per bloccare i risultati del prodotto. Tuttavia, consente anche l'emulazione coerente dei metodi multipass in cui il buffer dei fotogrammi è sempre compreso nell'intervallo compreso tra 0 e 1 e della sintassi multitextura DirectX 6 e 7.0, in cui viene definita la saturazione in ogni fase.

Questo esempio carica il registro di destinazione (dest) con la somma dei due colori negli operandi di origine (src0 e src1) e blocca il risultato nell'intervallo da 0,0 a 1,0 per ogni componente.

add_sat dest, src0, src1

In questo esempio vengono combinati due modificatori di istruzione. Vengono innanzitutto aggiunti due colori negli operandi di origine (src0 e src1). Il risultato viene moltiplicato per due e bloccato tra 0,0 e 1,0 per ogni componente. Il risultato viene salvato nel registro di destinazione.

add_x2_sat dest, src0, src1

Istruzioni per pixel shader