Partager via


ps_1_1__ps_1_2__ps_1_3__ps_1_4 Registres

Les nuanceurs de pixels dépendent des registres pour obtenir les données de vertex, pour générer des données de pixels, pour contenir les résultats temporaires pendant les calculs et pour identifier les étapes d’échantillonnage de texture. Il existe plusieurs types de registres, chacun avec une fonctionnalité unique. Cette section contient des informations de référence pour les registres d’entrée et de sortie implémentés par la version du nuanceur de pixels 1_X.

Enregistre les données de conservation à utiliser par le nuanceur de pixels. Les registres sont entièrement décrits dans les sections suivantes.

  • Register Types décrit les quatre types de registres disponibles et leurs objectifs.
  • Read Port Limit détaille les restrictions relatives à l’utilisation de plusieurs registres dans une seule instruction.
  • En lecture seule, l’écriture décrit les registres qui peuvent être utilisés pour la lecture, l’écriture ou les deux.
  • Plage détaille la plage des données de composant.

Types d’inscriptions

Nom Type Version 1_1 Version 1_2 Version 1_3 Version 1_4
c# Registre constant 8 8 8 8
R # Registre temporaire 2 2 2 6
T # Registre de texture 4 4 4 6
C # Registre de couleurs 2 2 2 2 en phase 2

 

  • Les registres de constantes contiennent des données constantes. Les données peuvent être chargées dans un registre constant à l’aide de SetPixelShaderConstantF ou elles peuvent être définies à l’aide def - ps. Les registres de constantes ne sont pas utilisables par les instructions d’adresse de texture. La seule exception est l’instruction texm3x3spec - ps , qui utilise un registre constant pour fournir un vecteur de rayons oculaires.

  • Les registres temporaires sont utilisés pour stocker les résultats intermédiaires. r0 sert également de sortie du nuanceur de pixels. La valeur en r0 à la fin du nuanceur est la couleur de pixels du nuanceur.

    La validation du nuanceur échouera CreatePixelShader sur tout nuanceur qui tente de lire à partir d’un registre temporaire qui n’a pas été écrit par une instruction précédente. D3DXAssembleShader échoue de la même façon, en supposant que la validation est activée (n’utilisez pas D3DXSHADER_SKIPVALIDATION).

  • Registres de texture

    Pour le nuanceur de pixels version 1_1 à 1_3, les registres de texture contiennent des données de texture ou des coordonnées de texture. Les données de texture sont chargées dans un registre de textures lorsqu’une texture est échantillonné. L’échantillonnage de texture utilise des coordonnées de texture pour rechercher, ou échantillonner, une valeur de couleur aux coordonnées spécifiées (u,v,w,q) tout en tenant compte des attributs d’état de l’étape de texture. Les données de coordonnées de texture sont interpolées à partir des données de coordonnées de texture de vertex et sont associées à une étape de texture spécifique. Il existe une association un-à-un par défaut entre le numéro d’étape de texture et l’ordre de déclaration des coordonnées de texture. Par défaut, le premier ensemble de coordonnées de texture définies au format de vertex est associé à l’étape de texture 0.

    Pour ces versions de nuanceur de pixels, les registres de texture se comportent comme des registres temporaires lorsqu’ils sont utilisés par des instructions arithmétiques.

    Pour le nuanceur de pixels version 1_4, les registres de texture (t#) contiennent des données de coordonnées de texture en lecture seule. Cela signifie que le jeu de coordonnées de texture et le numéro d’étape de texture sont indépendants les uns des autres. Le numéro d’étape de texture (à partir duquel échantillonner une texture) est déterminé par le numéro de registre de destination (r0 à r5). Pour l’instruction texld, le jeu de coordonnées de texture est déterminé par le registre source (t0 à t5), de sorte que le jeu de coordonnées de texture peut être mappé à n’importe quelle étape de texture. En outre, le registre source (spécifiant des coordonnées de texture) pour texld peut également être un registre temporaire (r#), auquel cas le contenu du registre temporaire est utilisé comme coordonnées de texture.

  • Les registres de couleurs contiennent des valeurs de couleur par pixel. Les valeurs sont obtenues par itération par pixel des valeurs de couleur diffuse et spéculaire dans les données de vertex. Pour les nuanceurs de pixels version 1_4, les registres de couleurs sont disponibles uniquement pendant la deuxième phase.

    Si le mode de nuance est défini sur D3DSHADE_FLAT, l’itération des deux couleurs de vertex (diffuse et spéculaire) est désactivée. Quel que soit le mode d’ombre, le brouillard est toujours itéré par le pipeline si le brouillard de pixels est activé. N’oubliez pas que le brouillard est appliqué plus tard dans le pipeline que le pixelshader.

    Il est courant de charger le registre v0 avec les données de couleur diffuse de vertex. Il est également courant de charger le registre v1 avec les données de couleur spéculaire de vertex.

    Les valeurs de données de couleur d’entrée sont limitées (saturées) à la plage 0 à 1, car il s’agit de la plage d’entrée valide pour les registres de couleurs dans le nuanceur de pixels.

    Les nuanceurs de pixels ont un accès en lecture seule aux registres de couleurs. Le contenu de ces registres est des valeurs itérées, mais l’itération peut être effectuée à une précision beaucoup plus faible que les coordonnées de texture.

Limite de port de lecture

La limite de port de lecture spécifie le nombre de registres différents de chaque type de registre qui peuvent être utilisés comme registre source dans une seule instruction.

Nom Type Version 1_1 Version 1_2 Version 1_3 Version 1_4
c# Registre constant 2 2 2 2
R # Registre temporaire 2 2 2 3
T # Registre de texture 2 3 3 1
C # Registre de couleurs 2 2 2 2 en phase 2

 

Par exemple, les registres de couleurs pour presque toutes les versions ont une limite de port de lecture de deux. Cela signifie qu’une seule instruction peut utiliser un maximum de deux registres de couleurs différents (v0 et v1 pour instance) comme registres sources. Cet exemple montre deux registres de couleurs utilisés dans la même instruction :

mad r0, v1, c2, v0

En lecture seule, en lecture/écriture

Les types de registre sont identifiés en fonction de la fonctionnalité de lecture seule (RO) ou de la capacité de lecture/écriture (RW) dans le tableau suivant. Les registres en lecture seule ne peuvent être utilisés que comme registres sources dans une instruction ; ils ne peuvent jamais être utilisés comme registre de destination.

Nom Type Version 1_1 Version 1_2 Version 1_3 Version 1_4
Nom Type 1_1 1_2 1_3 1_4
c# Registre constant RO RO RO RO
R # Registre temporaire L/E L/E L/E L/E
T # Registre de texture L/E L/E L/E Voir la note suivante
C # Registre de couleurs RO RO RO RO

 

Les registres compatibles RW peuvent être utilisés pour stocker des résultats intermédiaires. Cela inclut les registres temporaires et les registres de texture pour certaines versions du nuanceur.

Notes

  • Pour le nuanceur de pixels version 1_4, les registres de texture sont ro pour les instructions d’adressage de texture, et les registres de texture ne peuvent être ni lus ni écrits dans par des instructions arithmétiques. En outre, étant donné que les registres de texture sont devenus des registres de coordonnées de texture, l’accès RO n’est pas une régression des fonctionnalités précédentes.

 

Plage

La plage est la valeur de données de registre maximale et minimale. Les plages varient en fonction du type de registre. Les plages de certains registres peuvent être interrogées à partir des majuscules de l’appareil à l’aide de GetDeviceCaps.

Nom Type Plage Versions
c# Registre constant -1 à +1 Toutes les versions
R # Registre temporaire - PixelShader1xMaxValue vers + PixelShader1xMaxValue Toutes les versions
T # Registre de texture - MaxTextureRepeat vers + MaxTextureRepeat Toutes les versions
C # Registre de couleurs 0 à 1 Toutes les versions

 

Le matériel du nuanceur de pixels précoce représente les données dans les registres à l’aide d’un nombre à point fixe. Cela limite la précision à un maximum d’environ huit bits pour la partie fractionnaire d’un nombre. Gardez cela à l’esprit lors de la conception d’un nuanceur.

Pour le nuanceur de pixels version 1_1 à 1_3, MaxTextureRepeat doit être au minimum un. Pour 1_4, MaxTextureRepeat doit être d’au moins huit.

Pour plus d’informations sur PixelShader1xMaxValue, consultez D3DCAPS9 .

Registres