Skip to main content
Cmask est une surface qui stocke des métadonnées pour chaque bloc de 8x8 pixels (vignette 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 vont être écrasées par le rendu. Cette méthode se compose de trois étapes. La première étape exige que la surface Cmask soit initialisée de sorte que chaque élément de métadonnées marque comme effacée la vignette 8x8 associée dans le tampon de couleur. La deuxième étape émet une séquence quelconque 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 modifiées du tampon de couleur. Une fois le rendu terminé, toutes les régions restées intactes sont effacées (opération Fast Clear Eliminate). Cela se produit généralement lorsque 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 vignettes 8x8 (voire quelles sous-vignettes) du tampon de couleur ont été modifiées par le rendu. Pour cela, il est nécessaire de savoir décoder la surface Cmask. Un élément Cmask est une valeur de 4 bits (ou « quartet ») qui encode des informations par vignette Cmask. Figure 1 : Un élément Cmask est une valeur de 4 bits (ou « quartet ») qui encode des informations par vignette Cmask. Le décodage nécessite généralement deux étapes. La première consiste à extraire le quartet Cmask (figure 1) correspondant aux coordonnées de vignette Cmask fournies. Cette opération peut être effectuée à 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-vignette (au sein d’une vignette Cmask 8x8) correspondant à ce bit a été modifiée par le rendu (bit défini) ou reste effacée par Fast Clear (bit non défini). 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 (disponible uniquement sur 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 manière similaire à (1). Comme seuls deux bits sont disponibles pour Fast Clear, une vignette Cmask ne peut contenir que deux sous-vignettes. Les deux bits inférieurs encodent le nombre de plans de bits Fmask nécessaires pour encoder les pointeurs FMask de la vignette 8x8 donnée. Le nombre de plans de bits est limité par le log2 du nombre d’échantillons du mode MSAA choisi. (3) - semblable à (2), mais les deux bits supérieurs sont définis sur 1, car ce mode concerne les tampons de couleur MSAA avec Fast Clear désactivé. (4) - concerne les 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 dans (2) et (3), encodent le nombre de plans de bits Fmask pour l’ensemble de la vignette Cmask. (5) - semblable à (4), mais utilisé avec les tampons de couleur sans MSAA, de sorte que les deux bits inférieurs ne sont pas utilisés. Une fois le quartet Cmask récupéré, la deuxième étape consiste à interpréter la signification des quatre bits. Elle dépend de plusieurs facteurs, notamment si le tampon de couleur correspondant a le MSAA activé ou non, 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 configuration du Color Block (CB) pendant le rendu. S’il a été configuré pour utiliser Fast Clear, chaque quartet Cmask encode les sous-vignettes de la vignette Cmask correspondante qui ont été modifiées. Pour les surfaces avec et sans MSAA, les encodages diffèrent légèrement (variantes (1) et (2)), car seuls deux bits sont disponibles pour suivre l’état des sous-vignettes de la vignette 8x8. La figure 3 montre les configurations possibles des sous-vignettes au sein d’une vignette Cmask et les correspondances entre les bits d’un quartet Cmask et les sous-vignettes de la vignette Cmask correspondant à ce quartet. Ces configurations peuvent être utilisées avec des tampons de couleur sans MSAA. Variantes possibles de placement des sous-vignettes au sein d'une vignette Cmask (8x8 pixels) pour les tampons de couleur sans MSAA (et avec l'exportation d'indications VRS désactivée sur XBOX Series X|S). Figure 3 : Variantes possibles de placement des sous-vignettes au sein d’une vignette Cmask (8x8 pixels) pour les tampons de couleur sans MSAA (et avec l’exportation d’indications VRS désactivée sur XBOX Series X|S). Notez que les différentes sous-vignettes correspondent à différents bits du quartet Cmask (figure 1). De gauche à droite : CM0 — quatre sous-vignettes de 8x2 pixels chacune disposées en grille 1x4, CM1 — quatre sous-vignettes de 2x8 pixels chacune disposées en grille 4x1, CM2 — quatre sous-vignettes de 4x4 pixels chacune disposées en grille 2x2, C3 — quatre sous-vignettes de 4x4 pixels chacune disposées en grille 2x2 (notez l’ordre différent par rapport à CM2 : la vignette inférieure gauche correspond au bit en position 1) La disposition des sous-vignettes dans les vignettes 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 XBOX Series X|S et dans le tableau 2 pour XBOX One et 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-vignettes Cmask (voir la figure 3) pour les tampons de couleur sans MSAA sur 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-vignettes Cmask (voir la figure 3) pour les tampons de couleur sans MSAA sur XBOX One et 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 mosaïquage XG_TILE_MODE_*_THIN utilisent le micro-mosaïquage THIN. Le micro-mosaïquage ROTATED n’est pas utilisé, mais figure dans ce tableau par souci d’exhaustivité. Les variantes de placement des sous-vignettes au sein d’une vignette Cmask pour les tampons de couleur avec MSAA sont présentées dans la figure 4. Sur XBOX Series X|S, CMM1 est la seule option possible, quelle que soit la largeur en bits du format de couleur sous-jacent et le mode de swizzling (toujours SW_*_R lorsque le MSAA est activé). Sur XBOX One et 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-vignettes au sein d'une vignette Cmask (8x8 pixels) pour les tampons de couleur avec MSAA. Figure 4 : Variantes possibles de placement des sous-vignettes au sein d’une vignette Cmask (8x8 pixels) pour les tampons de couleur avec MSAA. CMM0 — deux sous-vignettes de 4x8 pixels, CMM1 — deux sous-vignettes 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 graphismes
Last modified on October 6, 2026