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

# États d'alimentation dynamiques (DPS)

> Activez les états d'alimentation dynamiques pour que le pilote GPU ajuste la consommation selon la charge de rendu, ce qui permet d'économiser de 10 à 15 % de plus sur les consoles XBOX Series.

<Warning>
  Le DPS est offert uniquement sur les consoles **XBOX Series**. Il n'a aucun effet sur les consoles XBOX antérieures.
</Warning>

Les **états d'alimentation dynamiques (DPS, Dynamic Power States)** ajustent dynamiquement le niveau d'alimentation du GPU selon la charge de rendu. Lorsque le GPU n'est pas pleinement utilisé, le DPS réduit l'état d'alimentation, ce qui économise de l'énergie sans compromettre les performances. Le pilote graphique effectue l'ajustement automatiquement, en fonction de l'historique récent des temps d'image.

Sans DPS, le GPU est verrouillé à l'état d'alimentation **P4**, ce qui signifie que même un GPU inactif consomme plus d'énergie que nécessaire. Le DPS déverrouille les états d'alimentation inférieurs (P0 à P3) chaque fois que la charge de travail le permet.

## Fonctionnement

1. Le jeu active les états d'alimentation dynamiques du GPU.
2. Le GPU calcule des statistiques d'image normalisées et les conserve comme données historiques.
3. Le GPU change automatiquement d'état d'alimentation selon la demande actuelle et l'historique, ce qui économise de l'énergie.

<Note>
  Les jeux peuvent réduire davantage leur consommation d'énergie en adoptant le reste de la [trousse d'outils de durabilité XBOX](/fr-CA/build/game-principles/sustainability/energy-efficiency-essentials).
</Note>

## Études de cas

### Call of Duty: Black Ops 6

Rulon Raymond, directeur principal de la technologie pour Call of Duty :

> Nous avons passé quelques jours à expérimenter avec le DPS et les résultats étaient prometteurs. Plus précisément, nous avons constaté des **économies d'énergie supplémentaires de 10 à 15 %** dans des zones **au-delà** de celles que nous avions introduites à l'aide de la trousse d'outils de durabilité XBOX. Nous ralentissions déjà certaines parties du moteur de jeu (par exemple, dans les menus ou les écrans d'accueil), sans changement de la fréquence d'images pour les joueurs, ce qui nous a fait économiser beaucoup d'énergie, mais le DPS nous a permis d'obtenir des économies supplémentaires sans aucun effort.

Au lancement, le plan de l'équipe de Black Ops 6 était le suivant :

* Activer le DPS dans toutes les zones où des mesures d'économie d'énergie étaient déjà appliquées.
* Exposer un indicateur permettant d'activer le DPS en tout temps, désactivé par défaut, pendant que les tests de performance sur plusieurs jours se poursuivent.

### Two Point Museum

Ben Hymers, directeur technique et cofondateur de Two Point Studios, a déployé le DPS au moyen d'un paramètre infonuagique géré par l'équipe XBOX, sans modification du code :

> Nous avons testé les états d'alimentation dynamiques conjointement avec le mode Constrained+ afin de maximiser l'efficacité énergétique. Ensemble, ces fonctionnalités ont réduit la consommation d'environ **50 à 58 % dans le menu principal** et diminué la consommation d'énergie en mode contraint de **39 à 63 %**. Depuis le déploiement, nous avons observé une baisse notable de la consommation d'énergie moyenne sans dégrader la fidélité du jeu. Par exemple, la consommation de la XBOX Series X est passée d'une moyenne de **135 W à 125 W**. À l'échelle de notre base de joueurs, cela se traduit par une économie d'énergie annuelle d'environ **6,5 mégawattheures**, ce qui équivaut à regarder la télévision sans arrêt pendant 65 000 heures, soit près de 7,5 années consécutives.

Two Point Museum a été le premier studio tiers à adopter le DPS à distance au moyen d'une configuration infonuagique.

## Tester le DPS sans modifier le code (développement seulement)

Vous pouvez activer le DPS globalement sur une console de développement sans régénérer votre titre :

<Steps>
  <Step title="Mettre à jour votre console de développement">
    Assurez-vous qu'au moins la **récupération d'août 2024** est installée sur votre console de développement.
  </Step>

  <Step title="Créer le fichier indicateur">
    Créez un fichier vide nommé `DynamicPowerEnable` sur votre PC.
  </Step>

  <Step title="Le copier sur le lecteur D: de la console">
    ```sh theme={null}
    xbcp DynamicPowerEnable xD:\
    ```
  </Step>

  <Step title="Lancer et profiler">
    Lancez votre jeu. Le DPS est maintenant actif.
  </Step>

  <Step title="Désactiver le DPS une fois terminé">
    ```sh theme={null}
    xbdel xD:\DynamicPowerEnable
    ```

    Relancez le jeu.
  </Step>
</Steps>

### Observer le DPS en temps réel

Activez la **superposition de performances du titre** (Title Performance Overlay) au moyen de PIX ou des paramètres de la console dans XBOX Manager.

* Si le DPS est activé, la superposition comprend une ligne rouge et une mesure **GPU power state** (0 à 4) dans le coin inférieur droit. **4** signifie pleine vitesse; une valeur inférieure signifie une économie d'énergie.
* Si le DPS est désactivé, l'état d'alimentation du GPU affiche `N/A`.

Utilisez la mesure **Power Load %** de PIX pour mesurer les changements de consommation d'énergie du GPU dans des parties précises du jeu.

<Warning>
  Les titres **ne peuvent pas** utiliser le fichier `DynamicPowerEnable` pour activer le DPS en version commerciale. Pour les versions commerciales, utilisez `SetDriverHintX` (ci-dessous).
</Warning>

## Activer le DPS dans votre jeu (version commerciale)

Utilisez l'API existante `SetDriverHintX()` sur le périphérique graphique.

### API

```cpp theme={null}
SetDriverHintX(UINT feature, UINT value);
```

Avec le **GDK de juin 2024** ou une version ultérieure, utilisez l'énumération :

```cpp theme={null}
DRIVER_HINT_SET_DYNAMIC_POWER
```

Pour les **GDK antérieurs à juin 2024** (ou les titres XDK plus anciens), utilisez directement la valeur :

```cpp theme={null}
0xEFF1C1E7
```

### Activer le DPS

```cpp theme={null}
SetDriverHintX(DRIVER_HINT_SET_DYNAMIC_POWER, 1);
// or:
SetDriverHintX(0xEFF1C1E7, 1);
```

### Désactiver le DPS

```cpp theme={null}
SetDriverHintX(DRIVER_HINT_SET_DYNAMIC_POWER, 0);
// or:
SetDriverHintX(0xEFF1C1E7, 0);
```

Le DPS peut être activé ou désactivé pendant le jeu, mais le laisser activé en tout temps procure les économies maximales.

<Warning>
  Si votre jeu active et désactive le DPS, **réinitialisez la valeur souhaitée dans le gestionnaire PLM `Resume()`**. L'état du DPS n'est pas conservé lors d'une suspension et d'une reprise.
</Warning>

## Détecter le DPS à l'exécution avec les statistiques d'image

Les jeux peuvent interroger les statistiques d'image pour prendre des décisions de rendu (résolution dynamique, etc.) en fonction du comportement du DPS.

### GetFrameStatisticsX

Un nouveau type de statistiques d'image est offert :

```cpp theme={null}
D3D12XBOX_FRAME_STATISTICS_TYPE_POWERSCALING
```

Ainsi que sa structure associée :

```cpp theme={null}
typedef struct D3D12XBOX_POWERSCALING_STATISTICS
{
    UINT8 PlaneIndex;
    UINT64 GPUBusyDurationScaled;
    double ScaleFactor;
} D3D12XBOX_POWERSCALING_STATISTICS;
```

La structure existante `D3D12XBOX_RENDER_STATISTICS` retourne `GPUBusyDuration` :

```cpp theme={null}
typedef struct D3D12XBOX_RENDER_STATISTICS
{
    UINT8 PlaneIndex;
    UINT64 GPUWriteCompleteTime;
    UINT64 GPUBusyDuration;
} D3D12XBOX_RENDER_STATISTICS;
```

`GPUBusyDuration` est **normalisée** : elle suppose que l'horloge du GPU est à P4 et elle est indépendante de l'état d'alimentation actuel. Les statistiques d'image de mise à l'échelle de l'alimentation **sont** soumises aux changements d'état d'alimentation et différeront de `GPUBusyDuration`.

### Exemple

Une charge de travail GPU qui prend 8 ms à P4 s'allonge à 12 ms à P2 (horloge plus basse) :

| Valeur | DPS désactivé (P4) | DPS activé (P2) |
| - | - | - |
| `GPUBusyDuration` | 8 ms | 8 ms |
| `GPUBusyDurationScaled` | 8 ms | 12 ms |
| `ScaleFactor` | 1 | 0,67 |

<Note>
  La valeur normalisée `GPUBusyDuration` est conservée parce que les moteurs de jeu l'utilisent pour les calculs de résolution dynamique. Séparer les mesures **normalisées** et **mises à l'échelle** évite les boucles de rétroaction où un état d'alimentation inférieur ferait baisser continuellement la résolution dynamique jusqu'à atteindre la plus basse.
</Note>

## Étapes suivantes

* [Comment utiliser PIX pour le profilage de durabilité](/fr-CA/build/game-principles/sustainability/sustainability-pix-guide)
* [Vue d'ensemble de la durabilité pour les développeurs](/fr-CA/build/game-principles/sustainability/sustainability-developer-overview)
* [Guide de durabilité pour les consoles de développement](/fr-CA/build/game-principles/sustainability/sustainability-devkit-guide)
* [Principes essentiels d'efficacité énergétique](/fr-CA/build/game-principles/sustainability/energy-efficiency-essentials)


## Related topics

- [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/publishing/certification/xr/xr-003.md)
- [Étapes du test de validation des supports](/fr/publishing/game-publishing/concepts/certification/certification-media-validation-test-steps.md)
- [Étapes de test de validation des supports](/fr-CA/publishing/game-publishing/concepts/certification/certification-media-validation-test-steps.md)
- [XR-074 Perte de connectivité aux services XBOX et des partenaires](/fr-CA/publishing/certification/xr/xr-074.md)
