如何在较旧的 GPU 上测试 OpenGL 应用程序?

Posted

技术标签:

【中文标题】如何在较旧的 GPU 上测试 OpenGL 应用程序?【英文标题】:How do you test an OpenGL application on older GPUs? 【发布时间】:2017-08-08 08:49:20 【问题描述】:

我的所有开发工作都是在一台相当先进的机器上完成的,但我的一些用户使用的是石器时代的机器。虚拟化较旧的操作系统和不同的 CPU 架构很容易,但我还没有找到任何方法来虚拟化较旧的 GPU。

当您开发针对旧版本 OpenGL 的程序时,您如何知道它是否可以在具有旧 GPU(较低 OpenGL 版本和较少可用扩展)的机器上运行?

有 GPU 模拟器吗?关闭 GPU 上某些功能的方法?

跟进:

如何使用为特定版本的 API 生成的扩展加载器?例如,如果我为 OpenGL 版本 2.1 生成 glad 文件,即使我的驱动程序支持更高版本,这是否会限制我的上下文版本?

【问题讨论】:

在着色器顶部附近是 OpenGL 版本的指示器...只需使这些匹配所需的容量...例如 330 核 您在使用它们之前检查哪个版本/扩展“花哨的东西”来自它们,您可能会在您周围的旧机器上尝试它,并且您阅读用户的崩溃报告,而不是工作。如果它不是非常重要的话。对于真正好的测试,您可能需要使用带有实际旧显卡的实际机器。 【参考方案1】:

ubuntu

sudo add-apt-repository ppa:paulo-miguel-dias/mesa
sudo apt update
sudo apt upgrade

如果发生冲突,请使用 dpkg -r ... 。 说“mesa-vulkan 需要 mesa9,所以没有安装任何东西”

sudo dpkg  -r mesa-vulkan 

退出。

export LIBGL_ALWAYS_SOFTWARE=1
.....

在终端中

【讨论】:

这与 OP 问题有什么关系?【参考方案2】:

尝试来自 nvidia 的 NVEmulate 我很久以前就开始使用它来模拟我没有可用的较新的 GPU,但它也可以反过来使用(降级你的 GPU) .它只模拟 nvidia GPU 的每个版本的 exe 支持不同的芯片。

您的问题是在旧 gfx 卡上只有旧版本的 gfx 驱动程序,而这些通常是主要问题而不是 gfx 卡本身。除非使用适当的模拟器,否则您根本无法测试...因为旧驱动程序与新卡不兼容,反之亦然。

我正在解决这个问题,方法是关闭诸如 Intel HD 或 GLSL 等“坏”卡的多上下文以及旧 ATI 的一些扩展等高级功能 因为您在 Windows 上拥有所有古怪的 OpenGL 实现......每个品牌都有自己的怪癖,如果您使用的是 OpenGL,我建议以 nvidia 为目标GPU 的。公平地说,AMD 真的挺身而出,让他们的(以前的 ATI)卡可用,而 ATI 多年来一直未能做到)。如果您的目标是 DirecX,那么 AMD 就是 nvidiaDirectX 实现中存在错误以进行更改(可用但包含内部泄漏导致随着时间的推移速度变慢和崩溃,因此您需要不时重新启动应用程序,您知道在玩某些游戏 2 小时后会出现深色纹理错误...)

PS。一些 gfx 错误与 gfx 无关,例如 AMD 驱动程序极易受到应用程序中任何地方的内存泄漏的影响(即使它们与 gfx 无关)造成不相关的破坏并且非常难以调试。

相关:

What is the proper OpenGL initialisation on Intel HD 3000? Determine Intel HD Graphics Card Version Via WinAPI bds 2006 C hidden memory manager conflicts

【讨论】:

【参考方案3】:

据我所知,不可能涵盖所有可能性。

开发应用程序时,您最好了解必要条件,包括最低操作系统版本、最低 OpenGL 版本、RAM、VRAM。 处理核心功能通常不能很好地在硬件中实现......扩展可能是一场噩梦。

【讨论】:

以上是关于如何在较旧的 GPU 上测试 OpenGL 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在较旧的IOS /旧浏览器上使用Graphql Vue Apollo?

在较旧的 Postgres (9.4) 上使用 Django 3+

为啥在较新的 Android 设备上预检失败,但在较旧的设备和台式机上却没有?

在较旧的 iOS 设备上安装 IPA 时出错:无法为 64 位 Mach-O 输入文件找到匹配的拱门

在Android应用中正确加载资源(使用openGL)

在 iOS 10 中创建本地通知的方法是啥。它在较旧的iOS版本中有效吗? [关闭]