MSDN on D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT说:


Direct3D 11:直到Direct3D 11.1才支持此值。


这是否意味着运行时版本或功能级别?

我可以将标志传递给D3D11CreateDevice,但仅传递功能级别11_0吗?

功能级别无关吗,仅取决于安装的运行时版本?如果将标志传递给DX运行时11.0,会发生什么?会被默默忽略吗?还是我首先必须以某种方式检测DX运行时版本,然后仅在DX运行时版本至少为11.1时才通过标志?

最佳答案

确定您是否具有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。实际上,它仅应用于大量占用GPU的DirectCompute程序,这些程序会大量占用GPU,并可能导致系统对UI失去响应。请谨慎使用。
这也意味着您的应用程序需要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 and Windows 7DirectX 11.1 and Windows 7 Update

关于directx - D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT是否可以与D3D_FEATURE_LEVEL_11_0一起传递?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39491352/

10-09 05:25