如何确定 Direct3D WARP 支持的功能级别?
How do I determine the Direct3D WARP supported feature level?
Windows Advanced Rasterization Platform (WARP) supports a variety of feature levels 因安装的 DirectX API 版本而异:
- 功能级别 9_1、9_2、9_3、10_0 和 10_1(安装 Direct3D 11 时)
- 当 Direct3D 11.1 安装在 Windows 7
上时,所有以上功能级别加上 11_0
- 当 Direct3D 11.1 安装在 Windows 8
上时,所有以上功能级别加上 11_1
如何通过 WARP 轻松确定可用的功能级别?我知道我可以 运行 ID3D11Device::GetFeatureLevel
的硬件设备,但我没有看到 WARP 的等效项。
使用 Anatomy of Direct3D 11 Create Device 中的代码,但改用 WARP 设备类型。
D3D_FEATURE_LEVEL lvl[] = {
D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0 };
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_WARP, nullptr,
createDeviceFlags, lvl, _countof(lvl),
D3D11_SDK_VERSION, &pDevice, &fl, &pContext );
if ( hr == E_INVALIDARG )
{
hr = D3D11CreateDevice( nullptr, D3D_DRIVER_TYPE_WARP, nullptr,
createDeviceFlags, &lvl[1], _countof(lvl)-1,
D3D11_SDK_VERSION, &pDevice, &fl, &pContext );
}
if ( FAILED(hr) )
// error handling
然后检查 fl
以查看它是 10.1、11.0 还是 11.1。我们不需要在 lvl
中列出 9.1、9.2 或 9.3 功能级别,因为 WARP 在 Windows 台式电脑上至少支持 10.1。为了稳健,我建议也列出 10.0。
Windows Advanced Rasterization Platform (WARP) supports a variety of feature levels 因安装的 DirectX API 版本而异:
- 功能级别 9_1、9_2、9_3、10_0 和 10_1(安装 Direct3D 11 时)
- 当 Direct3D 11.1 安装在 Windows 7 上时,所有以上功能级别加上 11_0
- 当 Direct3D 11.1 安装在 Windows 8 上时,所有以上功能级别加上 11_1
如何通过 WARP 轻松确定可用的功能级别?我知道我可以 运行 ID3D11Device::GetFeatureLevel
的硬件设备,但我没有看到 WARP 的等效项。
使用 Anatomy of Direct3D 11 Create Device 中的代码,但改用 WARP 设备类型。
D3D_FEATURE_LEVEL lvl[] = {
D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0 };
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_WARP, nullptr,
createDeviceFlags, lvl, _countof(lvl),
D3D11_SDK_VERSION, &pDevice, &fl, &pContext );
if ( hr == E_INVALIDARG )
{
hr = D3D11CreateDevice( nullptr, D3D_DRIVER_TYPE_WARP, nullptr,
createDeviceFlags, &lvl[1], _countof(lvl)-1,
D3D11_SDK_VERSION, &pDevice, &fl, &pContext );
}
if ( FAILED(hr) )
// error handling
然后检查 fl
以查看它是 10.1、11.0 还是 11.1。我们不需要在 lvl
中列出 9.1、9.2 或 9.3 功能级别,因为 WARP 在 Windows 台式电脑上至少支持 10.1。为了稳健,我建议也列出 10.0。