dxgi_adapter structure:

 typedef struct dxgi_adapter { IDXGIAdapter1 *p_adapter; DXGI_ADAPTER_DESC1 m_adapter_desc; std::vector<dxgi_adapter_output> m_outputs; bool check_support(REFGUID ref_iid) const; } dxgi_adapter_t; bool dxgi_adapter::check_support(REFGUID ref_iid) const { return SUCCEEDED(p_adapter->CheckInterfaceSupport(ref_iid, nullptr)); } 

For reasons I do not understand, when I try to call the interface check

 if(!p_helper_->primary_adapter().check_support(__uuidof(ID3D12Device))) { char buffer[255] = {0}; sprintf_s(buffer, "Primary adapter %ls does not support Direct3D 12 interface", p_helper_->primary_adapter().m_adapter_desc.Description); PRINT_MSG(buffer); p_helper_.release(); throw std::runtime_error(buffer); } 

Always get

[000000874492F898 (renderer)] Error: Primary adapter Radeon 550 Series does not support Direct3D 12 interface

At the same time, I know for sure that it supports this interface.

How to check the support for Direct 3D 12 Api correctly without resorting to D3D12CreateDevice call?

    1 answer 1

    This method can only be used to verify support for Direct3D 10.x interfaces. From the documentation

    Remarks

    Note that you can use the Windows Vista SP1 interface. If you try to use Direct3D 11.x and later, CheckInterfaceSupport DXGI_ERROR_UNSUPPORTED . Therefore, do not use CheckInterfaceSupport . Instead, to verify whether the operating system supports a specific interface, try to create the interface. For example, if you call the ID3D11Device::CreateBlendState method, it doesn’t support the ID3D11BlendState interface.

    • Those. As I understand, you still have to try to create an ID3D12Device ? - LLENN 2:19
    • @ LENN Apparently yes. - VTT