如何从D3D12CreateDevice()获取ID3D12Device10句柄?接口不支持报错
解决D3D12CreateDevice获取ID3D12Device10失败的问题
核心原因
ID3D12Device10接口仅在Windows 11 22H2(内部版本22621)及更高版本中引入,你的系统是Windows 11 21H2(22000.856),低于该接口要求的最低系统版本,因此无论直接通过D3D12CreateDevice请求,还是后续调用QueryInterface,都无法获取到该接口实例。
而ID3D12Device6在Windows 10 2004(内部版本19041)就已支持,你的系统版本满足兼容性要求,所以可以正常创建。
解决方案
- 升级系统版本:将Windows 11升级到22H2或更高版本,系统会自动包含支持ID3D12Device10的D3D12运行时组件。
- 降级目标接口:若无法升级系统,建议继续使用ID3D12Device6或更低版本的接口,保证代码在当前系统环境下正常运行。
验证系统支持的最高D3D12Device版本
可以通过以下代码逻辑确认当前系统能支持的最高接口版本:
ID3D12Device* pBaseDevice = nullptr; HRESULT hr = D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_12_0, IID_PPV_ARGS(&pBaseDevice)); if (SUCCEEDED(hr)) { // 依次尝试查询更高版本接口 ID3D12Device6* pDevice6 = nullptr; if (SUCCEEDED(pBaseDevice->QueryInterface(IID_PPV_ARGS(&pDevice6)))) { // 系统支持Device6 pDevice6->Release(); } ID3D12Device10* pDevice10 = nullptr; if (FAILED(pBaseDevice->QueryInterface(IID_PPV_ARGS(&pDevice10)))) { // 系统不支持Device10 } pBaseDevice->Release(); }
内容的提问来源于stack exchange,提问作者Luke Zhou
相关产品推荐
相关产品推荐

