Windows10下開啟D3D11的Debug Layer


D3D Runtime是分層構造的,從核心的基本功能開始,在外部層中構建可選的功能和開發人員輔助功能。各個層(layers)只會添加功能,但不會修改現有行為。 

可在調用D3D11CreateDeviceD3D11CreateDeviceAndSwapChain創建設備時並提供一個或多個D3D11_CREATE_DEVICE_FLAG值來創建層(layers)。

 

核心層(Core Layer)

核心層默認存在。在API和設備驅動程序之間提供映射,從而最大程度地減少了高頻調用的開銷。由於核心層對於性能至關重要,因此它僅執行關鍵驗證。其余層是可選的。

 

調試層(Debug Layer)

調試層提供了廣泛的附加參數和一致性驗證(例如,驗證着色器鏈接和資源綁定,驗證參數一致性以及報告錯誤描述)。

若要創建支持調試層的設備,必須安裝DirectX SDK(需要D3D11SDKLayers.dll),然后在調用D3D11CreateDevice函數或D3D11CreateDeviceAndSwapChain函數時指定D3D11_CREATE_DEVICE_DEBUG標志。

如果在啟用調試層的情況下運行應用程序,則該應用程序的運行速度將大大降低。但是,要確保在發布應用程序之前清除其錯誤和警告,請使用調試層。有關更多信息,請參閱Using the debug layer to debug apps

在DirectX SDK附帶的DirectX Control Panel來啟用/禁用調試標志。

 

當調試層列出內存泄漏時,它將輸出對象接口指針及其友好名稱的列表。 默認的友好名稱是“ ”,開發者可使用ID3D11DeviceChild :: SetPrivateData方法和D3Dcommon.h中的WKPDID_D3DDebugObjectName GUID來設置友好名稱。

const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );

 

Windows10下開啟D3D11的Debug Layer

在windows 10上,帶Debug Layer標志位來創建D3D11設備會失敗。調試運行在Output窗口會輸出如下信息:

D3D11CreateDevice: Flags (0x2) were specified which require the D3D11 SDK Layers for Windows 10, but they are not present on the system.
These flags must be removed, or the Windows 10 SDK must be installed.
Flags include: D3D11_CREATE_DEVICE_DEBUG
。。。 。。。
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\samples\c++\DXUT11\Core\DXUT.cpp(3557): D3D11CreateDevice hr=Unknown (0x887a002d)

 

解決方法:

1. 計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU下的UseWUServer設置成0,並重啟計算機     注:不設置這個的話,安裝Graphics Tools會因連不上微軟的服務器而失敗

2.  安裝Graphics Tools(圖形工具)

 

dxerr.lib(dxerrw.obj) : error LNK2019: unresolved external symbol __vsnwprintf

1>dxerr.lib(dxerrw.obj) : error LNK2019: unresolved external symbol __vsnwprintf referenced in function "long __stdcall StringVPrintfWorkerW(unsigned short *,unsigned int,unsigned int *,unsigned short const *,char *)" (?StringVPrintfWorkerW@@YGJPAGIPAIPBGPAD@Z)
1>F:\ModenD3D\HLSL-Development-Cookbook\book_sample\Chpater 1 - Forward Light\Capsule Light\Debug\CapsuleLight.exe : fatal error LNK1120: 1 unresolved externals

在Linker -- Input的Additional Dependencies中添加legacy_stdio_definitions.lib

 

參考

Software Layers

VS2015+Win10 調試DirectX 報錯

DirectX在VS2015上編譯時遇到“無法解析的外部符號 __vsnwprintf”的解決方法及原因

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM