Skip to main content
Cette rubrique décrit les formats de bas niveau de compression et de décompression des couleurs des cibles de rendu qui sont utilisés par le matériel graphique.

Pipeline graphique

Le diagramme suivant illustre le pipeline graphique logique. Les blocs de profondeur et de couleur sont les deux dernières opérations logiques avant la sortie du rendu. Pipeline graphique logique Les formats de compression des textures sont gérés différemment de ceux des couleurs et de la profondeur. Pour plus d’informations, consultez Gestion native des ressources pour XBOX One.

Terminologie de la compression des couleurs

Voici les termes courants utilisés pour décrire les systèmes de compression.

Le bloc de couleur

Le bloc de couleur est responsable du transfert en mémoire des données de couleur produites par le nuanceur de pixels. Ce processus comprend la gestion de la compression MSAA, le mélange des couleurs, le formatage des couleurs, la ROP et l’écriture en mémoire. Le bloc de couleur permet de combiner la couleur de sortie du nuanceur pour un pixel (couleur source, CS) avec la couleur actuelle de ce pixel dans la cible de rendu (couleur de destination, CD) à l’aide de facteurs de mélange (BF(S,D)) et d’une fonction de combinaison spécifiée. L’équation générale de ce mélange est appelée équation de mélange.
Le bloc de couleur est responsable de la conversion de la couleur de sortie du nuanceur, formatée en UINT32, SINT32, FP32 ou FP16, au format de la cible de rendu. Seules les conversions uint->uint, sint->sint, unorm->unorm, snorm->snorm et FP->non entier sont prises en charge. Le nuanceur produit des valeurs UINT32, SINT32 et FP32. Le système de nuanceurs convertit FP32 en FP16 ou en U/SNORM16, selon le cas, pour des raisons de performances. Le bloc de couleur prend en charge un certain nombre de fonctionnalités spéciales :
  • Un mode de mélange spécial appelé mélange à double source. Alors que la plupart des facteurs de mélange sont fonction de la couleur source, de la couleur de destination ou de la couleur constante de mélange, le mélange à double source utilise une deuxième couleur de sortie du nuanceur (affectée à MRT1) comme facteurs de mélange. La couleur source de l’équation de mélange provient de MRT0.
  • MSAA 2x, 4x et 8x. Le bloc de couleur comporte plusieurs fonctionnalités propres au MSAA, comme une résolution matérielle de toute surface pouvant être mélangée à l’aide d’un filtre boîte (calcul de la moyenne des sous-échantillons d’un pixel pour obtenir sa couleur finale) et la compression des couleurs (décrite dans la section suivante).
  • Une mémoire tampon d’image à correction gamma utilisant le format 8_8_8_8 sRGB.
  • L’effacement rapide de la surface de couleur. Cela s’effectue en effaçant uniquement les bits CMask associés à chaque tuile de la surface. À mesure que des quads sont dessinés dans des tuiles effacées rapidement, le bloc de couleur dispose d’un matériel spécial pour remplir après coup les parties des tuiles qui n’ont pas été touchées.
Une cible de rendu effacée rapidement peut nécessiter l’écriture de sa couleur d’effacement dans les tuiles qui ne recoupent pas la géométrie rendue après l’effacement, au moment où la surface de rendu doit être lue. C’est ce qu’on appelle l’élimination de l’effacement rapide. En pratique, les zones effacées dans le CMask doivent être reproduites comme effacées sur la surface principale. Le bloc de couleur est mis en œuvre sous la forme d’un pipeline à trois étapes.
  1. Le cache CMask gère les informations de compression au niveau des tuiles.
  2. Le cache FMask gère les informations de compression au niveau des quads.
  3. Le cache de couleur et le mélangeur effectuent les mises à jour des pixels.

Compression des couleurs

L’anticrénelage multiéchantillonné (MSAA) est une méthode visant à réduire les artefacts visuels causés par la résolution limitée des pixels. Avec le MSAA, la valeur finale de chaque pixel est déterminée par 2, 4 ou 8 échantillons de couleur prélevés à l’intérieur du pixel. Chacun de ces échantillons reçoit la même couleur du nuanceur de pixels, mais chaque échantillon fait l’objet d’un test de profondeur distinct. Il en résulte des détails plus fins pour les arêtes de la géométrie. Les pixels multiéchantillonnés exigent plus de mémoire et de traitement que les pixels à échantillon unique, c’est pourquoi un schéma de compression des couleurs est mis en œuvre. La compression des couleurs est un schéma sans perte, par pixel, dont l’objectif est d’économiser la bande passante mémoire et de réduire au minimum le nombre de cycles d’horloge nécessaires pour traiter un pixel multiéchantillonné. En MSAA 8x (8 échantillons par pixel), chaque pixel peut nécessiter 8 fois la bande passante mémoire et 8 fois la puissance de traitement d’un simple pixel à échantillon unique. En général, les échantillons d’un pixel sont très redondants, et ne contiennent qu’une ou deux valeurs de couleur uniques. Il est rare que tous les échantillons d’un pixel MSAA 8x aient 8 valeurs uniques. Une grande disparité entre les échantillons n’est pas impossible. Elle peut se produire dans une scène comportant une géométrie finement pavée, ou simplement par hasard. L’objectif du schéma de compression est de tirer parti de la redondance des échantillons dans une scène typique.

Schéma de compression des couleurs

Pour compresser un pixel MSAA, on tire parti de la redondance en ne stockant chaque couleur unique qu’une seule fois. Par exemple, en MSAA 8x, les 8 échantillons pourraient ressembler aux couleurs présentées dans le tableau suivant. Il n’y a que trois couleurs uniques, mais elles occupent actuellement l’espace de 8. Trois couleurs uniques occupant l'espace de huit Le niveau de compression le plus bas, appelé compression FMask, élimine cette redondance en attribuant un pointeur à chaque échantillon d’un pixel. Le pointeur indique au schéma de compression quel échantillon contient la couleur réelle de cet échantillon. Un pointeur MSAA 8x ne fait que 3 bits, tandis que ceux du MSAA 4x et du MSAA 2x font respectivement 2 bits et 1 bit. Comme le montre le tableau précédent, cela réduit la quantité de données de couleur nécessaires. Puisque nous devons toujours pouvoir avoir un pixel comportant le nombre maximal de couleurs d’échantillons uniques, le schéma de compression ne réduit pas l’empreinte mémoire. Le schéma de compression nous permet plutôt d’économiser de la bande passante mémoire en ne lisant/écrivant que les emplacements d’échantillons vers lesquels pointe au moins un pointeur FMask. Dans le tableau précédent, nous sommes passés de la lecture/écriture de 8 couleurs à la lecture/écriture de seulement 3. De plus, toutes les opérations du bloc de couleur (comme le mélange ou la ROP) ne s’appliquent qu’à 3 couleurs au lieu de 8, comme le montrent les tableaux suivants. Mémoire FMask et mémoire de couleur Le schéma de compression met également en œuvre un niveau de compression supérieur appelé compression CMask. Dans le tableau précédent, bien que nous économisions de la bande passante grâce à une quantité moindre de données de couleur, nous devons quand même lire 8 pointeurs FMask par pixel. La compression CMask économise de la bande passante mémoire en réduisant au minimum la quantité de données de pointeurs lues. Dans le cas courant, il n’y a qu’un ou deux pointeurs uniques. Le CMask est une valeur de quatre bits qui encode les régions effacées rapidement et le nombre de plans de bits à charger pour une tuile donnée. Il y a 1 bit de données d’effacement rapide par région. Une valeur de 0 signifie que la région est effacée rapidement. Un encodage de deux bits indique le nombre de plans de bits à charger pour une tuile donnée, comme le montre le tableau suivant. Plans de bits CMask

Anticrénelage de qualité améliorée (EQAA)

L’anticrénelage de qualité améliorée (EQAA) est une compression avec perte pour l’anticrénelage. Il s’agit d’une extension de l’algorithme de compression des couleurs sans perte. Le stockage des couleurs est réduit de sorte qu’il n’y a pas assez d’espace pour avoir une couleur unique par échantillon. La plupart du temps, un pixel ne comporte qu’un petit nombre de couleurs uniques. Le FMask peut les mapper pour couvrir tout le pixel. Pour l’EQAA, le bloc de couleur prend en charge jusqu’à 16 échantillons. Le bloc de couleur ne prend pas en charge 16 échantillons pour le MSAA normal en raison de l’empreinte mémoire excessive. Le bloc de couleur ne tente pas de deviner ni d’interpoler les couleurs. Lorsqu’il ne peut pas déterminer ce que devrait être une couleur ou qu’il n’a pas les moyens de la stocker, le bloc de couleur marque l’échantillon correspondant comme inconnu dans le FMask. Le rendu pour l’EQAA se déroule normalement comme en MSAA, mais il est soumis à la limitation selon laquelle seul un certain nombre d’échantillons sont exacts. Le nombre d’échantillons par surface est limité.

Compatibilité des fonctionnalités

Le tableau suivant présente les combinaisons d’opérations autorisées dans le bloc de couleur. Combinaisons d'opérations autorisées dans le bloc de couleur

API de compression des couleurs

Le MSAA, l’EQAA, le FMask et le CMask sont référencés par un certain nombre d’API, de structures et d’énumérations. La bibliothèque XG fournit une disposition pour les paramètres FMask et CMask. Pour plus d’informations, consultez ID3D12Device::CreateComponentPlacedResourceX. Notez que les appels à ID3D12GraphicsCommandList::RSSetMSAAParametersX ou à ID3D12GraphicsCommandList1::SetSamplePositions doivent inclure des paramètres d’état MSAA complets. Notez également que les fonctions intrinsèques du langage HLSL (High-Level Shader Language) permettant d’obtenir le nombre d’échantillons et leurs positions retournent des positions d’échantillons incorrectes lorsque ces API sont utilisées. Pour plus d’informations, consultez les champs et les remarques des structures et énumérations suivantes :

Performances et débogage

L’outil PIX comporte un certain nombre de tests propres aux performances du MSAA. Pour plus d’informations, consultez Dr. PIX. De nombreux compteurs, à commencer par CB_PERF_SEL_CM_FC_TILE_VALID_READY, font référence aux opérations FMask et CMask. Pour plus d’informations, consultez Tableau des compteurs matériels de PIX.

Voir aussi

Décodage CMask
Last modified on October 6, 2026