PDB 的鬆散資料夾與 PDB 的 ZIP 封存
PIX 支援在 PDB 檔案以一組鬆散 *.pdb 檔案的形式組織在資料夾中時找到它們。此外,PIX 也支援找到儲存在 *.zip 封存內的 PDB。 視您的組建系統而定,使用 .zip 封存組織大量 PDB 可能會有好處。如需詳細資訊,請參閱「PDB 最佳做法」一節。PDB 最佳做法
著色器組建系統可能會產生 10k+ 甚至 100k+ 的排列組合,因此會產生大量的著色器 PDB。幾項最佳做法可以大幅改善 PIX 為 GPU 擷取尋找所需 PDB 時的效能。- 以著色器雜湊命名您的 PDB。編譯著色器時,您可以使用自訂指定的檔案名稱或著色器的雜湊將 PDB 儲存為 .pdb 檔案。建議您一律使用著色器的雜湊,因為這樣 PIX 稍後尋找 PDB 時會容易得多。這很容易做到:
- 考慮使用 .zip 封存組織大量 PDB 檔案,特別是超過 10k 個時。對於超過 10k 個 PDB 的數量,組織與列舉大量 PDB 檔案的成本可能很高。PIX 支援使用 .zip 封存儲存大量 PDB 集合並加快搜尋速度。為了獲得最佳結果,建議您的 PDB .zip 封存只包含 PDB 檔案 (不要壓縮包括其他非 .pdb 檔案在內的整個組建輸出),並一律遵循第 1 項建議,使用著色器雜湊命名檔案。
- 對於超過 100k 個的極大量 PDB 檔案,請考慮根據組建頻率將 PDB 檔案組織成多個 .zip 封存。如果 .zip 封存未變更,PIX 可以有效地略過列舉先前已掃描過的 .zip 封存,藉此節省時間。因此,對於極大型的組建系統,建議您將著色器 PDB 檔案組織成多個 .zip 封存,每個封存包含組建頻率相似的 PDB。這樣一來,如果您重新建置部分著色器,許多未變更的著色器就不需要更新其 PDB .zip 封存。作為起點建議,目標是讓每個 .zip 封存包含約 5k 到 50k 個 PDB (這不是硬性規定,只是良好的起點)。因此,擁有 250,000 個著色器排列組合的遊戲,可能會想根據遊戲的關卡、材質或圖形子系統,將 PDB 分割並組織成幾十個 .zip 封存。然後只需將 PIX 指向包含所有產生之 .zip 封存的目錄即可。對於這種數量的 PDB,為了獲得最佳效能,遵循第 1 項建議 (使用著色器雜湊命名檔案) 極為重要。
精簡 PDB
精簡 PDB 是在編譯著色器時使用 /Zs 產生的。產生的 PDB 只包含原始程式檔與編譯引數,不包含完整的偵錯資訊,但大小比完整 PDB 小得多。使用精簡 PDB 時,PIX 可以顯示著色器原始碼與編譯引數,但會停用著色器偵錯與內嵌 HLSL。若要使用這些功能,您可以從檢視頂端的工具列開啟 Commands 面板,以產生完整 PDB。 更新後的著色器會透過編輯後繼續顯示為編譯器選項編輯,並修補到播放中。如同任何其他編輯,PIX 會更新反組譯、事件計時、轉譯輸出,以及新著色器所變更的任何其他內容。 注意:如果使用不同版本的編譯器產生完整 PDB (PIX 隨附最新的編譯器),可能會因此產生不同的 IL 與 GPU 指令,PIX 會通知您其中的差異。若要使用特定編譯器,您可以取代 C:\Program Files (x86)\Microsoft GDK\bin\Scarlett\pixsc (適用於 XBOX Series X|S) 或 C:\Program Files (x86)\Microsoft GDK\bin\XboxOne\pixsc (適用於 XBOX One) 中的編譯器 DLL,然後重新開啟擷取。儲存含有 PDB 的 PIX GPU 擷取
開啟 PIX GPU 擷取時,PIX 會嘗試從上述 PDB 搜尋路徑載入任何遺失的著色器 PDB。PIX 找到可用的著色器 PDB 之後,下次儲存時,.xpix 擷取檔案就會將這些 PDB 檔案內嵌到擷取中。如果 PDB 已內嵌在 .xpix 檔案中,日後開啟此 GPU 擷取時就不再需要從 PDB 搜尋路徑找到原始 PDB 檔案。當同事或其他人需要開啟並分析 PIX GPU 擷取時,這可以大幅簡化工作。最佳做法是在出現 “Shader PDB files have been resolved” 提示時儲存 PIX 擷取,讓 PIX GPU 擷取包含其所需的一切。
