Registre des couleurs de sortie

Les registres de sortie de couleur du nuanceur de pixels (oC#) sont des registres en écriture seule qui génèrent des résultats vers plusieurs cibles de rendu.

Syntaxe

Oc #

 

Où :

Nom Description
oC0 cible de rendu #0
oC1 cible de rendu #1
oC2 cible de rendu #2
oC3 cible de rendu #3

 

Notes

  • Si oCn est écrit mais qu’il n’existe aucune cible de rendu correspondante, cette écriture dans oCn est ignorée.
  • Les états de rendu D3DRS_COLORWRITEENABLE, D3DRS_COLORWRITEENABLE1, D3DRS_COLORWRITEENABLE2 et D3DRS_COLORWRITEENABLE3 déterminent quels composants d’oCn sont finalement écrits dans la cible de rendu (après le mélange, le cas échéant). Si le nuanceur écrit certains des composants définis par les états de rendu D3DRS_COLORWRITEENABLE* pour un registre oCn donné, les canaux non écrits produisent des valeurs non définies dans la cible de rendu correspondante. Si aucun des composants d’un oCn n’est écrit, la cible de rendu correspondante ne doit pas être mise à jour du tout (comme indiqué ci-dessus), de sorte que les états de rendu D3DRS_COLORWRITEENABLE* ne s’appliquent pas.

Restrictions du modèle de nuanceur 2

  • oCn ne peut être écrit qu’avec l’instruction mov - ps .
  • oC0 doit toujours être écrit dans le nuanceur.
  • Aucun swizzle source (sauf .xyzw = swizzle par défaut) ou modificateur source n’est autorisé lors de l’écriture dans un oCn.
  • Aucun masque d’écriture de destination (sauf .xyzw = masque par défaut) ou modificateur d’instruction n’est autorisé lors de l’écriture dans un oCn.
  • Si oCn est écrit, oC0 - oCn-1 doit également être écrit. Par exemple, pour écrire dans oC2, vous devez également écrire dans oC0 et oC1.
  • Au maximum une écriture dans n’importe quel oC# par nuanceur est autorisée.
  • Par ps_2_x et ps_3_0, vous ne pouvez pas écrire dans les registres oC# et oD# dans le contrôle de flux dynamique ou la prédication (les écritures dans oC# à l’intérieur du contrôle de flux statique sont correctes).

Restrictions du modèle de nuanceur 3

  • Par ps_3_0, les registres de sortie oC# et oD# peuvent être écrits n’importe quel nombre de fois. La sortie du nuanceur de pixels provient du contenu des registres de sortie à la fin de l’exécution du nuanceur. Si une écriture dans un registre de sortie ne se produit pas, peut-être en raison du contrôle de flux ou si le nuanceur ne l’a tout simplement pas écrit, le rendertarget correspondant n’est pas non plus mis à jour. Si un sous-ensemble des canaux d’un registre de sortie est écrit, les valeurs non définies sont écrites dans les canaux restants.
  • Par ps_3_0, les registres oC# peuvent être écrits avec n’importe quel masque d’écriture.
  • Par ps_2_x et ps_3_0, vous ne pouvez pas écrire dans les registres oC# et oD# dans le contrôle de flux dynamique ou la prédication (les écritures dans oC# à l’intérieur du contrôle de flux statique sont correctes).
  • Vous ne pouvez pas effectuer de calculs de gradient (ou d’opérations qui appellent implicitement des calculs de gradient tels que texld - ps_2_0 et jusqu’à, texldb - ps, texldp - ps) à l’intérieur d’instructions de contrôle de flux dont les conditions de branchement varient selon la primitive (c’est-à-dire : instructions de contrôle de flux dynamique). La prédication des instructions n’est pas considérée comme un contrôle de flux dynamique.

Registres

Cibles de rendu multiples (Direct3D 9)