GLSL 扩展在应该可用时不可用

GLSL extension not available when it should be

我在华硕 RoG fx553 笔记本电脑的 Nvidia GeForce GTX 1050 上进行 GPU 计算,出于某种原因,尽管 Nvidia 官方网站将此 GPU 列为与线程内在指令兼容(GL_NV_shader_thread_group 和之类的),使用 #extension GL_NV_shader_thread_group : require 会不断抛出错误并报告扩展不可用,即使我使用的是带有 #version 430 的 4.3 上下文(我也尝试过 4.4 无济于事)。由于我是加载扩展的新手,我不知道我是否遗漏了 Glad/GLFW 端的一些设置。

编辑:我下载了 OpenGL 扩展查看器,它继续告诉我我的 GPU 应该支持 GL_NV_shader_thread_group,即使在 OpenGL 4.3 上下文中也是如此。

既然你提到你 运行 在笔记本电脑上,我假设这台笔记本电脑也有一个 iGPU(例如,集成到 CPU 中的英特尔 GPU)。问题很可能是你的程序不在 NVIDIA GPU 上 运行 而只在 iGPU 上。一种解决方案是在 NVIDIA 驱动程序控制面板中设置一个应用程序配置文件,让它为您的应用程序使用 NVIDIA GPU。还应该有一个选项可以全局强制对所有内容使用 NVIDIA GPU(尽管不推荐)。另一种方式(我通常使用的方式)是 add the following line of code to your program:

extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 1U;

这将导出驱动程序在加载到您的进程时检查的全局变量的相应符号。如果该符号存在且变量设置为 1,则驱动程序将为该特定进程使用 NVIDIA GPU…