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

# 動態電源狀態 (DPS)

> 選擇加入動態電源狀態，讓 GPU 驅動程式根據轉譯工作負載調整電源，在 XBOX Series 主機上額外節省 10–15% 的電力。

<Warning>
  DPS 僅適用於 **XBOX Series** 主機。對較早的 XBOX 主機沒有作用。
</Warning>

**動態電源狀態 (DPS)** 會根據轉譯工作負載動態調整 GPU 的電源等級。當 GPU 未被完全使用時，DPS 會調降電源狀態，在不影響效能的情況下節省能源。圖形驅動程式會根據最近的畫面時間記錄自動進行調整。

若沒有 DPS，GPU 會鎖定在電源狀態 **P4**，這表示即使 GPU 閒置，耗電量也會超過所需。只要工作負載允許，DPS 就會解除鎖定較低的電源狀態 (P0–P3)。

## 運作方式

1. 遊戲啟用 GPU 動態電源狀態。
2. GPU 計算標準化的畫面統計資料，並將其儲存為歷史資料。
3. GPU 根據目前需求與歷史資料自動變更電源狀態，以節省能源。

<Note>
  遊戲可以透過採用 [XBOX 永續性工具組](/zh-TW/build/game-principles/sustainability/energy-efficiency-essentials) 的其他部分，進一步降低能源消耗。
</Note>

## 案例研究

### Call of Duty: Black Ops 6

Call of Duty 技術資深總監 Rulon Raymond：

> 我們花了幾天時間試驗 DPS，結果相當令人振奮。具體來說，在我們使用 XBOX 永續性工具組所導入的節能措施**之外**，我們還能看到額外 **10–15% 的電力節省**。我們原本就已在遊戲引擎的某些部分進行降速 (例如在選單或前端畫面中)，而玩家的畫面播放速率完全沒有變化，這為我們節省了大量電力，但 DPS 讓我們不費吹灰之力就獲得了額外的節省。

在發行時，Black Ops 6 團隊的計畫如下：

* 在所有已套用節能措施的區域啟用 DPS。
* 提供一個隨時啟用 DPS 的旗標 (預設為關閉)，同時持續進行為期多天的效能測試。

### Two Point Museum

Two Point Studios 技術總監暨共同創辦人 Ben Hymers 透過 XBOX 團隊管理的雲端設定推出 DPS，完全不需要變更程式碼：

> 我們將動態電源狀態與 Constrained+ 模式搭配測試，以將能源效率最大化。這些功能結合起來，**在主選單中**將耗電量降低了約 **50–58%**，並在受限模式期間減少了 **39–63%** 的能源使用量。自推出以來，我們觀察到平均能源消耗明顯下降，且未降低遊戲的畫面品質。例如，XBOX Series X 的耗電量已從平均 **135 W 降至 125 W**。以我們的整體玩家群計算，這相當於每年節省約 **6.5 百萬瓦時**的能源，等同於連續不停看電視 65,000 小時，也就是將近 7.5 年。

Two Point Museum 是第一家透過雲端設定遠端採用 DPS 的第三方工作室。

## 在不變更程式碼的情況下測試 DPS (僅限開發)

您可以在開發套件上全域啟用 DPS，而不需要重新建置您的遊戲：

<Steps>
  <Step title="更新您的開發套件">
    確定您的開發套件至少已安裝 **August 2024 Recovery**。
  </Step>

  <Step title="建立旗標檔案">
    在您的電腦上建立名為 `DynamicPowerEnable` 的空白檔案。
  </Step>

  <Step title="將其複製到主機的 D: 磁碟機">
    ```sh theme={null}
    xbcp DynamicPowerEnable xD:\
    ```
  </Step>

  <Step title="啟動並進行分析">
    啟動您的遊戲。DPS 現在已啟用。
  </Step>

  <Step title="完成後停用 DPS">
    ```sh theme={null}
    xbdel xD:\DynamicPowerEnable
    ```

    重新啟動遊戲。
  </Step>
</Steps>

### 即時觀察 DPS

透過 PIX 或 XBOX Manager 中的主機設定啟用 **Title Performance Overlay**。

* 如果已啟用 DPS，覆疊畫面右下角會包含一條紅線以及 **GPU 電源狀態**計量 (0–4)。**4** 表示全速運作；數值越低表示越節能。
* 如果已停用 DPS，GPU 電源狀態會顯示 `N/A`。

使用 PIX 的 **Power Load %** 計量來測量遊戲特定部分中 GPU 能源使用量的變化。

<Warning>
  遊戲**無法**在零售版中使用 `DynamicPowerEnable` 檔案啟用 DPS。若為零售版本，請使用 `SetDriverHintX` (如下所示)。
</Warning>

## 在您的遊戲中啟用 DPS (零售版)

在圖形裝置上使用現有的 `SetDriverHintX()` API。

### API

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

若使用 **June 2024 GDK** 或更新版本，請使用列舉：

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

若使用 **June 2024 之前的 GDK** (或較舊的 XDK 遊戲)，請直接使用此值：

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

### 啟用 DPS

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

### 停用 DPS

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

DPS 可以在遊戲過程中切換，但隨時保持啟用可獲得最大的節省效果。

<Warning>
  如果您的遊戲會切換 DPS，**請在 PLM `Resume()` 處理常式中重設所需的值**。DPS 狀態在暫停/繼續之間不會保留。
</Warning>

## 使用畫面統計資料在執行階段偵測 DPS

遊戲可以查詢畫面統計資料，根據 DPS 的行為做出轉譯決策 (例如動態解析度等)。

### GetFrameStatisticsX

新增了一種畫面統計資料類型：

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

及其相關結構：

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

現有的 `D3D12XBOX_RENDER_STATISTICS` 會傳回 `GPUBusyDuration`：

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

`GPUBusyDuration` 是**標準化**的值，它假設 GPU 時脈處於 P4，且不受目前電源狀態影響。電源調整畫面統計資料**會**受到電源狀態變更的影響，因此會與 `GPUBusyDuration` 不同。

### 範例

在 P4 下需要 8 毫秒的 GPU 工作負載，在 P2 (較低時脈) 下會延長至 12 毫秒：

| 值 | DPS 關閉 (P4) | DPS 開啟 (P2) |
| - | - | - |
| `GPUBusyDuration` | 8 毫秒 | 8 毫秒 |
| `GPUBusyDurationScaled` | 8 毫秒 | 12 毫秒 |
| `ScaleFactor` | 1 | 0.67 |

<Note>
  之所以保留標準化的 `GPUBusyDuration`，是因為遊戲引擎會使用它來計算動態解析度。將**標準化**與**調整後**的測量值分開，可避免產生回饋迴圈，也就是較低的電源狀態導致動態解析度不斷下降，直到降到最低為止。
</Note>

## 後續步驟

* [如何使用 PIX 進行永續性分析](/zh-TW/build/game-principles/sustainability/sustainability-pix-guide)
* [永續性開發人員概觀](/zh-TW/build/game-principles/sustainability/sustainability-developer-overview)
* [永續性開發套件指南](/zh-TW/build/game-principles/sustainability/sustainability-devkit-guide)
* [能源效率基本要點](/zh-TW/build/game-principles/sustainability/energy-efficiency-essentials)


## Related topics

- [XBOX 主機遊戲的認證測試 XBOX 需求](/zh-TW/publishing/certification/console-cert-tested-requirements.md)
- [媒體驗證測試步驟](/zh-TW/publishing/game-publishing/concepts/certification/certification-media-validation-test-steps.md)
- [XR-003 提交的遊戲品質](/zh-TW/publishing/certification/xr/xr-003.md)
- [XR-001 遊戲穩定性](/zh-TW/publishing/certification/xr/xr-001.md)
- [XR-052 使用者狀態與遊戲存檔位置、漫遊及相依性](/zh-TW/publishing/certification/xr/xr-052.md)
