共用方式為


使用 GPU 擷取分析畫面

GPU (或畫面)會擷取應用程式所呼叫的所有 Direct3D 12 API 呼叫,通常是在單一畫面中(請參閱 取得 GPU 擷取)。 PIX 可以重新執行這些 API 呼叫,以顯示 API 呼叫參數、管線和資源狀態、資源內容等等的相關信息。

提示

如果遊戲以無效的方式呼叫 Direct3D 12,PIX 不可能成功擷取 GPU。 PIX 會盡最大努力在不正確的使用模式的情況下保持健全狀態,但這種情況有時不可避免地會發生垃圾、垃圾輸出的情況。如果您難以擷取 GPU 擷取,請嘗試使用 D3D12 偵錯層和 GPU 型驗證 來尋找並修正任何不正確的 API 呼叫。

擷取 GPU

從 [ 連線 ] 檢視中,啟動或附加至您想要的程序(確保已核取相關的 [GPU 擷取 ] 選項)。

視需要設定 GPU 擷取選項。 若要擷取,請按兩下PIX中的 [ 取得 GPU 擷取 ] 按鈕,或按 Alt+Print Screen (或 F11,可在 PIX 設定中設定)。 您會在 PIX UI 中看到擷取的縮圖。 此時,您可以視需要終止應用程式。 按兩下縮圖以開啟擷取。

程序設計擷取

您可以使用 WinPixEventRuntime 以程式設計方式擷取擷取。 如需詳細資訊,請參閱部落格文章 程序設計擷取

使用事件檢視來檢視 API 呼叫

[ 事件 ] 檢視會顯示記錄到 GPU 擷取的所有 API 呼叫。 遊戲所使用的每個 Direct3D 12 佇列(圖形、計算或複製)都有個別的清單。

您可以篩選事件清單,選擇性地使用正則表示式(按下標示為 .*按鈕)。 根據預設,它只會顯示導致 GPU 硬體實際轉譯工作的事件,而不是只是準備狀態以供後續作業使用。 若要包含非 GPU 事件,請按下標示為 ! 的 按鈕。G.

如需每個事件的詳細資訊,例如完整的 API 呼叫參數集,請參閱 事件詳細 數據檢視。 該檢視預設包含在 [管線] 索引標籤中,但也可以透過主要 PIX 視窗右上角的 [版面配置設計模式] 按鈕,新增至目前的版面配置。

畫面格分析

開啟 GPU 擷取后,切換至 [概觀] 索引標籤。在這裡,您會看到有關擷取的一些基本詳細數據。

若要開始分析,您必須收集計時數據。 若要這樣做,請按兩下 [事件] 檢視右上方的 [收集計時數據] 按鈕,或按兩下 [按兩下這裡] 以開始分析和收集時間軸檢視中的計時數據文字。 它會在擷取中重新執行 GPU 工作,並收集基本計時數據,例如執行持續時間(如果您的應用程式有 PixEvents,則以 PixEvents 表示)。 完成後,您可以收集時間軸車道中要繪製的其他數據,例如佔用資訊和其他 GPU 特定計數器。

提示

為了獲得最佳結果,在 PIX 收集計時數據時,請勿與您的電腦互動;並關閉任何其他可能使用 GPU 的應用程式。

您也可以在 [事件] 檢視中看到 API 呼叫細分的計數器。 若要啟用/停用計數器,請按兩下 [事件清單計數器] 按鈕(事件檢視的右上方)。

計時數據

GPU 計時資訊有兩個來源:

  1. GPU 開始處理每個工作片段時,管線時間戳報告。 請注意,只有在執行 Windows 10、組建 14393(或更新版本)與適當的圖形驅動程式時,才能使用此數據(請參閱部落格文章 需求)。 如果無法使用管道開始時間戳,計時數據需要較長的時間才能收集。
  2. 當 GPU 完成處理每個工作時,管線結束時間戳報告。

由於 GPU 是大量平行且深入的管線,因此一些工作通常會同時執行,並讓相鄰作業重疊。 PIX 會以兩種不同的方式測量時間,以深入瞭解硬體的平行執行模型:

  1. 執行持續時間是從管線開始到每個個別工作片段的管道結束時間戳來測量。 以這種方式測量時,與先前專案平行執行的 GPU 工作專案可能會比在 GPU 上爭用而以隔離方式執行的時間長。
  2. EOP 持續時間是從上一個專案的管道結尾 (EOP) 時間戳測量到這個專案的 EOP 時間戳。 因此,與先前專案平行執行的工作項目看起來會比隔離執行的時間短,如果某些專案與上一個專案完全平行完成,甚至可能會報告為零工期。

[ 時程表 ] 檢視會顯示一或多個通道,其中顯示每個 GPU 作業的時間。 有一個個別的通道,其中包含遊戲所使用的每個佇列(圖形、計算或複製)的 EOP 持續時間數據,再加上單一車道,其中顯示跨所有佇列合併的執行持續時間數據(其中可用)。

PIX GPU 擷取時程表檢視中的計時資訊

提示

Windows 上的 PIX 目前不會在不同佇列上重疊 GPU 工作,同時分析 GPU 擷取中的時間。 如果您想要看到重疊的 異步計算計時數據,請考慮擷取 計時。 在 GPU 擷取中,如果遊戲使用異步計算同時執行轉譯和計算工作,則 PIX 會改為先測量一個,然後再測量另一個。 相較於在原始遊戲內執行的方式(由於 GPU 上的競爭減少),但總時間較長(由於平行處理減少),這可能會導致工作每個部分的回報持續時間較短。

GPU 計數器和佔用

PIX 會透過 GPU 外掛程式公開 IHD 所提供的硬體特定性能計數器。 您可以在 [事件清單計數器] 檢視中啟用和收集這些計數器(可在 [事件] 檢視右上方啟用的按鈕)或 [時程表計數器] 檢視 (可在 [時程表] 檢視右上方啟用的按鈕)。

在某些 GPU 上,PIX 也可以收集佔用資訊。 GPU 通常會建構為重複區塊的階層,其中每個層級都可能會共享資源。 例如,虛構 GPU 的結構可能像這樣

範例 GPU 區塊圖例

GPU 會藉由將著色器工作分解成波浪來執行著色器(這些也稱為變形或波浪正面)。 在上圖中,每個藍色區塊都能夠執行一波。 每個綠色區塊最多可以執行四波。

當所有藍調共用單一緩存器集時,如果工作負載需要所有緩存器,則一次只能執行一波,才能在綠色區塊中執行。 在這種情況下,綠色街區的佔用量為 1,總入住人數為 4。

在任何時候,所有綠色區塊都可能會執行不同的波數。 在上述四個綠色區塊中,一個可能執行 3 波、另一波 2 波,其餘 1 波。 PIX 會將所有數據都歸結為單一值,也就是此範例中的最大佔用量為 3。

這會顯示在佔用車道的 PIX 中,其會顯示最大佔用率,並以著色器階段分隔。 這表示 GPU 能夠平行執行多少工作,較高橫條顯示更好的 GPU 使用率。

PIX GPU 擷取時程表檢視中的 GPU 計數器

偵錯轉譯問題

開啟 GPU 擷取后,切換至 [管線] 索引標籤。該索引標籤包含 [事件] 檢視、數個狀態和資源偵測器檢視,以及 [管線] 檢視。

在 [事件] 檢視中選取事件會填入各種檢視,尤其是 [管線] 檢視,可用來檢查根簽章和管線狀態,以及系結資源。 管檢視也是著色器偵錯的進入點。

提示

若要執行大部分的功能,您必須開始分析。 分析是 PIX 如何收集計時數據、狀態資訊和資源。 有許多方式可以開始分析,但全域方式是透過 應用程式右上方的 [開始分析播放 ] 按鈕。 請確定已選取所需的 GPU。

檢視 Direct3D 12 對象、參數和狀態

在 [事件] 檢視中選取事件之後,[狀態] 和 [管線] 檢視會在該事件發生時顯示 Direct3D 狀態的詳細數據。 您可以在該處檢視哪些資源系結至管線、著色器程式代碼、輸入、輸出,以及目前系結的 rendertarget(s)。

Direct3D 管線狀態

在管線檢視中檢視 VS 輸出

著色器偵錯

選取適當的事件並執行分析之後,您可以對著色器進行偵錯。 在 [管線] 檢視中,有數種方式可以起始著色器偵錯:

  1. 選取所需著色器階段下的著色器項目,然後按下綠色播放按鈕。 開始偵錯會話之前,請確定您設定適當的著色器參數(例如頂點著色器的實例和頂點標識符,或圖元著色器的圖元座標)。
  2. 以滑鼠右鍵按兩下資源查看器(例如 VS 輸出或 SRV/UAV/RTV),然後選取適當的 [偵錯 ] 選項。
  3. 檢視適當的資源時,按兩下 [圖元詳細數據] 檢視中的 [偵錯圖元] 按鈕(例如 SRV/UAV/RTV)。

提示

如果您在偵錯時看不到著色器來源,您可能會遺漏偵錯資訊。 請確定您正在為應用程式產生著色器 PDB,並已 將 PIX 設定為載入這些 PDB

著色器編輯和繼續

HLSL 著色器程式代碼可以直接在 PIX 內編輯,讓您能夠立即看到變更對轉譯結果或效能的影響。 這對於原型設計和優化著色器很有用,因為它可以大幅減少嘗試不同想法時的轉機時間。

選取著色器之後,您可以視需要編輯其程式代碼,然後按兩下 [編輯>套用]。 其他檢視(例如 OM RTV 0)將會更新以顯示變更的效果。 您可能會發現,將多個管線檢視實例停駐在彼此旁邊,以便同時檢視轉譯目標結果,以編輯著色器程序代碼。

如果您無法追蹤您儲存的確切變更內容,請以滑鼠右鍵按兩下著色器程式代碼,然後選擇 [Diff with Original]。

提示

Windows 上的 PIX 尚不支援將修改過的著色器儲存回擷取檔案。

針對視覺化檢視進行偵錯

檢查轉譯目標目標的內容時,可以在管線檢視中使用 Rendertarget 可視化檢視。 默認影像可視化檢視只會將影像顯示為正常,而且可以在 [視覺效果] 檢視中選取不同的視覺效果來變更。

像素歷史記錄

對於任何類似圖元的資源(例如 RTV、UAV 或深度緩衝區),您可以使用圖元歷程記錄來檢視影響特定圖元的所有作業。 您可以用滑鼠右鍵按下所需的圖元,然後選取 [顯示圖元歷程記錄],或按兩下 [圖元詳細數據] 檢視中的 [圖元歷程記錄] 按鈕來存取。

注意事項和其他注意事項

  • 如果遊戲以無效的方式呼叫 Direct3D 12,PIX 不可能成功擷取 GPU。 PIX 會盡最大努力在不正確的使用模式的情況下保持健全狀態,但這種情況有時不可避免地會發生垃圾、垃圾輸出的情況。如果您難以取得 GPU 擷取,請嘗試使用 D3D12 偵錯層和 GPU 型驗證 來尋找並修正任何不正確的 API 呼叫。
  • Windows GPU 擷取通常無法跨不同的 GPU 硬體和驅動程式版本進行移植。 在大部分情況下,在一部機器上擷取的擷取會正確播放來自相同硬體系列的其他類似 GPU,而某些遊戲的擷取甚至可能會跨完全不同的製造商的 GPU 運作,但驅動程式升級可能破壞與舊擷取的相容性。 PIX 可以保證只有在 GPU 和驅動程式完全相同時,才會成功播放,因此如果沒有完全相符專案,PIX 會在開始分析之前發出警告。 請繼續以您自己的風險超過該警告。
  • PIX 對多個 GPU 的支援有限。 無論應用程式使用多少個適配卡,它一律會在單一適配卡上播放 GPU 擷取。 PIX 可讓您從 PIX 工具列中的下拉式能供性選取播放配接器。 如果應用程式只使用一張配接器,PIX 會嘗試自動選取播放配接器。
  • 針對不具決定性的 ExecuteIndirect 工作負載,您可能想要啟用 [使用重新執行時間 ExecuteIndirect 自變數緩衝區 ] 設定。