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

# PIX GPU 擷取

> PIX GPU 擷取

GPU 擷取用於記錄傳送至 GPU 的所有輸入與命令，然後重播以供稍後分析與實驗。您可以透過兩種方式建立 GPU 擷取：

* [PIX UI GPU 擷取](#ID4E5)：非常適合擷取執行中的遊戲。
* [以程式設計方式進行 GPU 擷取](#ID4ERC)：非常適合根據遊戲情境進行擷取。例如，在您發射電漿步槍時擷取畫面。

GPU 擷取會以 *.xpix* 副檔名儲存。請注意，副檔名已從 .pix3 變更。

<a id="ID4E5" />

## PIX UI GPU 擷取

使用 PIX 進行 GPU 擷取。若要開始使用，請確定您有一個使用檢測驅動程式執行的遊戲，並已連線至開發套件。PIX UI 看起來應該類似下圖。

<img src="https://mintcdn.com/microsoft-4404708b/JDSo1nVETb4hLQs6/images/gdk/tools/pix_gpu_fullscreen.webp?fit=max&auto=format&n=JDSo1nVETb4hLQs6&q=85&s=5510703b6db3d3d03dfea71c84ae0f5c" alt="PIX UI" width="2557" height="1386" data-path="images/gdk/tools/pix_gpu_fullscreen.webp" />

### **擷取 UI**

進行 GPU 擷取的控制項位於 "XBOX Connection" 檢視的上方，該檢視預設停駐在視窗的左上方。如下圖所示選取 Options 下拉式功能表。展開或摺疊 GPU 擷取選項的鍵盤快速鍵是 Ctrl+Shift+N。

<img src="https://mintcdn.com/microsoft-4404708b/cbgdF-D3rUKJ-fFH/images/gdk/tools/pix_gpu_options.png?fit=max&auto=format&n=cbgdF-D3rUKJ-fFH&q=85&s=be9e8818d7e4240973f3c197063bc03b" alt="GPU 擷取的選項" width="910" height="704" data-path="images/gdk/tools/pix_gpu_options.png" />

### **擷取選項**

GPU 擷取可使用下列選項：

* 擷取畫面數：用來指定要擷取的畫面數目。請注意，隨著畫面數增加，擷取會變得更大，也可能更難瀏覽。
* 包含本機時間擷取：此選項會指示 PIX 除了 GPU 擷取之外，還進行簡短的時間擷取，以便比較遊戲執行階段計時與 GPU 擷取分析所回報的計時。
* 擷取所有 GPU 對應記憶體：在 XBOX Series X|S 平台上，預設只會擷取 GPU 存取的記憶體。此選項會指示 PIX 擷取所有記憶體，無論 GPU 是否使用。選取此選項會使擷取大小大幅增加，但可確保擷取所有資源，即使它們未被使用。
* 擷取完整的 GPU 存取紋理與緩衝區：在 XBOX Series X|S 平台上，如果您未選取擷取所有 GPU 記憶體的選項，可以控制 GPU 存取資源的擷取。這些選項適用於檢視紋理子資源 (例如未存取的 MIP 層級) 或部分緩衝區 (例如部分周遊的 DXR 加速結構)，同時仍維持相對較小的擷取檔案大小。
* 啟用即時分析：此選項會讓 PIX 使用「即時分析」，在擷取之後立即在執行中遊戲的內容中分析 GPU 擷取。分析期間，遊戲會保持執行，但所有遊戲執行緒都會暫停。當您準備結束分析工作階段時，可以停止分析或關閉擷取來繼續遊戲。

指定選項之後，選取相機按鈕以進行 GPU 擷取。進行 GPU 擷取的鍵盤快速鍵是 Ctrl+N。開發套件索引標籤旁會開啟新的擷取索引標籤。您可以選取 **Home** > **Save** 將擷取儲存至檔案。(鍵盤快速鍵是 Ctrl+S。)

<a id="ID4ERC" />

## 以程式設計方式進行 GPU 擷取

GPU 擷取方法擷取的資料與使用 PIX 工具相同。這些方法可讓您在程式碼層級控制要擷取的畫面，或擷取開始與結束的時間。

ID3D12CommandQueue 介面中有三個方法。資訊會擷取至主機上的檔案。該檔案的副檔名為 .xpix，需要複製到開發 PC 上進行分析。

* [ID3D12CommandQueue.PIXGpuBeginCapture](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_pixgpubegincapture)：使用此方法擷取多個畫面。每次呼叫 **PIXGpuBeginCapture** 都必須搭配呼叫 **PIXGpuEndCapture**。在 **PIXGpuEndCapture** 呼叫完成之前，檔案不會儲存。
* [ID3D12CommandQueue.PIXGpuEndCapture](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_pixgpuendcapture)：將此方法與 **PIXGpuBeginCapture** 搭配使用。
* [ID3D12CommandQueue.PIXGpuCaptureNextFrame](/zh-TW/reference/graphics/d3d12_x/interfaces/id3d12commandqueue/methods/id3d12commandqueue_pixgpucapturenextframe)：使用此方法擷取單一畫面。此呼叫不需要包含在 **PIXGpuBeginCapture** 與 **PIXGpuEndCapture** 呼叫之間。

#### GPU 擷取方法的教學課程

本教學課程會在 Simple Triangle 應用程式中新增畫面擷取。

1. 如果您尚未撰寫 Simple Triangle 應用程式，請依照 [Microsoft Game Development Kit 範例](/zh-TW/home/setup-install/samples)中 Simple Triangle 範例的說明撰寫。
2. 確保應用程式已準備好進行 PIX 分析。如果您尚未這麼做，請完成[設定與開始使用](/zh-TW/tools/tools-console/pix/setup-getting-started)指南。
3. 在您想要擷取下一個畫面的任何位置加入下列程式碼行。

```cpp theme={null}
      HRESULT hr = m_commandQueue->PIXGpuCaptureNextFrame(0, L"D:\\TriangleCap.xpix");
      if (!SUCCEEDED(hr))
      {
        // GPU Capture wasn't successful. Handle the failure.
      }
```

1. 開啟 **XBOX Gaming Command Prompt** 視窗，然後使用[遠端工具](/zh-TW/tools/tools-console/commandlinetools/commandlinetools)將資料檔案複製到開發 PC 上的適當資料夾。

```text theme={null}
      xbcp xD:\TriangleCap.xpix C:\GPUCaptures
```

1. 在 PIX 中開啟 `C:\GPUCaptures\TriangleCap.xpix` 檔案。

## GPU 擷取快取檔案 (.pixcache)

為了改善使用者體驗，PIX 會將與 GPU 擷取相關的暫存資料儲存在主機上，以及執行 PIX 的 PC 上。這些檔案的副檔名為 .pixcache。此功能由下列設定控制："Enable SSD cache"

### 主機 pixcache 檔案

在主機上，pixcache 檔案儲存在 XD:\DRIVES\DEVELOPMENT\PIX 目錄中。每個擷取都由 GUID 識別 (也會顯示在 PIX 的 "File Details" 檢視中)。快取檔案儲存在以此 GUID 命名的目錄中。

您可以使用 xbdir 命令列出主機上的所有快取檔案：

```text theme={null}
xbdir /s XD:\DRIVES\DEVELOPMENT\PIX
```

您可以使用 xbrmdir 命令從主機清除所有快取檔案：

```text theme={null}
xbrmdir /f XD:\DRIVES\DEVELOPMENT\PIX
```

### PC pixcache 檔案

系統會在 %TMP%\PIX 資料夾中建立以擷取 {GUID} 命名的資料夾。擷取資料夾中最多有 4 個不同的檔案。

* pagefile.pixcache
  * 引擎會逐漸將擷取資料備份到磁碟。這會隨著時間大幅減少引擎的工作集。
* resources.pixcache
  * 收集資源可能是很耗時的作業。如果在工作階段期間收集了資源，它們會儲存到磁碟。目前有一項限制：使用 ExecuteIndirect 時無法使用此功能。
* sqtt.pixcache
  * 執行分析後，時間軸與 Sqtt 資料會被快取。開啟擷取時會填入這些資料，不需要執行分析。開啟後第一次執行分析時不會要求資料，因此作業會快得多。
* bottlenecks.pixcache
  * 執行分析後，瓶頸資料會被快取。此功能僅適用於 XBOX One Series 主機。

如果使用快取檔案開啟擷取時發生任何問題，或使用者希望不使用快取檔案開始，可以使用下列選項："Clear pixcache files before open"

如果 %TMP% 資料夾所在的磁碟機空間過低，PIX 會發出警告並提供清理選項。臨界值由此選項設定："Storage free space warning threshold (GB)"。

## 後續步驟

既然您已了解如何進行 GPU 擷取，接下來讓我們深入分析擷取。請從查看 [GPU 擷取概觀](/zh-TW/tools/tools-console/pix/gpu/pix-gpu-overview-page)開始。稍後，我們會查看[時間軸檢視](/zh-TW/tools/tools-console/pix/gpu/pix-gpu-timeline-tab)、[管線檢視](/zh-TW/tools/tools-console/pix/gpu/pix-gpu-pipeline-view)，並使用 [Dr. PIX](/zh-TW/tools/tools-console/pix/gpu/pix-drpix) 執行實驗。

## 另請參閱

[分析 GPU 效能](/zh-TW/tools/tools-console/pix/gpu/gpu-performance)

[PIX](/zh-TW/tools/tools-console/pix/pix)


## Related topics

- [PIX GPU 擷取與效能分析](/zh-TW/tools/tools-console/pix/gpu/index.md)
- [PIX3](/zh-TW/reference/tools/pix3/pix3_members.md)
- [NDA 主題目錄 - Microsoft Learn 線上連結](/zh-TW/nda/nda-topic-directory.md)
- [PIXBeginEvent 參考](/zh-TW/reference/tools/pix3/functions/pixbeginevent_3.md)
- [PIXBeginEvent 函式](/zh-TW/reference/tools/pix3/functions/pixbeginevent.md)
