2015-02-26 17 views
0

Windows Advanced Rasterization Platform (WARP) поддерживает variety of feature levels, которые различаются в зависимости от версии DirectX API, который установлен:Как определить уровень поддержки Direct3D WARP?

  • уровней особенность 9_1, 9_2, 9_3, 10_0 и 10_1, когда Direct3D 11 установлен
  • все выше уровней удобства плюс 11_0, когда Direct3D 11.1 установлен на Windows 7
  • все выше особенность уровней плюс 11_1, когда Direct3D 11.1 установлена ​​на Windows, 8

Как я могу легко определить, что имеется лева el доступен через WARP? Я знаю, что для аппаратного устройства я могу запустить ID3D11Device::GetFeatureLevel, но я не вижу эквивалента для WARP.

+0

При использовании WARP вы также сможете вызвать 'GetFeatureLevel'. Вы видите проблемы с этим? – MooseBoys

+0

@MooseBoys, документация говорит, что 'GetFeatureLevel' возвращает *" член перечислимого типа D3D_FEATURE_LEVEL, который описывает уровень функции ** аппаратного ** устройства. "* – NextInLine

ответ

2

Используйте код от 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. Нам не нужно перечислять 9.1, 9.2 или 9.3 уровень функции в lvl, так как WARP поддерживает как минимум 10.1 на настольных ПК Windows. Для надежности я предлагаю листинг 10.0.