> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Compression des couleurs et de la profondeur

> Compression des couleurs et de la profondeur

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](#ID4EY)
* [Terminologie de la compression des couleurs](#ID4ELB)
* [Le bloc de couleur](#ID4ECE)
* [Compression des couleurs](#ID4EMF)
* [Schéma de compression des couleurs](#ID4EVF)
* [Anticrénelage de qualité améliorée (EQAA)](#ID4EJG)
* [Compatibilité des fonctionnalités](#ID4EUG)
* [API de compression des couleurs](#ID4E5G)
* [Performances et débogage](#ID4ESBAC)

<a id="ID4EY" />

## 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. <img src="https://mintcdn.com/microsoft-4404708b/6hkHc7s12mHcTMCE/images/gdk/features/graphics/logical_graphics_pipeline.png?fit=max&auto=format&n=6hkHc7s12mHcTMCE&q=85&s=2f67ad622842ab04b29990e77b7573cb" alt="Pipeline graphique logique" width="561" height="528" data-path="images/gdk/features/graphics/logical_graphics_pipeline.png" />

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](/fr-CA/build/core-features/graphics/directx/native-resource-management).

<a id="ID4ELB" />

## Terminologie de la compression des couleurs

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

| Terme | Description |
| - | - |
| CMask | Données pour la compression des couleurs au niveau des tuiles. |
| FMask | Données pour la compression des couleurs au niveau des quads. |
| Quad | Un groupe de 2 × 2 pixels. |
| Tuile | Un groupe de 8 × 8 pixels, ou un groupe de 4 × 4 quads. |
| Fragment | Un échantillon d'un pixel compressé. |
| Résolution | Produire une surface à échantillon unique à partir d'une surface multiéchantillonnée à l'aide d'un filtre boîte aligné sur les pixels. |
| MRT | Cibles de rendu multiples. Plusieurs surfaces dans lesquelles le rendu peut être effectué dans un seul état. Elles sont parfois surchargées pour des fonctions spéciales (par exemple, la résolution et le mélange à double source). On s'attend à ce que les performances diminuent de façon linéaire avec le nombre de MRT, bien que de nombreux facteurs puissent rendre la baisse de performances pire que linéaire. Parmi ces facteurs limitant les performances, on compte l'efficacité de la bande passante du contrôleur de mémoire et la réduction de la capacité du cache à tirer parti de la localité spatiale, puisque la taille du cache en pixels diminue de façon linéaire avec le nombre de MRT. |
| ROP | Opération de trame. Une opération logique bit à bit effectuée sur la couleur source, la couleur de destination et un champ défini par l'utilisateur. Une ROP est une opération au niveau du bit qui utilise la couleur source et la couleur de destination pour modifier la couleur écrite en mémoire. La ROP3 standard est une fonction de la destination, de la source et d'un pinceau. La destination est le contenu de la cible de rendu sous forme formatée. La source est la couleur de sortie formatée du nuanceur lorsqu'il n'y a pas de mélange, ou la sortie formatée du mélangeur lorsqu'il y a mélange. Dans le bloc de couleur, le pinceau est identique à la source. |
| MSAA | Anticrénelage multiéchantillonné. Une technique visant à réduire le crénelage géométrique en stockant plus d'informations de profondeur que nécessaire pour le rendu. Sans compression, il y a une valeur de couleur de fragment unique par échantillon. |
| EQAA | Anticrénelage de qualité améliorée. Une version du MSAA qui utilise moins de fragments stockés que de positions d'échantillons, ce qui peut produire des images de meilleure qualité pour une empreinte mémoire donnée. |

<a id="ID4ECE" />

## 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*.

```cpp theme={null}
NewDestinationColor = CombinationFunction(BFS*CS, BFD*CD)  
```

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.

<a id="ID4EMF" />

## 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.

<a id="ID4EVF" />

## 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. <img src="https://mintcdn.com/microsoft-4404708b/EHFikhsC0GyEu9Ca/images/gdk/features/graphics/fmask_sample.png?fit=max&auto=format&n=EHFikhsC0GyEu9Ca&q=85&s=5fa4dc5da634d854be7134c0e6be4246" alt="Trois couleurs uniques occupant l'espace de huit" width="200" height="200" data-path="images/gdk/features/graphics/fmask_sample.png" />

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. <img src="https://mintcdn.com/microsoft-4404708b/EHFikhsC0GyEu9Ca/images/gdk/features/graphics/fmask_pointers.png?fit=max&auto=format&n=EHFikhsC0GyEu9Ca&q=85&s=340dd298656ad179146ce148de87a27d" alt="Mémoire FMask et mémoire de couleur" width="368" height="262" data-path="images/gdk/features/graphics/fmask_pointers.png" />

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. <img src="https://mintcdn.com/microsoft-4404708b/EHFikhsC0GyEu9Ca/images/gdk/features/graphics/cmask_bitplanes.png?fit=max&auto=format&n=EHFikhsC0GyEu9Ca&q=85&s=3e0f07a3514b6739e2abfce0f099c5d3" alt="Plans de bits CMask" width="478" height="109" data-path="images/gdk/features/graphics/cmask_bitplanes.png" />

<a id="ID4EJG" />

## 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é.

<a id="ID4EUG" />

## Compatibilité des fonctionnalités

Le tableau suivant présente les combinaisons d'opérations autorisées dans le bloc de couleur. <img src="https://mintcdn.com/microsoft-4404708b/EHFikhsC0GyEu9Ca/images/gdk/features/graphics/cb_features.png?fit=max&auto=format&n=EHFikhsC0GyEu9Ca&q=85&s=dd2ec170803d2c0dd0960e87d345173e" alt="Combinaisons d'opérations autorisées dans le bloc de couleur" width="344" height="168" data-path="images/gdk/features/graphics/cb_features.png" />

<a id="ID4E5G" />

## 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](/fr-CA/reference/graphics/d3d12_x/interfaces/id3d12device/methods/id3d12device_createcomponentplacedresourcex).

Notez que les appels à [ID3D12GraphicsCommandList::RSSetMSAAParametersX](/fr-CA/reference/graphics/d3d12_x/interfaces/id3d12graphicscommandlist/methods/id3d12graphicscommandlist_rssetmsaaparametersx) ou à [ID3D12GraphicsCommandList1::SetSamplePositions](https://learn.microsoft.com/windows/desktop/api/d3d12/nf-d3d12-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 :

* [D3D12XBOX\_MSAA\_SAMPLE\_LOCATIONS](/fr-CA/reference/graphics/d3d12_x/structs/d3d12xbox_msaa_sample_locations)
* [D3D12XBOX\_MSAA\_CENTROID\_PRIORITIES](/fr-CA/reference/graphics/d3d12_x/structs/d3d12xbox_msaa_centroid_priorities)
* [D3D12XBOX\_MSAA\_PARAMETERS](/fr-CA/reference/graphics/d3d12_x/structs/d3d12xbox_msaa_parameters)

<a id="ID4ESBAC" />

## 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](/fr-CA/tools/tools-console/pix/gpu/pix-drpix).

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](/fr-CA/tools/tools-console/pix/gpu/pix-table-of-hardware-counters).

<a id="ID4EDCAC" />

## Voir aussi

[Décodage CMask](/fr-CA/build/core-features/graphics/overviews/cmask-decoding)


## Related topics

- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr-CA/nda/nda-topic-directory.md)
- [Exigences XBOX testées lors de la certification pour les jeux sur console XBOX](/fr-CA/publishing/certification/console-cert-tested-requirements.md)
- [XR-003 Qualité du titre pour la soumission](/fr-CA/publishing/certification/xr/xr-003.md)
- [Documentation de développement de jeux XBOX](/fr-CA/index.md)
- [Programme de services payants de certification](/fr/publishing/game-publishing/concepts/certification/certification-paid-services.md)
