偵錯 DirectX 圖形

Visual Studio 包含診斷工具,您可用於協助解決在 DirectX 為主的遊戲和應用程式中的呈現問題。

在 Visual Studio 中偵錯 DirectX 圖形

偵錯遊戲或應用程式中的轉譯問題通常不會簡單到只是啟動偵錯工具和逐步執行程式碼而已。 診斷圖形轉譯問題時會面臨若干特別的挑戰。 例如,在任何指定的框架中,會看到產生數十萬或百萬個像素的輸出,而且還可能產生比這多出數倍但看不見的像素,其中或許只有幾個像素會顯現您正在嘗試診斷的問題。 此外,每個轉譯框架背後可能都有高達數 GB 的資料,但讓情況變得更複雜的是,所有這些資料都是在分割工作為成千上萬特殊處理單位的專屬硬體上處理,而這些單位全都在中央處理器 (CPU) 的直接觀測範圍之外。 傳統的偵錯工具不適用於解決此類問題。

在 Visual Studio 的圖形診斷工具是設計協助您尋找轉譯問題的來源,方式是開始使用可以識別問題的視覺成品, 然後透過相關的色器程式碼、圖形管線、繪製呼叫、資源和裝置狀態,甚至透過應用程式本身原始程式碼,來向後追蹤。

以下是 Visual Studio 可協助您處理的一些轉譯問題類型。

Hh315751.collapse_all(zh-tw,VS.110).gif裝置狀態

圖形裝置的正確組態很重要,因為這個組態會設定整個應用程式中的模型和材質資料必須符合的預期目標。 例如,如果裝置狀態指定彎曲順序為順時針,則任何以反時針方向指定頂點的模型 都無法正確轉譯。如果深度測試函式設定為大於,則較離開的物件將會繪製在較接近之物件的上面。 因為通常會將原始程式碼中的問題根源移開以遠離受影響的物件,裝置狀態的問題可能難以診斷。

圖形診斷可以協助您檢查受影響像素後面的資料和裝置狀態,讓您可以縮小範圍找到裝置狀態問題。

Hh315751.collapse_all(zh-tw,VS.110).gif著色器 Bug

不論程式碼是 C++ 還是高階著色器語言 (HLSL),在應用程式程式碼中產生錯誤幾乎無可避免。 不過,因為沒有 C++ 和其他語言所享有的豐富偵錯支援,偵錯 HLSL 程式碼傳統上比較困難。

由於圖形診斷可讓您偵錯 HLSL 程式碼,因此可協助您尋找和修正著色器 Bug。 使用圖形記錄中擷取的資訊,HLSL 偵錯工具就可以在著色器層級「重新執行」繪製事件,讓您可以逐步執行、設定中斷點,並檢查暫存變數、參數及常數緩衝區的內容。 為了協助您專注於正確的事情,圖形診斷從彙製事件 (透過 [圖形管線階段] 視窗) 和從個別像素 (透過 [圖形像素歷史記錄]) 到 HLSL 偵錯工具的進入點。

Hh315751.collapse_all(zh-tw,VS.110).gif未初始化或不正確的參數和常數

圖形應用程式會使用參數和常數緩衝區,有效率地提供資訊給圖形管線,讓不同的物件可以透過自訂著色器程式碼以不同方式轉換或轉譯。 當常數緩衝區或參數未初始化時,或者,如果不包含預期的值時,或讓對應的物件不正確或不呈現。 常數緩衝區或參數的問題難以診斷,因為 Bug 不一定是實際錯誤是否由常數緩衝區或參數的一個問題,或是在著色器程式碼,因此,如果,它是著色器 Bug,著色器相對應。

圖形診斷可協助您識別對應至錯誤的著色器,以及使用 HLSL 偵錯工具檢查著色器程式碼,讓您可以縮小參數及常數緩衝區問題的範圍。 當您認為著色點程式碼正確無誤時,可以使用 HLSL 偵錯工具找出可疑參數或常數,使用 [圖形事件呼叫堆疊] 巡覽至呈現受影響物件的應用程式,然後尋找上次設定參數或常數緩衝區的位置。

DirectX 版本相容性

圖形診斷支援使用 Direct3D 10、Direct3D 10.1、Direct3D 11 和 Direct3D 11.1 的應用程式,並為使用 Direct2D 的應用程式提供有限的支援。 不支援使用舊版 Direct3D、DirectDraw 或其他圖形應用程式開發介面的應用程式。

Hh315751.collapse_all(zh-tw,VS.110).gif有限的 Direct2D 支援

由於 Direct2D 應用程式開發介面的許多功能會使用 Direct3D 應用程式開發介面,圖形診斷可用來協助偵錯使用 Direct2D 的應用程式。 不過,由於圖形診斷會攔截基礎 Direct3D 事件而較非較高層級 Direct2D 事件,因此無法擷取未使用 Direct3D 的 Direct2D 事件詳細資料。 此外,由於 Direct2D 應用程式開發介面呼叫與產生的 Direct3D 應用程式開發介面呼叫之間的關聯性不一定是明確的,因此對 Direct2D 應用程式使用圖形診斷並不簡單。 儘管如此,您可以使用圖形診斷取得那些使用 Direct2D 應用程式的低階轉譯問題的資訊。

作業系統和 SDK 需求

Windows 8 會安裝本文件所述圖形偵錯功能所需的執行階段元件。 要在 Windows 7 和 Windows Vista 上使用這些功能,您必須安裝下列其中一種軟體開發套件 (Software Development Kit (SDK)):

  • DirectX SDK (2010 年 6 月)

  • Windows SDK (版本 7.1)

相關主題

標題

描述

圖形診斷

說明如何使用圖形診斷來診斷和偵錯DirectX 應用程式中的轉譯問題。

圖形診斷範例

提供示範如何使用圖形診斷擷取圖形資訊和診斷常見的轉換問題的文章。

Visual Studio 偵錯

簡介 Visual Studio 中的偵錯功能。

DirectX 圖形與遊戲 (英文)

連結主題所討論 DirectX 圖形技術的文件。