- Pipeline graphique
- Terminologie de la compression des couleurs
- Le bloc de couleur
- Compression des couleurs
- Schéma de compression des couleurs
- Anticrénelage de qualité améliorée (EQAA)
- Compatibilité des fonctionnalités
- API de compression des couleurs
- Performances et débogage
Pipeline graphique
Le diagramme suivant présente le pipeline graphique logique. Les blocs de profondeur et de couleur sont les deux dernières opérations logiques avant la sortie de rendu.
Terminologie de la compression des couleurs
Voici les termes couramment utilisés pour décrire les systèmes de compression.Le bloc de couleur
Le bloc de couleur est chargé de transférer en mémoire les données de couleur produites par le pixel shader. Ce processus comprend la gestion de la compression MSAA, le mélange des couleurs, le formatage des couleurs, les ROP et l’écriture en mémoire. Le bloc de couleur permet de combiner la couleur de sortie du shader 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.- Un mode de mélange spécial appelé mélange à double source. Alors que la plupart des facteurs de mélange dépendent de la couleur source, de la couleur de destination ou de la couleur constante de mélange, le mélange à double source utilise une seconde couleur de sortie du shader (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 la 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), ainsi que la compression des couleurs (décrite dans la section suivante).
- Un tampon d’image avec correction gamma utilisant le format 8_8_8_8 sRGB.
- L’effacement rapide de la surface de couleur. Il est obtenu en effaçant uniquement les bits CMask associés à chaque tuile de la surface. Lorsque des quads sont dessinés dans des tuiles effacées rapidement, le bloc de couleur dispose d’un matériel spécial pour remplir a posteriori les parties des tuiles qui n’ont pas été touchées.
- Le cache CMask gère les informations de compression au niveau des tuiles.
- Le cache FMask gère les informations de compression au niveau des quads.
- Le cache de couleur et le mélangeur effectuent les mises à jour des pixels.
Compression des couleurs
L’anticrénelage multiéchantillon (MSAA) est une méthode permettant de réduire les artefacts visuels dus à 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 dans le pixel. Chacun de ces échantillons reçoit la même couleur du pixel shader, mais chaque échantillon fait l’objet d’un test de profondeur distinct. On obtient ainsi des détails plus fins sur les bords de la géométrie. Les pixels multiéchantillonnés exigent davantage de mémoire et de traitement que les pixels à échantillon unique, c’est pourquoi un schéma de compression des couleurs est implémenté. La compression des couleurs est un schéma sans perte, par pixel, dont l’objectif est d’économiser de la bande passante mémoire et de réduire le nombre de cycles d’horloge nécessaires pour traiter un pixel multiéchantillonné. En 8xMSAA (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 règle générale, 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 8xMSAA aient 8 valeurs uniques. Une forte disparité entre les échantillons n’est pas impossible : elle peut se produire dans une scène comportant une géométrie finement tessellé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 8xMSAA, les 8 échantillons peuvent ressembler aux couleurs du tableau suivant. Il n’y a que trois couleurs uniques, mais elles occupent actuellement l’espace de 8.


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 stocker une couleur unique par échantillon. La plupart du temps, un pixel ne comporte qu’un petit nombre de couleurs uniques. FMask peut les mapper de façon à couvrir l’ensemble du 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 quelle doit être une couleur ou qu’il ne peut pas se permettre de la stocker, il marque l’échantillon correspondant comme inconnu dans FMask. Le rendu EQAA s’effectue comme en MSAA, mais avec la limitation que seul un certain nombre d’échantillons sont corrects. 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.
