【问题标题】:Directx 12 - Adapter not supportedDirectx 12 - 不支持适配器
【发布时间】:2016-07-08 07:51:46
【问题描述】:

我目前使用的是 nvidia 675M,在 Directx 11 中,我在功能级别 11_0 下运行良好

我正在关注 Directx 12 的指南,他们说我仍然可以创建功能级别为 11_0 的设备,但是当我运行它时说它不受支持

我知道 100% 我正在使用正确的适配器,因为它说 675m

所以只是想知道是否有任何方法可以解决这个或其他方法,或者我是否只是需要一个新显卡:(

【问题讨论】:

    标签: directx-12


    【解决方案1】:

    NVidia 675M 是“Fermi”GPU,NVIDIA 根据this post 应该支持 DirectX 12。 NVidia 的 DX12 驱动程序支持的最初重点是他们的 Maxwell 和 Kepler 部件,因此请与 NVidia 联系以获取支持 Fermi 的驱动程序。

    要记住的另一个问题是,在具有多个显卡的系统中,您需要确保实际上选择了正确的适配器。 DirectX 12 VS templates 使用下面的代码来实现这个:

    void DX::DeviceResources::GetAdapter(IDXGIAdapter1** ppAdapter)
    {
        *ppAdapter = nullptr;
    
        ComPtr<IDXGIAdapter1> adapter;
        for (UINT adapterIndex = 0; DXGI_ERROR_NOT_FOUND != m_dxgiFactory->EnumAdapters1(adapterIndex, adapter.ReleaseAndGetAddressOf()); ++adapterIndex)
        {
            DXGI_ADAPTER_DESC1 desc;
            DX::ThrowIfFailed(adapter->GetDesc1(&desc));
    
            if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE)
            {
                // Don't select the Basic Render Driver adapter.
                continue;
            }
    
            // Check to see if the adapter supports Direct3D 12, but don't create the actual device yet.
            if (SUCCEEDED(D3D12CreateDevice(adapter.Get(), m_d3dMinFeatureLevel, _uuidof(ID3D12Device), nullptr)))
            {
    #ifdef _DEBUG
                WCHAR buff[256] = {};
                swprintf_s(buff, L"Direct3D Adapter (%u): VID:%04X, PID:%04X - %ls\n", adapterIndex, desc.VendorId, desc.DeviceId, desc.Description);
                OutputDebugStringW(buff);
    #endif
                break;
            }
        }
    
    #if !defined(NDEBUG)
        if (!adapter)
        {
            // Try WARP12 instead
            if (FAILED(m_dxgiFactory->EnumWarpAdapter(IID_PPV_ARGS(adapter.ReleaseAndGetAddressOf()))))
            {
                throw std::exception("WARP12 not available. Enable the 'Graphics Tools' feature-on-demand");
            }
    
            OutputDebugStringA("Direct3D Adapter - WARP12\n");
        }
    #endif
    
        if (!adapter)
        {
            throw std::exception("No Direct3D 12 device found");
        }
    
        *ppAdapter = adapter.Detach();
    }
    

    【讨论】:

    • 嗨查克谢谢你这么快的回复,我会仔细检查我的驱动程序是最新的,是的,我做了循环检查我得到了正确的适配器谢谢
    【解决方案2】:

    NVIDIA 还没有在 Fermi 上发布支持 DX12 的驱动程序,所以这行不通。

    【讨论】:

    • 所以现在这个显卡是不可能的?下周 frank luna 的书出版了,我想我会继续使用 Directx 11,我想被困住:(
    • 不要忘记 WARP 设备提供了令人惊讶的出色性能。我没有读过 Frank Luna 的书,但我想很多早期的章节都不需要最先进的性能水平。
    • 在低分辨率下,warp 驱动程序已经足够好,但它显示限制快速,保留资源使其崩溃,并且使用无绑定技术选择纹理描述符数组也崩溃。可能存在其他错误。
    • 好的,现在我的显卡无法使用directx 12?
    • 如果您有任何崩溃要使用 WARP 驱动程序报告,并且可以提供有关如何导致崩溃的详细信息,或者更好的是可编译的重现,那么我可以看看并让我的同事(在微软)知道发生了什么。是的,不幸的是,现在没有适用于 Fermi 的 DX12。
    【解决方案3】:

    Guru3D herehere 上的用户观察到,在当前的 R384.76 中引入了 Fermi 中对 DirectX 12 的初始支持,尽管驱动程序发行说明没有说明这一点。

    您可能需要运行 3DMark Time Spy 或类似的 DirectX 12 工作负载来确认这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 2013-11-06
      • 2012-01-08
      • 1970-01-01
      相关资源
      最近更新 更多