dp3 - ps

Calcule le produit à trois composants des registres sources.

Syntaxe

dp3 dst, src0, src1

 

where

  • dst est le registre de destination.
  • src0 est un registre source.
  • src1 est un registre source.

Notes

Versions du nuanceur de pixels 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
dp3 x x x x x x x x x

 

L’extrait de code suivant montre les opérations effectuées :

dest.x = dest.y = dest.z = dest.w = 
  (src0.x * src1.x) + (src0.y * src1.y) + (src0.z * src1.z);

Cette instruction s’exécute dans le pipeline vectoriel, en écrivant toujours dans les canaux de couleur. Pour la version 1_4, cette instruction utilise toujours le pipeline vectoriel, mais peut écrire dans n’importe quel canal.

Une instruction avec un masque d’écriture .rgb (.xyz) de registre de destination peut être co-émise avec dp3, comme indiqué ci-dessous.

dp3 r0.rgb, t0, v0            // Copy scalar result to color components
+mov r2.a, t0                 // Copy alpha component from t0 in parallel 

L’instruction dp3 peut être modifiée à l’aide du modificateur d’argument d’entrée De la mise à l’échelle signée du registre source (_bx2) appliqué à ses arguments d’entrée s’ils ne sont pas déjà développés en plage dynamique signée. Pour un nuanceur d’éclairage, le modificateur d’instruction saturé (_sat) est souvent utilisé pour limiter les valeurs négatives au noir, comme illustré dans l’exemple suivant.

dp3_sat r0, t0_bx2, v0_bx2    // t0 is a bump map, v0 contains the light direction

Instructions du nuanceur de pixels