«Правильный» способ определить, есть ли у вас среда выполнения Direct3D 11.1, будет следующим:
#include <d3d11_1.h>
#include <wrl/client.h>
#pragma comment(lib,"d3d11.lib")
bool IsDirect3D11_1OrGreater()
{
Microsoft::WRL::ComPtr<ID3D11Device> device;
HRESULT hr = D3D11CreateDevice(
nullptr,
D3D_DRIVER_TYPE_NULL,
nullptr,
0,
nullptr,
0,
D3D11_SDK_VERSION,
device.GetAddressOf(),
nullptr,
nullptr
);
if (FAILED(hr))
return false;
Microsoft::WRL::ComPtr<ID3D11Device1> device1;
return SUCCEEDED(device.As(&device1));
}
Затем вы звоните IsDirect3D11_1OrGreater
. Если это так, то вы можете безопасно использовать такой флаг, как D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT
, для которого требуется среда выполнения Direct3D 11.1.
Имейте в виду, что вы не должны использовать D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT
как само собой разумеющееся. Его действительно следует использовать только для программ, интенсивно использующих DirectCompute, которые могут сильно загружать GPU и потенциально могут привести к тому, что система перестанет реагировать на пользовательский интерфейс. Используйте его с осторожностью.
Это также означает, что вашему приложению потребуется карта Direct3D Feature Level 11.0 или выше для использования DirectCompute 5.0 — или — для этого потребуется Direct3D Feature Level 10.0 и необходимо выполнить CheckFeatureSupport(D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, ...)
вызов и убедиться, что D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x
верно для DirectCompute 4.0.
Если IsDirect3D11_1OrGreater
возвращает false, вы должны сообщить пользователю:
This application requires the DirectX 11.1 Runtime. It is supported on
Windows 7 Service Pack 1 with KB2670838 or later Windows operating systems.
См. также DirectX 11.1 и Windows 7 и DirectX 11.1 и обновление Windows 7.
person
Chuck Walbourn
schedule
16.09.2016