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

> Habilite os Dynamic Power States para que o driver da GPU ajuste a energia com base na carga de trabalho de renderização, economizando de 10% a 15% a mais nos consoles XBOX Series.

<Warning>
  O DPS está disponível somente nos consoles **XBOX Series**. Ele não tem efeito em consoles XBOX anteriores.
</Warning>

Os **Dynamic Power States (DPS)** ajustam dinamicamente o nível de energia da GPU com base na carga de trabalho de renderização. Quando a GPU não está totalmente utilizada, o DPS reduz o estado de energia, economizando energia sem comprometer o desempenho. O driver gráfico faz o ajuste automaticamente, com base no histórico recente de tempo de quadro.

Sem o DPS, a GPU fica travada no estado de energia **P4**, o que significa que até uma GPU ociosa consome mais energia do que o necessário. O DPS desbloqueia estados de energia mais baixos (P0–P3) sempre que a carga de trabalho permite.

## Como funciona

1. O jogo habilita os estados de energia dinâmicos da GPU.
2. A GPU calcula estatísticas de quadro normalizadas e as armazena como dados históricos.
3. A GPU altera automaticamente os estados de energia com base na demanda atual e no histórico, economizando energia.

<Note>
  Os jogos podem reduzir ainda mais o consumo de energia adotando o restante do [XBOX Sustainability Toolkit](/pt-BR/build/game-principles/sustainability/energy-efficiency-essentials).
</Note>

## Estudos de caso

### Call of Duty: Black Ops 6

Rulon Raymond, Diretor Sênior de Tecnologia de Call of Duty:

> Passamos alguns dias experimentando o DPS e os resultados foram promissores. Especificamente, pudemos ver uma **economia adicional de energia de 10% a 15%** em áreas **além** daquelas que introduzimos usando o XBOX Sustainability Toolkit. Já estávamos reduzindo partes do mecanismo do jogo (por exemplo, em menus ou telas iniciais), sem alteração nas taxas de quadros dos jogadores, o que nos economizou muita energia, mas o DPS nos permitiu obter economias adicionais sem esforço.

No lançamento, o plano da equipe de Black Ops 6 era:

* Habilitar o DPS em todas as áreas onde medidas de economia de energia já estavam aplicadas.
* Expor um sinalizador para habilitar o DPS o tempo todo, desativado por padrão, enquanto os testes de desempenho de vários dias continuam.

### Two Point Museum

Ben Hymers, Diretor Técnico e cofundador da Two Point Studios, lançou o DPS por meio de uma configuração na nuvem gerenciada pela equipe do XBOX, sem alteração de código:

> Testamos os Dynamic Power States junto com o modo Constrained+ para maximizar a eficiência energética. Juntos, esses recursos reduziram o consumo de energia em aproximadamente **50–58% no menu principal** e cortaram o uso de energia durante o modo restrito em **39–63%**. Desde a implantação, observamos uma redução notável no consumo médio de energia sem degradar a fidelidade da jogabilidade. Por exemplo, o consumo de energia do XBOX Series X diminuiu de uma média de **135 W para 125 W**. Em toda a nossa base de jogadores, isso se traduz em uma economia anual de energia de \~**6,5 megawatts-hora**, equivalente a assistir TV sem parar por 65.000 horas, ou quase 7,5 anos seguidos.

Two Point Museum foi o primeiro estúdio terceirizado a adotar o DPS remotamente por meio de configuração na nuvem.

## Testar o DPS sem alterar o código (somente desenvolvimento)

Você pode habilitar o DPS globalmente em um devkit sem recompilar seu título:

<Steps>
  <Step title="Atualize seu devkit">
    Verifique se o seu devkit tem pelo menos a **August 2024 Recovery** instalada.
  </Step>

  <Step title="Crie o arquivo de sinalizador">
    Crie um arquivo vazio chamado `DynamicPowerEnable` no seu PC.
  </Step>

  <Step title="Copie-o para a unidade D: do console">
    ```sh theme={null}
    xbcp DynamicPowerEnable xD:\
    ```
  </Step>

  <Step title="Inicie e crie o perfil">
    Inicie seu jogo. O DPS agora está ativo.
  </Step>

  <Step title="Desabilite o DPS quando terminar">
    ```sh theme={null}
    xbdel xD:\DynamicPowerEnable
    ```

    Reinicie o jogo.
  </Step>
</Steps>

### Observar o DPS em tempo real

Habilite a **Title Performance Overlay** por meio do PIX ou das configurações do console no XBOX Manager.

* Se o DPS estiver habilitado, a sobreposição inclui uma linha vermelha e uma métrica de **GPU power state** (0–4) no canto inferior direito. **4** significa velocidade máxima; valores menores significam economia de energia.
* Se o DPS estiver desabilitado, o estado de energia da GPU mostra `N/A`.

Use a métrica **Power Load %** do PIX para medir alterações no uso de energia da GPU em partes específicas do jogo.

<Warning>
  Os títulos **não podem** usar o arquivo `DynamicPowerEnable` para habilitar o DPS no varejo. Para versões de varejo, use `SetDriverHintX` (abaixo).
</Warning>

## Habilitar o DPS no seu jogo (varejo)

Use a API `SetDriverHintX()` existente no dispositivo gráfico.

### API

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

Com o **GDK de junho de 2024** ou posterior, use a enumeração:

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

Para **GDKs anteriores a junho de 2024** (ou títulos XDK mais antigos), use o valor diretamente:

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

### Habilitar o DPS

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

### Desabilitar o DPS

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

O DPS pode ser alternado durante a jogabilidade, mas deixá-lo habilitado o tempo todo proporciona a máxima economia.

<Warning>
  Se o seu jogo alternar o DPS, **redefina o valor desejado no manipulador `Resume()` do PLM**. O estado do DPS não é preservado entre Suspensão/Retomada.
</Warning>

## Detectar o DPS em tempo de execução com estatísticas de quadro

Os jogos podem consultar estatísticas de quadro para tomar decisões de renderização (resolução dinâmica etc.) com base no comportamento do DPS.

### GetFrameStatisticsX

Um novo tipo de estatística de quadro está disponível:

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

E sua estrutura associada:

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

A `D3D12XBOX_RENDER_STATISTICS` existente retorna `GPUBusyDuration`:

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

`GPUBusyDuration` é **normalizado**: ele pressupõe que o clock da GPU está em P4 e é invariável em relação ao estado de energia atual. As estatísticas de quadro de dimensionamento de energia **estão** sujeitas a alterações de estado de energia e serão diferentes de `GPUBusyDuration`.

### Exemplo

Uma carga de trabalho de GPU que leva 8 ms em P4 se estende para 12 ms em P2 (clock mais baixo):

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

<Note>
  O `GPUBusyDuration` normalizado é preservado porque os mecanismos de jogo o usam para cálculos de resolução dinâmica. Separar as medições **normalizadas** e **dimensionadas** evita loops de feedback em que um estado de energia mais baixo faz com que a resolução dinâmica continue caindo até atingir a mais baixa.
</Note>

## Próximas etapas

* [Como usar o PIX para criação de perfil de sustentabilidade](/pt-BR/build/game-principles/sustainability/sustainability-pix-guide)
* [Visão geral de sustentabilidade para desenvolvedores](/pt-BR/build/game-principles/sustainability/sustainability-developer-overview)
* [Guia de sustentabilidade do devkit](/pt-BR/build/game-principles/sustainability/sustainability-devkit-guide)
* [Fundamentos de eficiência energética](/pt-BR/build/game-principles/sustainability/energy-efficiency-essentials)


## Related topics

- [Fundamentos de eficiência energética de jogos XBOX](/pt-BR/build/game-principles/sustainability/energy-efficiency-essentials.md)
- [Visão geral de sustentabilidade](/pt-BR/build/game-principles/sustainability/sustainability-overview.md)
- [Criação de perfil de sustentabilidade com o PIX](/pt-BR/build/game-principles/sustainability/sustainability-pix-guide.md)
- [Estudo de caso de Gears of War: Reloaded](/pt-BR/build/game-principles/sustainability/case-studies/case-studies-gears-of-war-reloaded.md)
- [Medir o consumo de energia com seu devkit](/pt-BR/build/game-principles/sustainability/sustainability-devkit-guide.md)
