【发布时间】:2016-07-20 23:41:14
【问题描述】:
我在这里遇到了一个奇怪的问题,我很难找到答案。
我有一个 C++ 3D 引擎,我正在使用 OpenCL 进行优化和 OpenGL 互操作性。
在我的机器上,我安装了两个 GPU,一个 GTX 960 和一个 AMD R9 280X。
一切正常,包括检测 GPU 和 CPU 以及 图形互操作性运行得非常快。
但是,在一台机器上,我们总是在系统上有一个默认的 GPU(这是在 windows 上设置的,具体取决于我们安装驱动程序的顺序)。
所以,当我开始读取所有设备并检测 GPU 时,当我尝试创建互操作性上下文时,我遇到了一个奇怪的情况:
当我将 AMD 作为默认 GPU 时: 在 NVIDIA 设备的情况下,OpenCL 向我返回一个错误,通知它不可能创建 CL 上下文(因为不是默认 GPU),并且当我为 AMD GPU 创建 OpenGL 上下文时,上下文已正确创建。
当我将 NVIDIA 作为默认 GPU 时: 在 NVIDIA 设备的情况下,上下文创建正确,但是当我尝试创建 AMD 上下文时,返回一个错误,系统崩溃!
所以,我的主要问题是如何在运行时检测默认 GPU 以创建互操作性上下文,仅适用于默认 GPU,因为 AMD 正在崩溃而不是返回错误...(因为错误我可以设置一个标志通知基于此结果的默认 GPU...)。
有人知道如何在运行时使用 C++ 检测默认 GPU 吗?
亲切的问候。
【问题讨论】:
标签: c++ opengl interop opencl gpu