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

# Estados de energía dinámicos (DPS)

> Habilite los estados de energía dinámicos para que el controlador de la GPU escale la energía según la carga de trabajo de representación, con un ahorro adicional del 10–15% en las consolas XBOX Series.

<Warning>
  DPS solo está disponible en las consolas **XBOX Series**. No tiene ningún efecto en las consolas XBOX anteriores.
</Warning>

Los **estados de energía dinámicos (DPS)** ajustan dinámicamente el nivel de energía de la GPU según la carga de trabajo de representación. Cuando la GPU no se utiliza por completo, DPS reduce el estado de energía, lo que ahorra energía sin comprometer el rendimiento. El controlador de gráficos realiza el ajuste automáticamente, basándose en el historial reciente de tiempos de fotograma.

Sin DPS, la GPU está bloqueada en el estado de energía **P4**, lo que significa que incluso una GPU inactiva consume más energía de la necesaria. DPS desbloquea estados de energía inferiores (P0–P3) siempre que la carga de trabajo lo permite.

## Cómo funciona

1. El juego habilita los estados de energía dinámicos de la GPU.
2. La GPU calcula estadísticas de fotogramas normalizadas y las almacena como datos históricos.
3. La GPU cambia automáticamente de estado de energía según la demanda actual y el historial, ahorrando energía.

<Note>
  Los juegos pueden reducir aún más el consumo de energía adoptando el resto del [XBOX Sustainability Toolkit](/build/game-principles/sustainability/energy-efficiency-essentials).
</Note>

## Casos prácticos

### Call of Duty: Black Ops 6

Rulon Raymond, director sénior de tecnología de Call of Duty:

> Pasamos unos días experimentando con DPS y los resultados fueron prometedores. En concreto, pudimos ver un **ahorro de energía adicional del 10–15%** en áreas **más allá** de las que introdujimos con el XBOX Sustainability Toolkit. Ya estábamos reduciendo la actividad de partes del motor del juego (por ejemplo, en los menús o las pantallas de la interfaz inicial), sin cambios en la velocidad de fotogramas de los jugadores, lo que nos ahorraba mucha energía, pero DPS nos permitió obtener ahorros adicionales sin esfuerzo.

En el momento del lanzamiento, el plan del equipo de Black Ops 6 era:

* Habilitar DPS en todas las áreas donde ya se aplicaban medidas de ahorro de energía.
* Exponer una marca para habilitar DPS en todo momento, desactivada de forma predeterminada, mientras continúan las pruebas de rendimiento de varios días.

### Two Point Museum

Ben Hymers, director técnico y cofundador de Two Point Studios, publicó DPS mediante una configuración en la nube administrada por el equipo de XBOX, sin cambios en el código:

> Probamos los estados de energía dinámicos junto con el modo Constrained+ para maximizar la eficiencia energética. Juntas, estas características redujeron el consumo de energía en aproximadamente un **50–58% en el menú principal** y recortaron el uso de energía durante el modo restringido en un **39–63%**. Desde el lanzamiento, hemos observado una disminución notable en el consumo medio de energía sin degradar la fidelidad del juego. Por ejemplo, el consumo de energía en XBOX Series X ha disminuido de una media de **135 W a 125 W**. En toda nuestra base de jugadores, esto se traduce en un ahorro anual de energía de \~**6,5 megavatios-hora**, equivalente a ver la televisión sin parar durante 65 000 horas, o casi 7,5 años seguidos.

Two Point Museum fue el primer estudio de terceros en adoptar DPS de forma remota mediante configuración en la nube.

## Probar DPS sin cambiar el código (solo desarrollo)

Puede habilitar DPS globalmente en un kit de desarrollo sin recompilar el título:

<Steps>
  <Step title="Actualice el kit de desarrollo">
    Asegúrese de que el kit de desarrollo tenga instalada al menos la **recuperación de agosto de 2024**.
  </Step>

  <Step title="Cree el archivo de marca">
    Cree un archivo vacío llamado `DynamicPowerEnable` en su PC.
  </Step>

  <Step title="Cópielo a la unidad D: de la consola">
    ```sh theme={null}
    xbcp DynamicPowerEnable xD:\
    ```
  </Step>

  <Step title="Inicie el juego y genere perfiles">
    Inicie el juego. DPS ya está activo.
  </Step>

  <Step title="Deshabilite DPS al terminar">
    ```sh theme={null}
    xbdel xD:\DynamicPowerEnable
    ```

    Vuelva a iniciar el juego.
  </Step>
</Steps>

### Observar DPS en tiempo real

Habilite la **Title Performance Overlay** mediante PIX o la configuración de la consola en XBOX Manager.

* Si DPS está habilitado, la superposición incluye una línea roja y una métrica de **estado de energía de la GPU** (0–4) en la parte inferior derecha. **4** significa velocidad completa; un valor inferior significa que se está ahorrando energía.
* Si DPS está deshabilitado, el estado de energía de la GPU muestra `N/A`.

Use la métrica **Power Load %** de PIX para medir los cambios en el uso de energía de la GPU en partes específicas del juego.

<Warning>
  Los títulos **no pueden** usar el archivo `DynamicPowerEnable` para habilitar DPS en la versión comercial. Para las versiones comerciales, use `SetDriverHintX` (a continuación).
</Warning>

## Habilitar DPS en su juego (versión comercial)

Use la API existente `SetDriverHintX()` en el dispositivo de gráficos.

### API

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

Con el **GDK de junio de 2024** o posterior, use la enumeración:

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

Para los **GDK anteriores a junio de 2024** (o títulos de XDK más antiguos), use el valor directamente:

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

### Habilitar DPS

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

### Deshabilitar DPS

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

DPS puede activarse y desactivarse durante el juego, pero dejarlo habilitado en todo momento proporciona el ahorro máximo.

<Warning>
  Si su juego activa y desactiva DPS, **restablezca el valor deseado en el controlador `Resume()` de PLM**. El estado de DPS no se conserva entre las operaciones de suspensión y reanudación.
</Warning>

## Detectar DPS en tiempo de ejecución con estadísticas de fotogramas

Los juegos pueden consultar las estadísticas de fotogramas para tomar decisiones de representación (resolución dinámica, etc.) en función del comportamiento de DPS.

### GetFrameStatisticsX

Hay disponible un nuevo tipo de estadísticas de fotogramas:

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

Y su estructura asociada:

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

La estructura existente `D3D12XBOX_RENDER_STATISTICS` devuelve `GPUBusyDuration`:

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

`GPUBusyDuration` está **normalizado**: supone que el reloj de la GPU está en P4 y es invariable con respecto al estado de energía actual. Las estadísticas de fotogramas de escalado de energía **sí** están sujetas a los cambios de estado de energía y diferirán de `GPUBusyDuration`.

### Ejemplo

Una carga de trabajo de la GPU que tarda 8 ms en P4 se extiende a 12 ms en P2 (reloj más bajo):

| Valor                   | DPS desactivado (P4) | DPS activado (P2) |
| ----------------------- | -------------------- | ----------------- |
| `GPUBusyDuration`       | 8 ms                 | 8 ms              |
| `GPUBusyDurationScaled` | 8 ms                 | 12 ms             |
| `ScaleFactor`           | 1                    | 0.67              |

<Note>
  El valor normalizado `GPUBusyDuration` se conserva porque los motores de juego lo usan para los cálculos de resolución dinámica. Separar las mediciones **normalizadas** y **escaladas** evita bucles de retroalimentación en los que un estado de energía inferior hace que la resolución dinámica siga bajando hasta alcanzar el mínimo.
</Note>

## Pasos siguientes

* [Cómo usar PIX para la generación de perfiles de sostenibilidad](/build/game-principles/sustainability/sustainability-pix-guide)
* [Información general de sostenibilidad para desarrolladores](/build/game-principles/sustainability/sustainability-developer-overview)
* [Guía de sostenibilidad para kits de desarrollo](/build/game-principles/sustainability/sustainability-devkit-guide)
* [Conceptos esenciales de eficiencia energética](/build/game-principles/sustainability/energy-efficiency-essentials)


## Related topics

- [Conceptos esenciales de eficiencia energética para juegos de XBOX](/es/build/game-principles/sustainability/energy-efficiency-essentials.md)
- [Equilibrar el rendimiento y la eficiencia energética](/es/build/gdk-and-engines/handheld/handheld-performance.md)
- [Caso práctico de Gears of War: Reloaded](/es/build/game-principles/sustainability/case-studies/case-studies-gears-of-war-reloaded.md)
- [Información general sobre los casos prácticos de sostenibilidad](/es/build/game-principles/sustainability/case-studies/case-studies-overview.md)
- [Informes de energía de sostenibilidad de Certificación](/es/build/game-principles/sustainability/sustainability-case-studies.md)
