我正在运行Windows 7.当我使用DxDiag时,它将版本显示为11。
当我使用可以访问Windows API的Visual Studio 2012时,它可以运行功能级别为D3D_FEATURE_LEVEL_11_1的代码
所以我很困惑,我的DirectX版本的确切版本是什么?
答案 0 :(得分:7)
这里有许多令人困惑的因素在起作用,所以让我们一次拿一个:
D3DCreateDevice
,您仍然无法获得D3D_FEATURE_LEVEL_11_1
。这是出于反算的原因,并确保行为不会在NULL到达9.1 - 11.0的地方发生变化。你必须手动列出数组中的11.1值才能得到它 - 假设系统+驱动程序组合实际上支持它。请注意,如果您在阵列中包含11.1,则在没有KB2670838的情况下,Windows Vista SP2,Windows 7 RTM或Windows 7 SP1上的呼叫将失败并显示E_INVALIDARG
。D3D_FEATURE_LEVEL_11_1
或任何新的可选硬件功能,因为它不包含对新WDDM 1.2驱动程序模型的支持。您必须使用Windows 8或更高版本才能获得带有WDDM 1.2驱动程序和适当硬件的D3D_FEATURE_LEVEL_11_1
。请参阅MSDN 通常,为Windows桌面应用程序处理所有这些的正确方法是:
D3D_FEATURE_LEVEL lvl[] = {
D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL_9_1
};
DWORD createDeviceFlags = 0;
#ifdef _DEBUG
createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
#endif
ID3D11Device* pDevice = nullptr;
ID3D11DeviceContext* pContext = nullptr;
D3D_FEATURE_LEVEL fl;
HRESULT hr = D3D11CreateDevice( nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr,
createDeviceFlags, lvl, _countof(lvl),
D3D11_SDK_VERSION, &pDevice, &fl, &pContext );
if ( hr == E_INVALIDARG )
{
hr = D3D11CreateDevice( nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr,
createDeviceFlags, &lvl[1], _countof(lvl)-1,
D3D11_SDK_VERSION, &pDevice, &fl, &pContext );
}
if (FAILED(hr))
...
然后检测对Direct3D 11.1的支持,您会看到是否可以获得Direct3D 11.1接口:
ID3D11Device1* pDevice1 = nullptr;
ID3D11DeviceContext1* pContext1 = nullptr;
hr = pDevice->QueryInterface( __uuidof( ID3D11Device1 ),
reinterpret_cast<void**>( &pDevice1 ) );
if ( SUCCEEDED(hr) )
{
// DirectX 11.1 is present, otherwise only DirectX 11.0
(void)pContext->QueryInterface( __uuidof( ID3D11DeviceContext1 ),
reinterpret_cast<void**>( &pContext1 ) );
}
不要根据Direct3D Feature Level安装哪个版本的DirectX做出假设,反之亦然。
有关设备创建和DirectX 11.x版本检测的各种细微差别的详细信息,请参阅this post。
答案 1 :(得分:0)
https://msdn.microsoft.com/en-us/library/windows/desktop/ff476876%28v=vs.85%29.aspx
功能级别是一组定义良好的GPU功能。
您的DirectX版本是11,但根据您的硬件(GPU),您可能会获得功能级别11_1。如果你的朋友在街上有Windows 8.1和支持的显卡,他们可能有11.2个功能。
虽然从听起来来看,你至少可以使用11.1个功能。
答案 2 :(得分:0)
http://blogs.msdn.com/b/chuckw/archive/2013/02/26/directx-11-1-and-windows-7-update.aspx
DXDIAG:即使将KB 2670838应用于Windows 7 SP1,DXDIAG仍会将其报告为“DirectX 11”。
如果有疑问,我建议依赖CreateDevice(等人)返回的功能级别是正确的。
答案 3 :(得分:0)
如前所述:运行dxdiag->进行显示->检查驱动程序模型。如果您有WDDM 1.3,则系统中已安装DirectX 11.2,如果您有WDDM 1.2,则系统中已安装DirectX 11.1。