dcl_usage sortie (sm1, sm2, sm3 - vs asm)

Les différents types de registres de sortie ont été réduits en douze registres de sortie (deux pour la couleur, huit pour la texture, un pour la position et un pour la taille du brouillard et des points). Celles-ci peuvent être utilisées pour tout ce que l’utilisateur souhaite interpoler pour le nuanceur de pixels : coordonnées de texture, couleurs, brouillard, et ainsi de suite.

Les registres de sortie nécessitent des déclarations qui incluent la sémantique. Par exemple, les anciens registres de position et de taille de point sont remplacés par la déclaration d’un registre de sortie par une sémantique de position ou de taille de point.

Parmi les douze registres de sortie, dix (pas nécessairement o0 à o9) ont quatre composants (xyzw), un autre doit être déclaré comme position (et doit également inclure tous les quatre composants), et éventuellement une autre peut être une taille de point scalaire.

Syntaxe

La syntaxe de déclaration des registres de sortie est similaire aux déclarations du registre d’entrée :

  • dcl_semantics o[.write_mask]

Où:

  • dcl_semantics pouvez utiliser le même ensemble de sémantiques que pour la déclaration d’entrée. Les noms sémantiques proviennent de D3DDECLUSAGE (et sont associés à un index, tel que position3). Il doit toujours y avoir un registre de sortie avec la sémantique positiont0 lorsqu’il n’est pas utilisé pour traiter les sommets. La sémantique positiont0 et la sémantique pointsize0 sont les seules qui ont une signification au-delà de simplement autoriser la liaison entre vertex et nuanceurs de pixels. Pour les nuanceurs avec contrôle de flux, il est supposé que la sortie la plus mauvaise est déclarée. Il n’existe aucune valeur par défaut si un nuanceur ne génère pas réellement ce qu’il déclare (en raison du contrôle de flux).
  • o est un registre de sortie. Consultez Output_Registers.
  • write_mask indique le même registre de sortie qui peut être déclaré plusieurs fois (de sorte que différentes sémantiques peuvent être appliquées à des composants individuels), chaque fois avec un masque d’écriture unique. Toutefois, la même sémantique ne peut pas être utilisée plusieurs fois dans une déclaration. Cela signifie que les vecteurs doivent être quatre composants ou moins, et ne peuvent pas traverser les limites des registres de quatre composants (registres individuels). Lorsque la sémantique de taille de point est utilisée, elle doit avoir un masque d’écriture complet, car elle est considérée comme scalaire. Lorsque la sémantique de position est utilisée, elle doit avoir un masque d’écriture complet, car les quatre composants doivent être écrits.

Remarques

Versions du nuanceur de vertex 3_0 3_sw
dcl_usage x x

Toutes les instructions dcl_usage doivent apparaître avant la première instruction exécutable.

Exemples de déclaration

vs_3_0
dcl_color4     o3.x    // color4 is a semantic name.
dcl_texcoord3  o3.yz   // Different semantics can be packed into one register.
dcl_fog        o3.w 
dcl_tangent    o4.xyz
dcl_position   o7.xyzw // position must be declared to some unique register 
                       //   in a vertex shader, with all 4 components.

dcl_psize      o6      // Pointsize cannot have a mask 
                       //   (that is, mask is full .xyzw)
                       // This is an implied scalar register. 
                       // No other semantics can be assigned to any components
                       //   of this register.
                       // If pointsize declaration is not used (typical),
                       //   only 11 "out" registers are available, not 12.
                       // Pixel shaders cannot see this value.

Instructions du nuanceur de vertex