转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2717

几个月前我提到过如果通过IE10或单独装补丁的方法,可以在Win7上获得部分D3D 11.1和DXGI 1.2的能力。代价是,由于debug layer的不同,那么做的话无法用D3D11_CREATE_DEVICE_DEBUG标志建立设备,所以就不能使用调试模式的D3D。Win8.1再次修改了debug layer的名字,使得这个现象在Win8.1上也会出现。如果在Win8.1上使用VS2012及以前的Win SDK,就无法建立debug设备。

Win7上的D3D11.1

从文件日期可以看出,安装了D3D11.1后的Win7,d3d11.dll已经被升级了。原先的debug layer叫做d3d11sdklayers.dll,而在Win8 SDK里有了个d3d11_1sdklayers.dll。新的d3d11.dll会去找那个文件,而不是原先的。如果把Win8 SDK或者VS2012里的d3d11_1sdklayers.dll拷到Win7的System32/SysWOW64下,是不是就行了呢?尝试一下发现还需要dxgidebug.dll,接着拷过去后问题解决。这么一来,Win7上就算升级到D3D11.1,也不用担心没法debug。

Win8.1上的VS2012

Win8.1下DX升级到了11.2,使得debug layer多了个d3d11_2sdklayers.dll的文件。所以就简单了。把Win8.1 SDK或者VS2013里的d3d11_2sdklayers.dll考到System32/SysWOW64下,问题就解决了。Win8 SDK/VS2012本来就有dxgidebug.dll,所以这个可以不用再拷。

总结

由此,Win7和Win8.1下可以继续使用原先的IDE和SDK,并仍然保留调试D3D的功能。