首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intel集成图形错误识别(DXGI)

Intel集成图形错误识别(DXGI)
EN

Stack Overflow用户
提问于 2016-03-14 19:28:51
回答 1查看 837关注 0票数 2

我正在用DirectX 12处理的空白交换链填充一个窗口。当我用显式多适配器愚弄一圈的时候,我发现了这个奇怪的行为.

正如目前已经存在的几乎所有DX12演示代码中所示,我循环遍历所有使用IDXGIFactory4::EnumAdapters1()的DXGI适配器,以在D3D_FEATURE_LEVEL_11_0或更高版本中找到最合适的适配器(或在我的例子中为每个适配器)。如演示中所示,我丢弃了所有具有DXGI_ADAPTER_FLAG_SOFTWARE的适配器:

代码语言:javascript
复制
if ((adapterDesc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) != FALSE) 
    continue; // Check the next adapter.

在我的实现中,我将所有兼容的适配器转储到std::vector中,供以后使用。

如果我使用一个断点来检查运行时的情况,我注意到在循环退出后,我的适配器列表只包含一个适配器,这不是我所期望的,因为我有一个NVIDIA GeForce GT 650 m和Intel HD Graphics 4000。

通过在循环期间中断并检查每个适配器的DXGI_ADAPTER_DESC2结构,我发现我得到的确实是GT 650 m,这意味着我的集成图形正在将自己标识为一个软件适配器。

这本身是有道理的,但如果你看看一个常春藤桥模图 (这就是我所拥有的),你就会看到一个很大的区域被封锁为“处理器图形”,英特尔自己对它的定义如下:“处理器图形指的是物理上在处理器包中或集成到处理器硅中的图形。”只会对我尖叫“硬件适配器”。

如果删除上面的代码块,我确实会在列表中得到两个适配器,但第二个适配器标识为"Microsoft呈现驱动程序“,并给出了0x1414的供应商ID,而谷歌表示英特尔通常返回0x8086作为其ID。这份清单甚至没有提到0x1414的所有者。

而且,让事情更加混乱,如果我检查信息中心在我的英特尔高清图形控制面板,它说它有一个供应商ID的0x8086

在有人问:是的,我的司机应该是最新的,我一注意到就更新了他们。奇怪的是,DxDiag给了我一个不正确的集成图形的驱动日期,但是对于GT 650米也是如此(虽然稍微接近事实)。离散GPU驱动程序为WDDM 2.0,而集成图形驱动程序为WDDM 1.3,这可能是相关的,因为我认为它也应该是2.0。(更新是否失败?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 20:57:36

if (adapterDesc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE)筛选器的主要原因是避免选择Microsoft呈现驱动程序。这使用了不支持WARP11 12的DirectX软件设备。

所有版本的WARP11都支持DirectX 11。WARP12目前是开发人员专用的设备。“图形工具”可选特性按需安装)。

如果您的离散部分返回此标志的true,则可能是一个错误。这可能是代码中的一个bug,驱动程序的错误,或者Optimus样式选择的一些奇怪的副作用。WARP / MBR实际上是唯一期望返回DXGI_ADAPTER_FLAG_SOFTWARE的东西。

您还可以通过对if ( ( adapterDesc.VendorId == 0x1414 ) && ( adapterDesc.DeviceId == 0x8c ) )著名供应商/设备测试排除MBR,但我建议深入了解您的代码,以理解为什么您不正确地将DXGI_ADAPTER_FLAG_SOFTWARE返回给硬件设备。

请参阅Direct3D 11创建装置的解剖

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35996360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档