我正在开发一种使用DirectX渲染更强烈图像的产品。到目前为止,知道有些计算机有多个GPU,我选择GPU通过以下方法找到具有最大AdapterRam
的GPU来进行渲染:
using ( ManagementObjectSearcher searcher = new ManagementObjectSearcher( "select * from Win32_VideoController" ) ) {
foreach ( ManagementObject mo in searcher.Get() ) {
var adapterRam = mo.Properties[ "AdapterRAM" ].Value;
//Use this one if it is the largest
}
}
我遇到一些用户遇到问题的问题,他们有一个集成的英特尔视频卡,它会说明它有多少AdapterRAM
,因此它会被选中。我认为它报告了已分配的一些系统RAM。此卡的绘图操作过于强烈,导致视频驱动程序崩溃。计算机确实有一个非常强大的Nvidia卡,应该是被选中的卡。
我认为解决这个问题的一个好方法是永远不要在已安装的卡上选择集成卡,但我还没有找到一种方法来以编程方式确定卡是否已集成。
有没有办法检测卡是否已集成与已安装?
有没有更好的方法来选择哪个GPU优越?
答案 0 :(得分:2)
在此编程指南https://msdn.microsoft.com/en-us/library/windows/desktop/ff476877(v=vs.85).aspx中介绍了枚举适配器的DirectX方法。我不建议使用Windows管理对象来执行此操作。
生成的IDXGIAdapter接口包含适配器的所有功能,此帖https://gamedev.stackexchange.com/questions/61938/how-to-check-if-user-has-integrated-graphics-card中介绍了识别集成适配器的方法,遗憾的是,您必须知道要避免的适配器的硬件ID - 没有任何设置可以告诉您它是否已集成。