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

# Dynamic Power States (DPS)

> Activez Dynamic Power States afin que le pilote GPU ajuste la consommation en fonction de la charge de rendu, pour une économie supplémentaire de 10 à 15 % sur les consoles XBOX Series.

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

**Dynamic Power States (DPS)** ajuste dynamiquement le niveau de puissance du GPU en fonction de la charge de rendu. Lorsque le GPU n'est pas pleinement utilisé, DPS abaisse l'état d'alimentation, ce qui économise de l'énergie sans compromettre les performances. Le pilote graphique effectue cet ajustement automatiquement, en se basant sur 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 que nécessaire. DPS déverrouille des é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 stocke sous forme de données historiques.
3. Le GPU change automatiquement d'état d'alimentation en fonction de la demande actuelle et de l'historique, ce qui économise de l'énergie.

<Note>
  Les jeux peuvent réduire davantage leur consommation d'énergie en adoptant le reste du [XBOX Sustainability Toolkit](/fr/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 DPS et les résultats étaient prometteurs. Plus précisément, nous avons constaté **10 à 15 % d'économies d'énergie supplémentaires** dans des zones **au-delà** de celles que nous avions introduites à l'aide du XBOX Sustainability Toolkit. Nous réduisions déjà certaines parties du moteur de jeu (par exemple, dans les menus ou les écrans d'accueil), sans changement de fréquence d'images pour les joueurs, ce qui nous a fait économiser beaucoup d'énergie, mais DPS nous a permis d'obtenir des économies supplémentaires sans aucun effort.

Au moment de la sortie, le plan de l'équipe de Black Ops 6 était le suivant :

* Activer DPS dans toutes les zones où des mesures d'économie d'énergie étaient déjà appliquées.
* Exposer un indicateur permettant d'activer DPS en permanence, désactivé par défaut, pendant la poursuite des tests de performances sur plusieurs jours.

### Two Point Museum

Ben Hymers, directeur technique et cofondateur de Two Point Studios, a déployé DPS via un paramètre cloud géré par l'équipe XBOX, sans aucune modification de code :

> Nous avons testé Dynamic Power States en combinaison avec le mode Constrained+ pour 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 gameplay. Par exemple, la consommation de la XBOX Series X est passée d'une moyenne de **135 W à 125 W**. Sur l'ensemble de nos joueurs, cela représente une économie d'énergie annuelle d'environ **6,5 mégawattheures**, soit l'équivalent de 65 000 heures de télévision sans interruption, ou près de 7,5 années d'affilée.

Two Point Museum a été le premier studio tiers à adopter DPS à distance via une configuration cloud.

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

Vous pouvez activer DPS globalement sur un devkit sans recompiler votre titre :

<Steps>
  <Step title="Mettre à jour votre devkit">
    Assurez-vous que votre devkit dispose au minimum de la **Recovery d'août 2024**.
  </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. DPS est maintenant actif.
  </Step>

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

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

### Observer DPS en temps réel

Activez la **Title Performance Overlay** via PIX ou les paramètres de la console dans XBOX Manager.

* Si DPS est activé, la superposition comporte une ligne rouge et une métrique **GPU power state** (0 à 4) en bas à droite. **4** signifie pleine vitesse ; une valeur inférieure signifie une économie d'énergie.
* Si DPS est désactivé, l'état d'alimentation du GPU affiche `N/A`.

Utilisez la métrique **Power Load %** de PIX pour mesurer les variations de la consommation d'énergie du GPU dans des parties spécifiques du jeu.

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

## Activer 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 DPS

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

### Désactiver DPS

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

DPS peut être activé ou désactivé en cours de jeu, mais le laisser activé en permanence permet d'obtenir un maximum d'économies.

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

## Détecter 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 de DPS.

### GetFrameStatisticsX

Un nouveau type de statistiques d'image est disponible :

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

Ainsi que la 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` renvoie `GPUBusyDuration` :

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

`GPUBusyDuration` est **normalisé** : il suppose que l'horloge du GPU est à P4 et ne dépend pas de l'état d'alimentation actuel. Les statistiques d'image de mise à l'échelle de la puissance **sont** soumises aux changements d'état d'alimentation et diffèrent 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, car 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 dans lesquelles un état d'alimentation inférieur ferait baisser continuellement la résolution dynamique jusqu'à atteindre le minimum.
</Note>

## Étapes suivantes

* [Utiliser PIX pour le profilage du développement durable](/fr/build/game-principles/sustainability/sustainability-pix-guide)
* [Vue d'ensemble du développement durable pour les développeurs](/fr/build/game-principles/sustainability/sustainability-developer-overview)
* [Guide du devkit pour le développement durable](/fr/build/game-principles/sustainability/sustainability-devkit-guide)
* [Principes essentiels de l'efficacité énergétique](/fr/build/game-principles/sustainability/energy-efficiency-essentials)


## Related topics

- [Principes essentiels de l'efficacité énergétique des jeux XBOX](/fr/build/game-principles/sustainability/energy-efficiency-essentials.md)
- [Vue d'ensemble du développement durable](/fr/build/game-principles/sustainability/sustainability-overview.md)
- [Profilage du développement durable avec PIX](/fr/build/game-principles/sustainability/sustainability-pix-guide.md)
- [Vue d'ensemble du développement durable pour les développeurs](/fr/build/game-principles/sustainability/sustainability-developer-overview.md)
- [Mesurer la consommation d'énergie avec votre devkit](/fr/build/game-principles/sustainability/sustainability-devkit-guide.md)
