跳轉到主要內容
PIX 能夠提供影響著色器效能之因素的深入資訊,例如 GPR 壓力、變數與暫存器的對應、暫存器存留期、指令執行成本、指令發出速率等。反覆修改您的著色器、產生效能資料,並驗證變更的效果。Shader Explorer 從 XBOX Series X|S 開始提供。

從著色器檔案或 PDB 建立新專案

從 PIX 開啟著色器原始程式檔 (.hlsl) 或偵錯資訊檔案 (.pdb),即可建立 Shader Explorer 專案。 開啟著色器原始程式檔會將著色器原始碼匯入專案,但您必須透過 Source 檢視中的 Compiler Options 索引標籤指定編譯引數。 開啟偵錯資訊檔案會匯入著色器原始碼以及原始編譯的編譯引數。這些內容可以透過 Source 檢視中的 Compiler Options 索引標籤進行編輯。 您可以選取 Home > Save 來儲存產生的專案。(鍵盤快速鍵為 Ctrl+S。)

從 GPU 擷取建立新專案

從 GPU 擷取的 Pipeline 檢視匯出著色器,即可建立 Shader Explorer 專案。瀏覽至您感興趣的著色器,然後按一下 Pipeline 檢視 Commands 面板中 Shader Explorer 區段底下的 Export to Project 按鈕。匯出需要載入著色器偵錯資訊 (PDB),以提供著色器原始碼。 您可以選取 Home > Save 來儲存產生的專案。(鍵盤快速鍵為 Ctrl+S。)

產生效能資料

開啟 Shader Explorer 專案後,下一步是產生效能資料。這需要編譯著色器 (PIX 會自動新增一些額外的旗標) 以產生效能資料。按一下 Source 檢視中的 Compile 按鈕。 Source 檢視中顯示編譯按鈕位置的螢幕擷取畫面 如果您想使用 PIX 隨附編譯器以外的其他編譯器,請編輯 Source 檢視 Compiler Options 索引標籤中的 Compilers Path 欄位。 Source 檢視中顯示可修改 compilers path 欄位之位置的螢幕擷取畫面 編譯完成後,輔助檢視會填入編譯產生的資料。如果有任何編譯錯誤,會顯示在 Source 檢視的 Errors 面板中。按兩下錯誤即可瀏覽至對應的原始碼位置。 顯示數個編譯器錯誤之錯誤索引標籤的螢幕擷取畫面

暫存器壓力

暫存器壓力是主要的佔用率 (執行中的著色器 Wave 數量) 限制因素之一,因此會直接影響效能。如需執行階段佔用率與暫存器壓力,請參閱 GPU 擷取中的 Wave Occupancy 與 VGPR Occupancy 時間軸。 GPU 擷取中 Wave 佔用率與 VGPR 佔用率時間軸的螢幕擷取畫面 Shader Explorer 暫存器壓力視覺效果會顯示區塊層級與指令層級的暫存器配置。壓力長條的紅色區段表示該指令的使用量增加。將滑鼠游標停留在壓力視覺效果上,即可查看指令的使用量值。 滑鼠游標停留時顯示指令使用量值的螢幕擷取畫面 使用 Block Disassembly 檢視 Options 面板中的 Register Types 切換開關,設定要顯示的暫存器類型 (SGPR、VGPR 或兩者)。 視覺效果選項中顯示設定暫存器類型之位置的螢幕擷取畫面

暫存器存留期

暫存器存留期表示著色器中使用暫存器的部分。當暫存器正在使用中,而指令需要額外的暫存器時,就必須配置更多暫存器,因而增加暫存器壓力,並可能降低佔用率。 Shader Explorer 暫存器存留期視覺效果會顯示每個暫存器在整個著色器中的存留期。將滑鼠游標停留在存留期長條上,即可查看暫存器在指定區塊中的使用方式。存留期長條會依暫存器類型 (SGPR 或 VGPR) 著色,未完全跨越區塊的暫存器則使用不同的色彩。使用公式 (!LiveIn OR !Live Out) AND IsRead 判斷未完全跨越區塊的暫存器,是降低暫存器壓力時可能的目標暫存器。 顯示暫存器存留期視覺效果的螢幕擷取畫面 使用 Block Disassembly 檢視 Options 面板中的 Register Types 切換開關,設定要顯示的暫存器類型 (SGPR、VGPR 或兩者)。 視覺效果選項中顯示設定暫存器類型之位置的螢幕擷取畫面

指令相依性

按一下指令運算元,即可醒目提示該運算元所使用之暫存器的所有使用位置。按一下指令名稱,即可醒目提示該指令所有運算元所使用之暫存器的所有使用位置。 醒目提示之暫存器的螢幕擷取畫面

控制流程

區塊 (也稱為基本區塊或控制流程區塊) 用於將控制流程分割成可獨立最佳化的較小區段。 Shader Explorer 反組譯會以區塊區段的形式顯示,每個區段都可以個別摺疊或展開。按一下 [-] 或 [+] 連結可摺疊或展開區塊,或以滑鼠右鍵按一下反組譯以取得摺疊或展開所有區塊的選項。 每個區塊都會連結至其後繼區塊,後繼區塊顯示在區塊名稱之後。將滑鼠游標停留在後繼區塊上可查看控制流程類型,按一下後繼區塊則可瀏覽至該區塊。 滑鼠游標停留時顯示後繼區塊之控制流程類型的螢幕擷取畫面

指令色彩

根據預設,著色器指令會依其類別 (VALU、SALU 等) 著色。使用 Block Disassembly 檢視 Options 面板中的 Instruction Colors 切換開關設定色彩模式。 Rate 色彩選項可讓您快速識別以不同於預設速率 (XBOX Series X|S 為每個週期 1 個指令) 發出的指令。其中包括封裝數學、F64 VALU 與超越函數 VALU。 依速率以色彩標示指令的螢幕擷取畫面

超越函數 VALU (XBOX Series X|S)

VALU 單元有兩條內部數學管線:一般與超越函數。一般管線在 1 個時脈內發出指令,超越函數管線則在 4 個時脈內發出 32 位元指令。64 位元指令會使用兩條管線,並在 16 個時脈內發出。硬體每個週期可以向任一管線發出一個 VALU 指令,但不能同時向兩者發出。由於超越函數指令需要多個週期才能發出,一般指令與超越函數指令的執行可能會重疊。

在指令與原始碼之間瀏覽

啟用內嵌原始碼時 (透過 Block Disassembly 檢視中的 Options panel),反組譯中會插入顯示對應原始碼位置的註解。 啟用內嵌原始碼時依速率以色彩標示指令的螢幕擷取畫面 顯示插入反組譯中並含有指向 Source 檢視之連結的註解的螢幕擷取畫面 按一下 Block Disassembly 檢視中的指令名稱,或指令上方的 [src] 連結,即可瀏覽至 Source 檢視中的對應位置。 [src] 連結代表呼叫堆疊的最深層,而每個後續的 [inl] 連結代表呼叫堆疊較高層級的內嵌位置。將滑鼠游標停留在這些連結上可快速檢視對應的原始碼,按一下這些連結則可瀏覽至 Source 檢視中的對應位置。 按一下反組譯註解中的 src 連結時顯示 Source 檢視暫留資訊的螢幕擷取畫面

著色器統計資料

Block Disassembly 檢視的 Details 面板提供已編譯著色器的統計資料。 Shader Details:著色器的高階統計資料。 Block Details:所選區塊的暫存器使用量統計資料。按一下 Block Disassembly 檢視中的指令,即可選取包含該指令的區塊。 Compiler Stats:來自 DXCompiler 的 DxcXboxShaderStatisticsV2 完整輸出。 編譯器統計資料詳細資料面板的螢幕擷取畫面

變數與暫存器

Block Disassembly 檢視中的 Variables 面板會顯示所選指令的變數與暫存器對應。按一下 Block Disassembly 檢視中的指令即可選取它。 已選取暫存器之變數面板的螢幕擷取畫面 根據預設,此檢視會顯示指令輸入運算元所使用的暫存器。若要檢視所選指令位移處的所有存留暫存器,請從 “Inputs” 切換為 “Live”。若要檢視以原始碼變數為中心的顯示,請從 “Registers” 切換為 “Variables”。 已選取變數之變數面板的螢幕擷取畫面 按一下對應的原始碼變數名稱即可瀏覽至變數宣告,或按一下 Live Start 與 Live End 連結,瀏覽至變數進入或離開範圍的位置。

資料查詢

Block Disassembly 檢視中的 Query 面板可讓您針對專案中包含的資料撰寫查詢。提供範例查詢供參考。自訂查詢可以儲存,並在多個 Shader Explorer 專案中使用。 Block Disassembly 檢視中查詢面板的螢幕擷取畫面

修訂版本

Source 檢視中的 Revisions 面板可讓您反覆修改著色器的多個版本。按一下 Create New 按鈕,即可建立目前所選修訂版本的複本。 Source 檢視中顯示修訂版本面板位置的螢幕擷取畫面 若要比較修訂版本之間的變更,請以滑鼠右鍵按一下 Block Disassembly 檢視中的文字,然後選取 Compare to Revision。如果您尚未在 PIX 設定中設定文字差異比較工具,系統會提示您進行設定。請提供您偏好之文字差異比較工具的路徑以及任何其他引數,PIX 會將兩個檔案作為前兩個引數提供。 Block Disassembly 檢視中顯示 Compare to Revision 功能表選項的螢幕擷取畫面

執行階段指令成本

藉由納入執行階段指令成本資料,可以擴充 Shader Explorer 的功能。此資料是由 GPU 擷取中的 Shader Trace 所產生。

Shader Trace

在 GPU 擷取中,找出您感興趣的繪製或分派,並在 Events 檢視中選取它。開啟 Shader Trace 檢視,確定分析正在執行,然後按一下 Generate Trace 按鈕。 Shader Trace 檢視中已產生之追蹤的螢幕擷取畫面 追蹤完成後,按一下對應於您感興趣之著色器的著色器 Wave。Wave 會依其硬體階段著色。 Shader Stats 面板會開啟,並計算每個指令的執行階段成本 (在著色器的每個 Wave 中取平均值)。 Shader Stats 面板的螢幕擷取畫面 載入 Shader Stats 後,Options 面板中的 Export to Project 按鈕就會啟用。按一下此按鈕,即可在 Shader Explorer 專案中開啟著色器與執行階段指令成本資料。它可以在新專案中開啟,或在已開啟的專案中以新修訂版本開啟。匯出需要載入著色器偵錯資訊 (PDB),以提供著色器原始碼與編譯引數。 按一下 Export to Project 按鈕時所開啟之對話方塊的螢幕擷取畫面 如果 Wave 由多個著色器組成 (例如 ES+GS、LS+HS 或 DXR),您可以選取要匯出的著色器階段。Shader Explorer 目前一次只支援分析單一著色器階段。 您可以選取 Home > Save 來儲存產生的專案。(鍵盤快速鍵為 Ctrl+S。)

指令層級效能

有可用的執行階段指令成本資料時,指令成本會顯示在每個指令旁。 指令成本圓形圖的螢幕擷取畫面 指令成本詳細檢視的螢幕擷取畫面 使用 Options 面板中的 Instruction Cost Mode 切換開關,設定要顯示的成本類型 (Percent of Longest、Percent of Total、Clocks、Percent Waves Visited 等)。將滑鼠游標停留在指令的成本上,即可檢視資料的詳細分析。 變更指令成本模式之功能表選項的螢幕擷取畫面

原始碼層級效能

有可用的執行階段指令成本資料時,指令成本會彙總至原始程式碼。將滑鼠游標停留在原始碼行的成本上,即可檢視促成成本之指令的詳細分析。 促成原始程式碼執行階段指令成本之指令分析的螢幕擷取畫面 使用 Source 檢視中的 Performance 面板設定原始碼層級的視覺效果。選取 Aggregate 模式時,原始碼成本是對應至該原始碼行之所有指令的彙總,而不論其被呼叫的次數或呼叫來源。這會提供整個著色器的總成本。在此模式下,Performance 面板會依成本排序顯示原始程式碼。 原始碼層級效能之彙總成本檢視的螢幕擷取畫面 選取 Callstacks 模式時,原始碼成本會相對於其呼叫堆疊顯示。這可提供原始碼成本相對於其執行內容的深入資訊。在此模式下,Performance 面板會以呼叫端/被呼叫端配置顯示原始程式碼,讓您按一下連結的原始程式碼即可瀏覽呼叫堆疊。 相對於其呼叫堆疊顯示之原始碼成本的螢幕擷取畫面 選取 VALU-only 模式時,只會顯示 VALU 指令的原始碼成本。這可讓您專注於促成 VALU 使用量的原始程式碼。

指令成本資料可用但不相符

若要使用執行階段指令成本資料,成本資料來源之著色器的雜湊,必須與為產生 Shader Explorer 資料而編譯之著色器的雜湊相符。如果雜湊不相符,您會看到下列訊息。 顯示指令成本資料可用但與此修訂版本之已編譯著色器不相符之訊息的螢幕擷取畫面。 若要解決此不相符的情況,您必須在 Shader Explorer 中使用與執行階段指令成本資料相符的編譯器進行編譯。按一下連結以找到相符的編譯器。所需的編譯器版本會顯示在開啟資料夾對話方塊中。編譯器通常來自 GDK 安裝 (C:\Program Files (x86)\Microsoft GDK<version>\GXDK\bin<platform>)。找到編譯器後,路徑會填入 Source 檢視的 Compiler Options 索引標籤中,且著色器會以相符的編譯器重新編譯。

指令成本資料可用但原始碼已修改

若要使用原始碼層級的執行階段指令成本資料,原始程式檔必須與原始編譯相符。修改原始程式檔後,原始碼層級的效能視覺效果會隱藏,且您會看到下列訊息。 顯示指令成本資料可用但原始程式檔已修改,導致原始碼層級成本資料失效之訊息的螢幕擷取畫面。 若要解決此問題,請將專案匯入 GPU 擷取、重新執行 Shader Trace,然後將追蹤匯出至您的 Shader Explorer 專案,作為含有更新之執行階段指令成本資料的新修訂版本。

將著色器匯入回 GPU 擷取

Shader Explorer 專案修訂版本可以從 GPU 擷取中的 Pipeline 檢視匯入 GPU 擷取。瀏覽至您感興趣的著色器,然後按一下 Pipeline 檢視 Commands 面板中 Shader Explorer 區段底下的 Import from Project 按鈕。 顯示 Commands 面板 Shader Explorer 區段底下 Import from Project 按鈕位置的螢幕擷取畫面。 接著選取要從中匯入的 Shader Explorer 專案 (必須在 PIX 中開啟) 以及要匯入的修訂版本。匯入需要 Shader Explorer 修訂版本與 GPU 擷取之間的著色器原始碼相符。 匯入著色器之對話方塊的螢幕擷取畫面,顯示專案選取與修訂版本選取下拉式方塊。 將著色器匯入 GPU 擷取後,即可透過「編輯後繼續」套用變更,這會將著色器修補至播放中。套用編輯後,即可使用 Shader Trace 產生新的執行階段指令成本資料,再匯出回 Shader Explorer 專案進行進一步分析。 用於套用匯入之著色器變更的編輯按鈕螢幕擷取畫面。

操作說明

找出最大暫存器壓力

使用 Block Disassembly 檢視 Options 面板中的 Go to Max 按鈕,前往最大壓力的單一位置。 Block Disassembly 選項功能表中顯示 Go to Max Cost、Max SGPRs 與 Max VGPRs 選項的螢幕擷取畫面。 使用 Block Graph 檢視以圖形方式瀏覽著色器區塊。縮小即可看到依暫存器壓力調整大小與著色的區塊。壓力最高的區塊會最大且色彩最深。

找出降低速率的指令

使用 Block Disassembly 檢視 Options 面板中的 Instruction Colors 切換開關設定色彩模式。如需詳細資訊,請參閱指令色彩。

找出可作為降低壓力目標的暫存器

使用暫存器存留期視覺效果了解暫存器配置與存留期。使用公式 (!LiveIn OR !Live Out) AND IsRead 判斷未完全跨越區塊的暫存器,是降低暫存器壓力時可能的目標暫存器。這些暫存器會以不同的色彩顯示,以便快速識別。 暫存器存留期視覺效果的螢幕擷取畫面,以兩種不同的色彩區分跨越區塊與未跨越區塊的暫存器。

隱藏視覺效果以節省螢幕空間

使用 Block Disassembly 檢視 Options 面板中的 Visualization Placement 切換開關,移動或隱藏視覺效果。 Block Disassembly 檢視中 Visualizations 功能表選項的螢幕擷取畫面。
最後修改於 2026年10月8日