Skip to main content
Cmask est une surface qui stocke des métadonnées pour chaque bloc de 8x8 pixels (tuile Cmask) du tampon de couleur associé. Ces métadonnées constituent l’élément essentiel du mécanisme Fast Clear, sans toutefois s’y limiter. Fast Clear est une méthode qui permet d’ignorer l’opération Clear sur les régions d’un tampon de couleur qui seront remplacées par le rendu. Cette méthode comporte trois étapes. La première étape exige que la surface Cmask soit initialisée de façon à ce que chaque élément de métadonnées marque la tuile 8x8 associée du tampon de couleur comme effacée. La deuxième étape émet n’importe quelle séquence d’opérations de dessin qui mettent à jour le tampon de couleur configuré pour utiliser ce Cmask. Le Color Block (CB) met simultanément à jour la surface Cmask avec des informations sur les régions touchées du tampon de couleur. Une fois le rendu terminé, toutes les régions restées intactes sont effacées (opération appelée Fast Clear Eliminate). Cela se produit habituellement pendant que le tampon de couleur passe de l’état accessible en écriture à l’état lisible. Dans de nombreux scénarios, il est avantageux de savoir quelles tuiles 8x8 (voire quelles sous-tuiles) du tampon de couleur ont été touchées par le rendu. Pour ce faire, il est nécessaire de savoir comment décoder la surface Cmask. L'élément Cmask est une valeur de 4 bits (aussi appelée « quartet ») qui encode des informations par tuile Cmask. Figure 1 : L’élément Cmask est une valeur de 4 bits (aussi appelée « quartet ») qui encode des informations par tuile Cmask. Le décodage nécessite habituellement deux étapes. La première consiste à extraire le quartet Cmask (figure 1) qui correspond aux coordonnées de tuile Cmask fournies. Cela peut être fait à l’aide de la fonction d’assistance GetCMask du fichier ColorDecompressUtility.hlsli de MiniEngines. Variantes possibles d'interprétation du quartet Cmask Figure 2 : Variantes possibles d’interprétation du quartet Cmask (figure 1). (1) - chaque bit Cmask indique si la sous-tuile (au sein d’une tuile Cmask 8x8) correspondant à ce bit a été touchée par le rendu (bit activé) ou si elle est toujours effacée par Fast Clear (bit non activé). Cette variante est utilisée pour les tampons de couleur sans MSAA avec Fast Clear activé et l’exportation d’indications VRS désactivée (offerte uniquement sur la XBOX Series X|S). (2) - variante utilisée pour les tampons de couleur avec MSAA, Fast Clear activé et l’exportation d’indications VRS désactivée. Les deux bits supérieurs encodent les informations Fast Clear de façon semblable à (1). Comme seuls deux bits sont disponibles pour Fast Clear, il ne peut y avoir que deux sous-tuiles dans une tuile Cmask. Les deux bits inférieurs indiquent combien de plans de bits Fmask sont nécessaires pour encoder les pointeurs FMask de la tuile 8x8 donnée. Le nombre de plans de bits est limité par le log2 du nombre d’échantillons du mode MSAA choisi. (3) - est semblable à (2), mais les deux bits supérieurs sont mis à 1, car ce mode est destiné aux tampons de couleur MSAA avec Fast Clear désactivé. (4) - est destiné aux tampons de couleur MSAA dont les bits Fast Clear sont réaffectés au stockage de l’indication de taux VRS exportée (XBOX Series X|S uniquement), mais les bits inférieurs, comme pour (2) et (3), encodent le nombre de plans de bits Fmask pour l’ensemble de la tuile Cmask. (5) - est semblable à (4), mais utilisé avec des tampons de couleur sans MSAA; les deux bits inférieurs ne sont donc pas utilisés. Une fois le quartet Cmask récupéré, la deuxième étape consiste à interpréter la signification des quatre bits. Celle-ci dépend de plusieurs facteurs, par exemple si le MSAA est activé ou non pour le tampon de couleur correspondant, la profondeur de bits du format de couleur, le mode de micro-mosaïquage (sur XBOX One et XBOX Series X|S) ou le mode de swizzling (XBOX Series X|S) du tampon de couleur, et si l’indication VRS est exportée (XBOX Series X|S). La figure 2 présente cinq variantes de schémas d’encodage selon la façon dont le Color Block (CB) a été configuré pendant le rendu. S’il a été configuré pour utiliser Fast Clear, chaque quartet Cmask indique quelles sous-tuiles de la tuile Cmask correspondante ont été touchées. Pour les surfaces avec et sans MSAA, les encodages sont légèrement différents (variantes (1) et (2)), car seuls deux bits sont disponibles pour suivre l’état des sous-tuiles de la tuile 8x8. La figure 3 montre les configurations possibles des sous-tuiles au sein d’une tuile Cmask ainsi que les correspondances entre les bits d’un quartet Cmask et les sous-tuiles de la tuile Cmask correspondant à ce quartet. Ces configurations peuvent être utilisées avec des tampons de couleur sans MSAA. Variantes possibles de placement des sous-tuiles au sein d'une tuile Cmask (8x8 pixels) pour les tampons de couleur sans MSAA (et avec l'exportation d'indications VRS désactivée sur la XBOX Series X|S). Figure 3 : Variantes possibles de placement des sous-tuiles au sein d’une tuile Cmask (8x8 pixels) pour les tampons de couleur sans MSAA (et avec l’exportation d’indications VRS désactivée sur la XBOX Series X|S). Notez que les différentes sous-tuiles correspondent à différents bits du quartet Cmask (figure 1). De gauche à droite : CM0 — quatre sous-tuiles de 8x2 pixels chacune disposées en une grille 1x4, CM1 — quatre sous-tuiles de 2x8 pixels chacune disposées en une grille 4x1, CM2 — quatre sous-tuiles de 4x4 pixels chacune disposées en une grille 2x2, C3 — quatre sous-tuiles de 4x4 pixels chacune disposées en une grille 2x2 (notez l’ordre différent par rapport à CM2 : la tuile inférieure gauche correspond au bit en position 1) La disposition des sous-tuiles dans les tuiles Cmask peut être déterminée à partir de la profondeur de bits du format de couleur et du mode de mosaïquage / swizzling du tampon de couleur. Ces dépendances sont résumées dans le tableau 1 pour la XBOX Series X|S et dans le tableau 2 pour la XBOX One et la XBOX Series X|S. Tableau 1 : Dépendance entre la profondeur de bits du format de couleur, le mode de swizzling et les modes de placement des sous-tuiles Cmask (voir la figure 3) pour les tampons de couleur sans MSAA sur la XBOX Series X|S. Les modes de swizzling sont définis par XG_SWIZZLE_MODE dans la bibliothèque XG. Tableau 2 : Dépendance entre la profondeur de bits du format de couleur, le mode de micro-mosaïquage et les modes de placement des sous-tuiles Cmask (voir la figure 3) pour les tampons de couleur sans MSAA sur la XBOX One et la XBOX Series X|S. Les modes de micro-mosaïquage correspondent aux suffixes de XG_TILE_MODE dans la bibliothèque XG. Par exemple, les modes de tuile XG_TILE_MODE_*_THIN utilisent le micro-mosaïquage THIN. Le micro-mosaïquage ROTATED n’est pas utilisé, mais il figure dans ce tableau par souci d’exhaustivité. Les variantes de placement des sous-tuiles au sein d’une tuile Cmask pour les tampons de couleur avec MSAA sont présentées à la figure 4. Sur la XBOX Series X|S, CMM1 est la seule option possible, quels que soient la largeur en bits du format de couleur sous-jacent et le mode de swizzling (il s’agit toujours de SW_*_R lorsque le MSAA est activé). Sur la XBOX One et la XBOX Series X|S, les deux variantes sont possibles, mais CMM0 n’est utilisé qu’avec le micro-mosaïquage ROTATED et les formats de couleur dont la largeur est inférieure à 64 bits par pixel. Étant donné que le pilote n’utilise pas le micro-mosaïquage ROTATED, il est très peu probable de rencontrer cette disposition. Variantes possibles de placement des sous-tuiles au sein d'une tuile Cmask (8x8 pixels) pour les tampons de couleur avec MSAA. Figure 4 : Variantes possibles de placement des sous-tuiles au sein d’une tuile Cmask (8x8 pixels) pour les tampons de couleur avec MSAA. CMM0 — deux sous-tuiles de 4x8 pixels, CMM1 — deux sous-tuiles de 8x4 pixels. Les deux pages suivantes contiennent le corps du nuanceur PSOverlay de l’exemple CMaskDecode, qui interprète le quartet Cmask.

Voir aussi

Vue d’ensemble des graphiques
Last modified on October 6, 2026